大家帮我看看C51中断程序!

来源:百度知道 编辑:UC知道 时间:2024/05/25 04:53:00
#include<reg51.h>
int i=0;
void main()
{
TMOD=0x20;
TH1=0xD8;
TL1=0xF0;
TR1=1;
ET1=1;
EA=1;
while(1);
}
void t1(void) interrupt 3 using 0
{
i++;
if(i==29)
{
i=0;
P1=0x08;
P2=0xF9;
}
} 我想定时器过几秒后,显示P1的内容。但是不管i的值在大,显示时间都不过一秒。请问,问题出在哪里哦??大家帮我改改

你的定时器用的有问题
你的定时器1用的是方式2,即自动重装,所以你的定时只有FF-F0,这样算起来,你的定时器最多15us左右(12M晶体的情况下),所以你的I最大为65536,这样算起来的话,即最大也不会起过一秒的,

你把TMOD = 0x20,改成TMOD = 0x10,把i的比较值改为20,把TH1=3C;TL1=B0,
即可,

#include<reg51.h>
int i=0;
void main()
{
TMOD=0x10; //方式1,16bit定时
TH1=0x3c; //65536 - 50000= 0x3cbo
TL1=0xb0;
TR1=1;
ET1=1;
EA=1;
while(1)
{
;
}
}

void t1(void) interrupt 3 using 0 //定时50ms
{
TH1 = 0x3c;
TL1 = 0xb0;
i++;
if(i==20)
{
i=0;
P1=0x08;
P2=0xF9;
}
}

有什么问题,可消息我