STC单片机定时器中断问题
以下程序是最最最最简单的定时器中断程序,我用在STC15F204上怎么就不能进入中断的试了几十遍还是不行我怎么看这个程序都没有问题啊,芯片也没坏怎么回事?#include...
以下程序是最最最最简单的定时器中断程序,我用在STC15F204上怎么就不能进入中断的 试了几十遍还是不行 我怎么看这个程序都没有问题啊,芯片也没坏
怎么回事?
#include<reg52.h>
time() interrupt 1
{
P2--;
}
main()
{
TMOD=0X00;
EA=1;
ET0=1;
IE=0xff;
TH0=0;
TL0=0;
TR0=1;
while(1);
} 展开
怎么回事?
#include<reg52.h>
time() interrupt 1
{
P2--;
}
main()
{
TMOD=0X00;
EA=1;
ET0=1;
IE=0xff;
TH0=0;
TL0=0;
TR0=1;
while(1);
} 展开
2个回答
展开全部
#include<reg52.h>
unsigned char i;
main()
{
P2=0xff;
TMOD=0X01; //一般用方式1
EA=1;
ET0=1;
//IE=0xff; //多余
TH0=0;
TL0=0;
TR0=1;
while(1);
}
void time0() interrupt 1 //定时器0
{
TH0=0;
TL0=0;//重新装初值
P2--;
}
以上程序中断会每隔65536us(如果你眼睛够快的话,但是以这个速度人眼应该感觉不到,你可以每隔20次中断再让P2自减一次,这样效果更好)发生一次,但是由于P2--;自减8次之后就会变成0x00,所以之后就看不到任何现象,如果在P2之后添上如下语句就会一直看到所对应的现象(比如流水灯):
i++;
if(i==8)
{
i=0;
P2=0xff;
}
玩单片机一定要多练,希望对你有帮助,再不懂就给我留言,祝你成功
unsigned char i;
main()
{
P2=0xff;
TMOD=0X01; //一般用方式1
EA=1;
ET0=1;
//IE=0xff; //多余
TH0=0;
TL0=0;
TR0=1;
while(1);
}
void time0() interrupt 1 //定时器0
{
TH0=0;
TL0=0;//重新装初值
P2--;
}
以上程序中断会每隔65536us(如果你眼睛够快的话,但是以这个速度人眼应该感觉不到,你可以每隔20次中断再让P2自减一次,这样效果更好)发生一次,但是由于P2--;自减8次之后就会变成0x00,所以之后就看不到任何现象,如果在P2之后添上如下语句就会一直看到所对应的现象(比如流水灯):
i++;
if(i==8)
{
i=0;
P2=0xff;
}
玩单片机一定要多练,希望对你有帮助,再不懂就给我留言,祝你成功
更多追问追答
追问
我发现根本就不能进入中断程序,因为我把P2--改成P2=0XF0 这样我的8个二极管在进入中断之后至少有4个亮起的,结果没反应,硬件没有问题
追答
不是告诉你了吗?你每次进入中断时间太短了,短到连你的眼睛都觉察不到,P2都自减到0x00了,所以你也就看不到有现象了,解决方法是每进入20次中断再让P2自减一次
我再给你个测试程序:
#include
void main()
{
while(1)
{
P2=0xf0;
}
}
编译好下载到单片机里面,注意把该连接的的线都连上,确认单片机的P2口连接到8个LED(好多买的实验板都需要用杜邦线连接的),如果还是没反应,只有两个原因了,一是你电路有问题,二是器件坏了(包括LED和单片机)。再不行留下QQ
参考资料: 自己的经验
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询