为什么我写的这个程序执行的时候单片机发出的频率不对?求大神解惑

作者&投稿:夙初 (若有异议请与网页底部的电邮联系)
52单片机驱动蜂鸣器,我这样写为什么不对,求大神~

#include
void yanshi();
sbit beep=P3^6;
void main()
{
while(1){
beep=0;
yanshi();
beep=1;
yanshi();
}
}
void yanshi()
{
int i;
for(i=100;i>=0;i--);
}

程序这样就行了,如果你的是有源可以,无源也可以。需要高电平打开三极管开关。

啊哦!
进定时中断后, 第一步是关闭当前的定时器,
进行处理之后,
再开启定时器, 如果需要连续定时的话,
退出定时中断.

修改如下:

void main()	//主函数
{
fre=50000;
beep=0;
TMOD=0x11;//设置定时器0,定时器1为工作方式1
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR1=1;
TR0=1;//启动定时器0
while(1)
{
if(flag<40)fre=50000;
if(flag>=40&&flag<80)fre=5000;
if(flag>=80&&flag<120)fre=1000;
if(flag>=120&&flag<160)fre=500;
if(flag>=160&&flag<200)fre=250;
if(flag>=200&&flag<240)fre=125;
if(flag>=240&&flag<280)fre=62;
if(flag>=280&&flag<320)fre=31;
if(flag>=320&&flag<360)fre=16;
if(flag==360)
{
flag=0;
fre=50000;
}
}
}

void timer0() interrupt 1 //定时器0中断
{
TR0=0; //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
TR0=1;
tt++;
if(tt>=10)
    {
    beep=~beep;
    tt=0;
    }
}
void timer1() interrupt 3 //定时器1中断用来产生2秒时间定时
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
flag++;

}



为什么我写的c++程序总是提示c:\\program files\\microsoft visual st...
出现这个问题应该是因为该模块没有包括预编译头文件“stdafx.h”的缘故,在VC中是用一个stdafx.cpp包含头文件stdafx.h,然后在stdafx.h里包含大部分系统头文件,这样编译时VC就通过编译stdafx.cpp把大部分系统头文件预编译进来了,在Debug目录下有 一个很大的文件*.pch,这里就存储了预编译信息,如果PCH...

拜托哪位高手帮我写一下这道程序,是c语言的,谢谢啦
电费为moneyprintf("请输入用户的月用电量e: 千瓦时\\n");scanf("%lf",&e);if(e>0 && e<=50)money=0.53*e;else if(e>50)money=0.53*50+(0.53+0.05)*(e-50);printf("用户该支出的电费是%.2lf元\\n",

JAVA我写的一个程序里要加两个类可是下面的一个类运行不出来_百度知 ...
Rectangle.main();}}class Rectangle\/\/这个类名建议更换,这个是Java API里面一个方法,你可以随便换成其他的,当然你不换也可以用!{\/\/此处不建议这么写,当然你写了也不会报错的,main是一个虚拟机作为入口的名字,jvm会认识这个单词的!public static void main(){Scanner scn = new Scanner(System.i...

我写了个服务器端程序,现在要将这个程序注册成window服务,该怎么做...
读者只需注意几个要点: 1、创建一个派生自ServiceBase的入口类。这个入口类管理这个Windows服务的生存期。 public class MyService : System.ServiceProcess.ServiceBase { …… } 2、在入口类的main方法里将服务向Windows的服务控制器(Service Control Manager, SCM)注册,代码: ...

一个C语言的题目,为什么我写的程序最后输出是地址?不是值?
最后输出的并不是地址,而是b数组逻辑越界后的值(最后一个已经物理越界了),原因是你没把printf用括号括进去,导致printf不在内循环内 内循环加个大括号就好 for (i = 0; i < n; i++){ for (j = 0; j < LINES; j++) {\/\/加个大括号 br[i][j] = 2 * ar[i][j]; prin...

为什么我写的单片机C程序 让LED灯不停闪呢
你这个程序有问题 a=50000;p1_1=0;while(a--);a=50000;p1_1=1;while(a--);\/\/到了这里当a=0时就退出了,单片机执行NOP(也就是什么都不做)你应该这样:while(1){ \/\/死循环,永不跳出 a=5000 ;while(a--);p1_1 = ^p1_1;\/\/取反:由ON变为OFF,或由OFF变为ON } ...

java程序如何让程序重新再跑一遍,就是我写的这个游戏如何实现重新开始...
使用方法调用,配合循环 写一段伪代码,可能会帮你理清思路:do{ 游戏开始运行;...\/\/循环中可以用方法调用来运行游戏 \/\/游戏失败,给用户提示 再玩一次?接受用户的选择 \/\/如果用户选择"是",再次循环,游戏重新开始 \/\/如果用户选择”否",退出循环,游戏结束 }while(真);...

我写了一个VB得程序,设置断点运行的时候没有问题,但是正常执行的时候...
可能有些系统函数不能被中断的,所以程序就死了。你可以设计一些赋值语句,再系统函数执行后,查看被赋值的变量。,也可以达到调试的效果吧。也有可能你在这设置了断点,后面的语句不能被执行,而另一段代码可能要根据某个变量的值来执行,由于变量赋值在断点之后,所以另一段代码可能进入死循环。我只能说...

大家帮我看看为什么这个程序运行后没有结果,还有我不太理解为什么写了re...
这个程序分析如下:没有出结果是因为你在代码中多加入了scanf语句,这是要求输入a,b的值,值之间用,隔开。按你的意思a,b已经有初值了,可以把scanf语句删除。第二个问题:函数调用结束会返回到调用处进行下一步指令,return z表示此函数调用结束,所以会返回到第八行,把返回值赋值给c。

我写的hello,world程序为什么从这里打不开,双击后出现一个黑框,然后...
你直接运行的话,程序执行完就自动退出了,但是你在VC中运行,会等待你按任意键退出的。你可以在main函数最后一句添上 getchar(); 这样编译后就可以直接双击运行了,getchar就是等待用户按任意键。

华莹市19494386541: 各位大神,我第一次用舵机,写的这个舵机程序为什么只在单片机启动的时刻动一次,而不能连续动呢? -
邱成祛风: 改成这样试一下#include<reg52.h> sbit motor=P0^1; void main() { motor=1; TMOD=0x11; TH0=(65536-2500)/256; TL0=(65536-2500)%256; TH1=(65536-17500)/256; TL1=(65536-17500)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; void Time0() ...

华莹市19494386541: 用C++写的程序单片机能运行的吗 -
邱成祛风: 这关键不在于用什么语言写程序,而关键在于写完的程序,必须要编译成HEX代码文件,下载到单片里才能运行.不是你在电脑上写出程序了,单片机就运行的,在电脑上的程序,对单片机毫无意义.那用C++写的程序,有编译器吗?没有编译器,就不能编译成HEX代码,那程序就对单片机毫无意义.

华莹市19494386541: 单片机C8051F410显示编译成功,但是程序不能运行. Program Size: data=97.0 xdata=0 code=2706 -
邱成祛风: keil软件没有注册只能运行code小于2KB的程序,或者target options>target>code rom size 选项选择错误 要选择large: 64K program

华莹市19494386541: 为什么我的代码编译的时候没错,运行的时候却有错 -
邱成祛风: 编译成功只能说明你的语句没有错误,比如把;写成,或者单词拼错这一类的错误在编译中会提示.但是比如你的程序是一个死循环这样的结构内容问题时,可以编译但不能运行

华莹市19494386541: 关于计算机和单片机程序执行过程的几个问题 -
邱成祛风: 计算机或单片机之所以能执行一些程序,是因为我们认为的给它的储存器写入程序.这个就是错误的 应该说是他们可以从储存器里将程序读入内存 或者运算器中1 计算机如何读取存储器的一条程序并开始执行的呢 这个要是每一步都说可以写3部以上的书2FlashROM里有很多地址,我们在烧程序的时候能否自己设定地址呢 这个可以没问题 这个是通过特定的协议 来的 cpu检测买你函数的位置 这个是需要看单片机的寻址模式来确定的3 这个 你的理解只到了表面 是的 可以说和剧场一样但是 他们还存在一种指针关系 就和票一样 可以在rom中烧多个程序 这个是没问题的有些时候 他们都可以同时被执行

华莹市19494386541: cpu运行时程序是在flash中还是在RAM -
邱成祛风: x86cpu和单片机读取程序的具体途径 pc机在运行程序的时候将程序从外存(硬盘)中,调入到RAM中运行,cpu从RAM中读取程序和数据 而单片机的程序则是固化在flash中,cpu运行时直接从flash中读取程序,从RAM中读取数据 造成这种差别...

华莹市19494386541: 为什么我用keil软件写的LCM12864程序,用STC - ISP给单片烧程序时候很容易蓝屏? -
邱成祛风: 是串口驱动的问题,开发程序,尤其是硬件这边经常跟串口打交道,一般的ghost系统由于是通用驱动,经常会在底层出问题.所以你最好重新装系统,别用ghost的,用安装的,这样就不会出驱动问题了,简单的解决方法是先用个USB转串口线试试吧.

华莹市19494386541: c++与单片机 -
邱成祛风: 用C还是C++不是根本性的问题,但是C++的很多特性比如虚函数等是需要额外的开销的,因此,在单片机这样系统资源很有限的情况下,C++带来的很多特性并无法发挥,因此大家一般也都只是用C语言来写单片机程序.有一些单片机编程环境,把文件扩展名改为cpp,就可以使用C++的功能.为了对资源的使用降到最低,很多单片机程序直接使用汇编语言来写.

华莹市19494386541: 51单片机并口可写进去程序但是程序不执行是怎么回事? -
邱成祛风: 最好先写个小程序如LED的闪烁(保证程序正确,注意要加死循环),然后若不行的话就检查一下复位电路和晶振.,看晶振有没有起振(方法:用万用表测晶振二端的电压,二端的压差在2-2.2V).

华莹市19494386541: C语言和单片机语言 -
邱成祛风: 晕,首先建议你将问题中所有"这么"改成"怎么" 问题1,不需要用C语言表示单片机语言(机器语言),在用相应软件编译你编写的程序时,编译软件会将你的程序"翻译"成"机器语言"(就是你所说的单片机语言),用来烧录到单片机...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网