|
外部中斷和定時(shí)器中斷,不是同時(shí)中斷,
液晶屛顯示結(jié)果是:a始終等于1,液晶屛只在oxc0上顯示數(shù)字1,
為什么外部中斷可以,定時(shí)器中斷不行,
請(qǐng)大神指教!!!
#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) //延時(shí)
{
u16 x,y;
for(x=num;x>0;x--)
for(y=110;y>0;y--);
}
void Init_ex_int0() //外部中斷初始化函數(shù)
{
EA=1;
EX0=1;
IT0=1; //下降沿觸發(fā)
}
void InitTimer0() //定時(shí)器中斷初始化函數(shù)
{
TMOD=0x05; //設(shè)置定時(shí)器0工作模式1
TH0=0xFF; //計(jì)數(shù)器裝初值
TL0=0xFF;
EA=1; //開(kāi)總中斷
ET0=1; //開(kāi)計(jì)數(shù)器0中斷
TR0=1; //啟動(dòng)定時(shí)器0
}
//計(jì)數(shù)器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的中斷服務(wù)程序
{
EX0=0;
a++;
}
void timer0() interrupt 1 //定時(shí)/計(jì)數(shù)器1中斷服務(wù)程序
{
TH0=0xFF; //計(jì)數(shù)器裝初值
TL0=0xFF;
ET0=0; //關(guān)定時(shí)器1中斷
a++;
}
int main(void) //主函數(shù)
{
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');
}
}
}
|
|