if(RI)
{
buf=SBUF;
odd=RB8;
for(i=0;i<8;i++)
{odd_check=odd_check ^ buf ^7;
buf<<=1;
}
if(odd_check!=odd)//校验出错发送错误代码0x55
{
SBUF=0x55;//错误代码0x55
while(!TI);//等待发送完成
TI=0;//清除发送标志
}
else
{*receive_buf=SBUF;//将来自计算机的数据保存
}
RI=0;//清除接收标志
}
}
*/
/************************************************************
//mcu初始化
**************************************************************/
void ini(void)
{
TMOD=0X20; /*定时器1八位自动重装*/
TL1=0XFA;TH1=0XFA; /*12MHz,9600波特,误差8.5%*/
//SCON=0Xd8;PCON=0X10; /*11位异步,定时器控制*/
//TR1=1;
AUXR=0xbf; //12T:0xbf 1T:0x40
RCAP2H=0XFF; //设T2为波特率发生器 12M----9600----0xFFD9
RCAP2L=0Xd9;
TR2=1;
// T2IE=1;
// T2RSE=1;
ET2=1;
TCLK=1;
RCLK=1;
TMOD=0x11; //设T1为定时方式1,设T0为定时方式1
TH1=0xec; //5ms
TL1=0X78;
TH0=0xff; //100us ff9b
TL0=0xaa;
PCON=0x00;
// SCON=0xD0; //串行口工作方式3
// ES=1; //开串行口中断
EA=1;
ET0=1; //T0开中断
ET1=1; //T1开中断
IT0=1; //外部中断0边沿触发,
EX0=1;//中断允许
IT1=1; // 外部中断1边沿触发?
EX1=1;//中断允许
TR1=1; //启动T1
TR0=1; //启动T0
}
/**********看门狗***************/
void watchdog()
{
WDT_CONTR = 0x3f;
}
/***************************/
void main(void)
{uchar chg_code,key;
ini();
init_key();
watchdog();//看门狗
for(;;)
{
// key=scankb();//键盘扫描
key= read_key();
chg_code=change_code(key);//代码转换
// series_sent(chg_code);//串口发送
ps_send(chg_code);//PS/2发送
watchdog();
}
}
上一篇:51单片机红外接收解码程序