外部中斷、定時(shí)中斷、串口中斷C51程序
/********************************
文件所用資源
1.外部中斷0、1
定時(shí)中斷0、1
串口中斷
2.端口:P3.0,P3.1,P3.3,P3.4,P3.5
********************************/
sfr ISP_CONTR = 0xe7;
/***************************
外部中斷0服務(wù)子程序
****************************/
/*void Int0() interrupt 0
{
}*/
/***************************
定時(shí)中斷0服務(wù)子程序
****************************/
/*void timer0() interrupt 1
{
}*/
/***************************
外部中斷1服務(wù)子程序
****************************/
/*void Int1() interrupt 2
{
}*/
/***************************
自動(dòng)ISP功能函數(shù)
***************************/
void isp_check(unsigned char tmp)
{
static isp_counter=0;
unsigned int i;
unsigned char code isp_comm[16]=
{0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef};
if(tmp != isp_comm[isp_counter++])
{
isp_counter = 0;
return;
}
else if (isp_counter > 15)
{
EA = 0;
for(i=0;i<5000;i++);
ISP_CONTR = 0x60; //軟復(fù)位進(jìn)入ISP下載模式
}
}
/***************************
串口中斷服務(wù)子程序
****************************/
void serial () interrupt 4
{
if (RI)
{
RI = 0 ;
isp_check(SBUF);
}
}
/**************************
串口發(fā)送一個(gè)字符
**************************/
void com_send_dat(unsigned char dat)
{
SBUF=dat;
while (TI== 0);
TI= 0 ;
}
/**************************
串口初始化
**************************/
void init_com( void )
{
SCON=0x50 ; //UART為模式1,8位數(shù)據(jù),允許接收
TMOD|=0x20 ; //定時(shí)器1為模式2,8位自動(dòng)重裝
TH1=0xfa ; //波特率:19200 晶振="22.1184MHz"
TL1=0xfa;
PCON|=0x80; //SMOD=1;波特率加倍;
TR1 = 1 ; //啟動(dòng)定時(shí)器1
ES=1; //開(kāi)串口中斷
}
/**************************
定時(shí)器0初始化
**************************/
void init_timer0( void )
{
TMOD|=0x02; //定時(shí)器0為模式1,16位計(jì)數(shù)結(jié)構(gòu)
TH0=0xa0 ;
TL0=0xa0;
//TR0=1; //啟動(dòng)定時(shí)器0
ET0=1;//開(kāi)定時(shí)中斷0
}