求助 计数不进中断

[复制链接]
2882|10
 楼主| huchengxtu 发表于 2009-8-7 13:57 | 显示全部楼层 |阅读模式
用51对P3.5脚计脉冲个数 计数正常 就是不进中断程序
请大家帮忙看下程序

#include "reg52.h"
unsigned char sum; //计数
void IRQ_Ini()    //中断初始化
{
EA=1;
TCON=0x50;
TMOD=0x55;  //初始化为计数器
TL1=0;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
void timer1(void) interrupt 3  //就是不进这个中断服务程序
{ P2=~P2;     //作为进入中断的提示
sum++;   
}
void main()  
{
    sum=0;
   IRQ_Ini();
   
while(1)
{
    P1=TL1;  //这里显示计数正常 就是P1=SUM;不行
}  
}
sz_kd 发表于 2009-8-7 14:13 | 显示全部楼层
这个你要看看你的全局中断和你的定时中断有没有打开,打开了应该可以进的啊
 楼主| huchengxtu 发表于 2009-8-7 15:02 | 显示全部楼层
全开了 程序
smileagain 发表于 2009-8-7 18:15 | 显示全部楼层
程序好像没什么问题
P1=TL1; 这句从P1输出的是T1的低8位,也就是实际的计数值
sum++;  这句是把中断的次数赋给sum,但是根据你的设定TL1=0,可能要中断65536次sum才会加1,不知道问题会不会出在这里

还有一点建议:既然你在后面要打开TR1,之前TCON=0x50这句去掉
而且,T1赋值时要高低位一起赋,不要只写个TL1=0,TH1就不管了
救火车 发表于 2009-8-7 19:28 | 显示全部楼层
定时器0也打开了?又没有它的中断服务程序。这样定时器0溢出后就跳到 地址0000 了。
虾军师 发表于 2009-8-7 19:49 | 显示全部楼层
问题应该是4楼说的那样了
楼主大概是把中断溢出和计数器中断搞混了····
另外4楼说的也不全对 不是中断65536次 而是计65536次才中断一次执行中断服务程序
即65536个脉冲进入P3.5口后才能使sum++
:)
smileagain 发表于 2009-8-7 21:39 | 显示全部楼层
问题应该是4楼说的那样了
楼主大概是把中断溢出和计数器中断搞混了····
另外4楼说的也不全对 不是中断65536次 而是计65536次才中断一次执行中断服务程序
即65536个脉冲进入P3.5口后才能使sum++
:) ...
虾军师 发表于 2009-8-7 19:49

嗯,是我讲错了,应该是65536次计数后才能进一次中断程序,谢谢纠正

to 5楼,虽然定时器0打开了,但是TMOD=0x55已经把T0设成了计数器,即使启动也不会计数的,不会引发中断
 楼主| huchengxtu 发表于 2009-8-9 00:27 | 显示全部楼层
谢谢各位大哥的解答 已经证实了
关于 四楼大哥的建议“还有一点建议:既然你在后面要打开TR1,之前TCON=0x50这句去掉”
请问这是为什么呢?
smileagain 发表于 2009-8-9 14:10 | 显示全部楼层
定时器或计数器最好在设置完之后,并且在需要启动的时候才启动
虽然提前启动可能在多数场合下没什么差别,但在有些情况下会出错,比如提前溢出或进入中断
所以这个习惯不好
smileagain 发表于 2009-8-9 14:10 | 显示全部楼层
定时器或计数器最好在设置完之后,并且在需要启动的时候才启动
虽然提前启动可能在多数场合下没什么差别,但在有些情况下会出错,比如提前溢出或进入中断
所以这个习惯不好
hkhk888 发表于 2009-8-9 21:14 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

58

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部