定时器0溢出后,不进入定时器程序,仿真发现TF0=1时,不会跳到定时器程序,错误在哪里? 30

voidmain(void){TMOD=0X01;//对T0设置【C/T=0;作定时器之用;GATE=0,不受P3.2控制;M1M0=01,工作在方式1。】T1不作设置,... void main(void){ TMOD=0X01; //对T0设置【C/T=0;作定时器之用;GATE=0,不受P3.2控制;M1M0=01,工作在方式1。】 T1不作设置,都为0。 所以TMOD=0X01。 TH0=(65536-50000)/256;//设置初值 TL0=(65536-50000)%256; ET0=1; //允许定时器T0中断 TR0=1; //允许定时器T0计数 EA=1; //打开中断总允许开关 while(1) { LED0=0; } //死循环,不停的执行空白语句,等待定时器中断}void T0_Delay(void) interrupt 1{ i++; //每产生一次中断,i便加1 ,用来计算中断次数 TR0=0; //在执行定时器中断的过程中,首先停止定时器计数 TH0=(65536-50000)/256;//设置初值 TL0=(65536-50000)%256; if(i==20)//如果产生了20次中断 { i=0; //中断次数计数用的变量清零,下次进入中断将重新计数 LED0=~LED0; //LED0的输出状态取反,即原来是1的就清0 ,原来是0的就变为1 } TR0=1; //退出中断程序之前,先打开定时器T0让其计数计数} 展开
 我来答
匿名用户
2016-06-05
展开全部
  定时器0的溢出标志是TF0,定时器1的溢出标志是TF1,你现在用的是中断方式,需要在中断服务程序结束之前,加上一句CLR TF0即可。
  若你想不采用中断,需要等待查询该溢出标志,当为1时,再清零,就是你说的JBC了。
追问
定时器0记满后,申请中断,进入中断服务函数后TF0会硬件置0,没有置0的原因是因为没有能进入中断服务函数,仿真时也是如此,芯片是十速TM52F5278B(也51核的片应该没有关系),所以关键问题还是为什么没能进入中断服务函数,条件应该都有了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式