#include "stc12c5a.h"
#define uchar unsigned char
#define uint unsigned int
sbit Alm_led =P4^4; //报警指示灯
uchar rec_cnt;
uchar rec_stat;
uchar rec_buf[32];
void delay_1s(uint x) //延时
{
uint y;
uint z; //如果延时不够长可以把z的值加大
while(x--)
{
for(y=0;y<50000;y++)
{
z=200;;
while(z--);
}
}
}
void Init_uart0(void )
{
P4SW |=0x70; //p4.5做IO口输出
EA=0;
TMOD&=0X0F;
TMOD|=0X20;
SCON= 0X50;
TH1 = TL1 =0xfd; //9600
//---------------------
ES=1;
TR1=1;
REN=1;
//----------------------------------------------------------------------
EA=1;
}
/******************************************************************/
/* 发送数据到串口 */
/******************************************************************/
void Send_one_byte(uchar dat)
{
ES =0;
TI=0;
SBUF = dat; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
while(!TI); // 等特数据传送 (TI发送中断标志)
TI = 0;
ES=1;
}
void main(void)
{
delay_1s(1);
Init_uart0();
Send_one_byte(0);
while(1)
{
;
}
}
void int_uart(void) interrupt 4
{
uchar sbuf_temp;
if(RI==1)
{
RI=0;
sbuf_temp=SBUF;
if((sbuf_temp==0x7e) && (rec_cnt==0)) //帧起始
{
rec_stat=1;
rec_buf[0]=sbuf_temp;
rec_cnt=1;
}
else if(rec_stat==1)
{
rec_buf[rec_cnt++]=sbuf_temp;
if(rec_cnt == (rec_buf[1]+4))
{
SBUF = 0X0E;
rec_cnt=0;
}
}
}
else if(TI==1)
{
TI=0;
}
}