单片机C延时程序

来源:百度知道 编辑:UC知道 时间:2024/06/19 20:27:38
想用计时器延时,让p0^0的发光二极管2秒为周期亮灭~~
但是我编的程序二极管根本就亮不起来..好像就没有用过中断程序..帮忙看看是哪里出错了,谢谢~

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit chu=P0^0;
uint a;
main()
{
a=0;
while(1)
{
TMOD=0x01;
TL0=0x3c;
TH0=0xb0;
EA=1;
EX0=1;

TR0=1;
if(a==20)
a=0;
if(a==40)
{
chu=1;
a=0;
}
}
}

void yanshi() interrupt 1
{
TL0=0x3c;
TH0=0xb0;
a++;
}
恩,把ex0改成et0了,但是怎么还是不行啊?
而且还把第一个if里面的a=0改成了chu=0;

阁下的程序不合规范,问题多多。在下逐一指出,再给你个修改的,你试试看。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit chu=P0^0;
uint a;
void main()
{
a=0;
while(1)
{ TMOD=0x01;
TL0=0x3c;
TH0=0xb0;
EA=1;
EX0=1;//应该是ET0=1,你定时器就没开中断,开的是外部中断0.

TR0=1;

//上面这些不要在循环里写。

if(a==20)
a=0;
一旦A=20就成了0,所以A不可能是40.
if(a==40)
{
chu=1;
a=0;
}
}//chu成了1要及时变成0,不然一直亮着。
}

void yanshi() interrupt 1
{
TL0=0x3c;
TH0=0xb0;
a++;
}
修改后的是这个:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit chu=P0^0;
uint a;
void main()
{ TMOD=0x01;
TL0=0x3c;
TH0=0xb0;
EA=1;
ET0=1;//应该是ET0=1,你定时器就没开中断,开的是外部中断0.

TR0=1;

a=0;
while(1)
{