51单片机 初学者 请教

来源:百度知道 编辑:UC知道 时间:2024/06/03 17:29:21
为什么我这程序永远进不了中断啊
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit D=P0^0;
void init();
uchar num,tt;
void main()
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
tt=0;
while(1)
{
D=0;
}

}

void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==20)
{
tt=0;
D=0;
}

}
D定义的是一个发光二级管,为什么它不闪烁 】
怎么解决让D一秒种高电平,一秒钟低电平 啊!

你把主程序和中断服务程序改成如下: 但具体的时间可以改T0初值来实现
void main()
{P0 = 0xff;
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
tt=0;
while(1) ;
}

void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==20)
{
tt=0;
D=~D;
}
}
有什么凝问,你可以上我空间给我留言:
http://hi.baidu.com/chinasndw

while(1)
{
D=0;
}//D一直=0怎么行啊,程序一直执行D=0,灯怎么会闪烁呢?还有中断里把D=0改成D=!D;建议把
while(1)
{
D=0;
}
改成
while(1);

可以进中断,但是你P0.0始终为低电平,在外部怎么能反映出来呢?

while(1)
{
D=0;
}
把D=0;删掉
if(tt==20)
{
tt=0;
D=0;
}
把D=0改为D=~D;
另:重置定时器初值最好先关定时器

可以进中断啊!!!