微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 采用中断方式定时一秒,怎么没反应

采用中断方式定时一秒,怎么没反应

时间:10-02 整理:3721RD 点击:

各位前辈们,大家好,我是初学单片机,刚学到定时这用定时器1工作在方式1产生1S定时,然后LED取反,闪烁,,反反复复搞了好多次就是不知道错误在哪,身边又没有人能解答的,麻烦各位不吝赐教,到底哪里有问题,感激不尽。
#include<stc89c54rd+.h>
unsigned char i;
sbit led=P1^0;
void main()
{
TMOD=0x01;
TR1=1;
TH1=0x0B;
TL1=0x7F;
EA=1;
ET1=1;
while(1);
}            //初始化
void timer1()interrupt 5
{
TF1=0;
TH1=0x0B;
TL1=0x7F;
i++;
if(i==50)         //定时0.02S*50
{
i=0;
led=~led;
}
}

是不是中断号配置错了?Timer1的不是3吗?

.你这程序问题不少额。
一段一段来吧。
void main()
{
TMOD=0x01;
TR1=1;
TH1=0x0B;
TL1=0x7F;
EA=1;
ET1=1;
以上这段,TMOD设置,高4位是设置定时器1,低四位是设置定时器0.上面TMOD=0x10吧。
void timer1()interrupt 5
{
TF1=0;
TH1=0x0B;
TL1=0x7F;
i++;
if(i==50)         //定时0.02S*50
{
i=0;
led=~led;
}
}
这一段,void timer1()interrupt 5 这里,interrupt x 这个x的数字在stc单片机中,只有0-4,分别代表外部中断0,定时器0,外部中断1,定时器1,串行口。所以应该是void timer1()interrupt 3 才对。然后TF1=0这句,进入中断程序就会自动清零的,不用手动清零,当然,写了也没错。这样应该就差不多了。

楼上说得对这个interrupt 5错了

中断算是子函数 应该先声明吧 而且   你的程序编的有问题吧  你自己单步运行下看看时序对不  

中断向量号写错了

多谢指教,新手磕磕碰碰,犯了这么多错误

谢谢指教,,,,,

果然,看岔行了,,哎,,多谢

应先声明?就是在开头写下void timer1()么?

谢谢,,,看岔了

我设置了一个也差不多,我都不是interrupt 5,是interrupt 1,或interrupt 0都没用,就是不出效果

哈哈                    

中断函数是不需要声明的

了解一下

果然有高人指点。

我只知道在51单片机中,interrupt x 这个x的数字0-5分别代表外部中断0、外部中断1、定时器0中断、定时器1中断、定时器2中断和串行口中断。(有些没有定时器2)

TMOD 中断号修改了 程序对了吗?

tmod=0x10~~~interrupt 3 ,另外
#include<stc89c54rd+1.h>这个头文件可以找到吗?题主自己写的?正常用51的库文件不是就可以了吗

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top