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

2019-07-15 23:16发布

本帖最后由 dongyumin 于 2013-8-6 15:53 编辑

各位前辈们,大家好,我是初学单片机,刚学到定时这用定时器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;
}
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
dongyumin
1楼-- · 2019-07-16 01:32
 精彩回答 2  元偷偷看……
100add100
2楼-- · 2019-07-16 05:16
.你这程序问题不少额。
一段一段来吧。
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这句,进入中断程序就会自动清零的,不用手动清零,当然,写了也没错。这样应该就差不多了。
liwenbiao
3楼-- · 2019-07-16 09:01
楼上说得对这个interrupt 5错了
全丽杰
4楼-- · 2019-07-16 14:53
中断算是子函数 应该先声明吧 而且   你的程序编的有问题吧  你自己单步运行下看看时序对不  
沉默的北极熊
5楼-- · 2019-07-16 20:21
中断向量号写错了
岁月如割
6楼-- · 2019-07-17 01:31
 精彩回答 2  元偷偷看……

一周热门 更多>