外部中断和定时器中断,不是同时中断,
液晶屛显示结果是:a始终等于1,液晶屛只在oxc0上显示数字1,
为什么外部中断可以,定时器中断不行,
请大神指教!!!
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
#define DATA P2
sbit rs=P1^6;
sbit rw=P1^5;
sbit en=P1^4;
unsigned char a=0;
void delay(u16 num) //延时
{
u16 x,y;
for(x=num;x>0;x--)
for(y=110;y>0;y--);
}
void Init_ex_int0() //外部中断初始化函数
{
EA=1;
EX0=1;
IT0=1; //下降沿触发
}
void InitTimer0() //定时器中断初始化函数
{
TMOD=0x05; //设置定时器0工作模式1
TH0=0xFF; //计数器装初值
TL0=0xFF;
EA=1; //开总中断
ET0=1; //开计数器0中断
TR0=1; //启动定时器0
}
//计数器1
void write_cmd(u8 cmd)
{
rs=0;
rw=0;
DATA=cmd;
delay(5);
en=1;
delay(5);
en=0;
}
void write_data(u16 dat)
{
rs=1;
rw=0;
DATA=dat;
delay(5);
en=1;
delay(5);
en=0;
}
void lcd_init(void) //lcd初始化
{
write_cmd(0x02);
write_cmd(0x06);
write_cmd(0x0c);
write_cmd(0x38);
write_cmd(0x01);
}
void ex_int0() interrupt 0 //外部中断0的中断服务程序
{
EX0=0;
a++;
}
void timer0() interrupt 1 //定时/计数器1中断服务程序
{
TH0=0xFF; //计数器装初值
TL0=0xFF;
ET0=0; //关定时器1中断
a++;
}
int main(void) //主函数
{
rw=0;
rs=0;
en=0;
Init_ex_int0();
InitTimer0;
lcd_init();
while(1)
{
if(a==1)
{
write_cmd(0xc0);
write_data('1');
}
if(a==2)
{
write_cmd(0xc5);
write_data('1');
}
}
}
|