请高手帮忙,51单片机执行定时器0的中断程序后,需要大约15秒才能返回主程序断点处继续运行? 太奇怪了?

作者&投稿:实淑 (若有异议请与网页底部的电邮联系)
希望高手帮忙,说明一下单片机中定时器0和定时器1中断执行过程~

定时器1 50ms中断一次,每次中断FLAG加1
40次即为2秒,所以在定时器0中断时,要判断是0-40,40-80等时间段
定时器0中断时,要再次装入定时时间常数,但在0-40,40-80等时间段内装入的时间常数是不同的,因此beep取反的频率就不同
但由于定时器0中断10次BEEP才取反一次,所以当fre=50000;50*10= 500ms才取反一次
这么低的频率对无源蜂鸣器是没有响应的
当fre=50000; 0.156*10= 1.56ms取反一次,周期3.12ms 频率300多HZ,对于有源蜂鸣器响应是很困难的
所以用有源蜂鸣器演奏例程中的音乐只能呕呀嘈杂难为听了

低电平触发方式中断执行后要复位中断的IE0=0或IE1=0;
下降沿触发方式就不用

我懂了,经过我的仿真,当程序第一次进入DELAYTIME时,执行到R0=03,R0=00,R2=F0时,T0中断到了,这时中断程序调用了DELAYTIME,当执行完中断服务程序,这是R0变成了0,返回到之前的延时函数,此时R0=0,R1=0,R2=0,所以你的延时程序就变成了256*256*256=16秒了,所以成了你说的15秒后才执行完。 所以以后写中断程序注意断点的保护,把中断程序里有修改掉的寄存器先压栈保护,结束之前弹出来,这样就没事了。还有你在中断程序结束前没重新开启T0。还有在你的程序最好多点注释,这样看着不吃力。

不是几个周期,你在服务程序中有3个延时子程序调用,每一个延时如果是12M晶振的话,大约390毫秒,所以返回时间理论上约1.2秒左右。

汇编我有好几年没看,看到生疏,或许看错了,
你的主程序运行完了就等待了,你怎么检测它返回主程序了,你在等待这里做异个信号出来(可以把中段中的P1.7置0以后延时一下,在主程序等待这里他把重新置1看看)
看P1.7下降沿,到上升沿的时候历时多久

不明白定时中断子程序里为什么要关掉TR0,关掉下次就进不去了。
D0:
CLR TR0 ;????????????
...

请高手帮忙解答,简述51单片机P1,P3的主要功能和性能特点
答:P1口 P1口为8位准双向口,每一位均可单独定义为输入或输出口,当作为输入口时,1写入锁存器,Q(非)=0,T2截止,内上拉电阻将电位拉至"1",此时该口输出为1,当0写入锁存器,Q(非)=1,T2导通,输出则为0。作为输入口时,锁存器置1,Q(非)=0,T2截止,此时该位既可以把外部电路拉成低...

求C语言高手帮忙解决一下程序问题,51单片机
答:第一个循环内Data = temp;直接把Data给赋值没了,如传输的数是0x7F,程序传数据是高位开始,传0了后,程序把Data = temp,就相当后面的7位给清0了。所以在没完成你要的数据的时候,要小心原始数据。把循环内 :temp = Data《 1; Data = temp; 改成 temp = temp 《 1;试试看,个人...

关于51单片机定时器的问题
答:程序我给你贴出来吧,仿真了下可以运行 ORG 0000H LJMP MAIN ORG 000BH LJMP PTF0 MAIN: MOV P0,#0FFH;8个led都不亮 MOV SP,#80H;堆栈赋初值 MOV 30H,#28H;计数器单元赋初值 40个50ms即定时2s MOV TMOD,#1;选择T0工作方式1 MOV TH0,#3CH;定时器赋初值 定时50ms MOV TL0,#0...

关于51单片机使用两个定时器进行控制的问题
答:TF0=0;//关闭定时器0 TF1=1;打开定时器1 D1=0;//LED灭 while(1){ if(aa==20){ aa=0;D1=1;//LED亮,持续亮两秒,TF1=0;TF0=1;} if(bb==40){ bb=0;D1=0;//LED灭一秒 TF0=0;TF1=1;} } 并且在程序开始处开启定时器1(也就是先执行的定时器),但是要注意...

请求51单片机高手啊,本人刚学51单片机谁能帮忙写下程序,题目是:以16...
答:去找个51型号的单片机的PDF文档来看看吧。串口通信主要是SCON寄存器的配置,还有PCON寄存器中的SMOD位(双倍波特率位)。然后再看看定时器T1怎么用,相应的寄存器怎么配置。数码管显示和C51的语法网上都有很多资料可以参考,搜一搜就有了。学单片机最重要的是要培养自学能力和实际应用的能力。祝你成功!

51单片机 P 0 1 2 3同时发出不同信号。 只要汇编语言。求高手帮忙...
答://好久没做过单片机了,我给你提供个思路.//你说的闪一次,我理解是亮一次,灭一次。//初始化定时器,每1/24秒触发一次中断。手头没有资料,你自己查下,很简单 //在中断函数里这样写 static unsinged int flg = 0;void inter_t0(){ if(flg %3 ==0){//每3个 1/24秒 闪烁一下,亮灭...

51单片机高手进
答:如果是p1.0那么只能用查询的方法,就是(死循环中,可以通过定时器跳出)不断的读P1.0,当发现其有状态变化时就记一次数,最后得到结果除二就可以了。这个建议采用外部中断实现,做起来耗的资源少也容易些!

51单片机中怎样用P1口控制两个LED数码显示器同时显示不同的数,是不是...
答:因为你是要控制两个数码管,所以只用一个并口是不够的,至少还得有两个位选,动态显示不需要锁存器的,如果需要帮助可QQ 用户名

用51单片机编程:电子时钟(设计电子时钟,用51单片机编程)
答:如果有问题欢迎到我空间相关文章下留言 乐于回答~~程序如下:; 定义管脚 S_SET BIT P1.0 ;数字钟秒控制位 M_SET BIT P1.1 ;分钟控制位 H_SET BIT P1.2 ;小时控制位 SECOND EQU 30H MINUTE EQU 31H HOUR EQU 32H ORG 00H SJMP MAIN ORG 0BH LJMP INT_T0 MAIN...

单片机编程题,请高手帮忙
答:都是MCS-51指令系统。(1)movx a,@r1 anl a,#0f0h mov b,a inc r1 movx a,@r1 swap a anl a,#0fh orl a,b sjmp end (2)甲机:mov tmod,#20H mov th1,#0f4h mov th0,#0f4h setb tr1 mov scon,#01010000B mov r0,#40H s:mov sbuf,@r0 jnb ti,clr ti mov r7,#...