采用中断方式定时一秒,怎么没反应
各位前辈们,大家好,我是初学单片机,刚学到定时这用定时器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的库文件不是就可以了吗