兄弟们帮忙看看:关于STC12C4052串口通讯:stc12c4052ad从串口收到一个数然后从串口发 出去。不管我发什么16进制数(如0X05,0X55等),我用串口调试助手收到的全是00。 但我将程序移植到STC89C52RC上就一切正常,难道STC89C52RD与STC12C4052AD串口有区 别??请大虾们赐教! 程序如下: #include <REG2051.H> #define uchar unsigned char #define uint unsigned int //sfr P3M0 = 0xb1;// //sfr P3M1 = 0xb2;//声明STC12c4052AD的I/O口工作方式寄存器 uchar id;//id号变量 uchar flag;//标记 void init();//初始化函数 void delay1ms(uint chi);//延时函数
void main() { init();//初始化 while(1) { if(flag==1)//当收到0x05编码时 { ES=0;//关串口中断 flag=0;//清除标记 SBUF=id;//将收到的数据发出 while(!TI);//等待发送完 TI=0;//将发送完成标志清0 ES=1;//开串口中断 } } }
void ser() interrupt 4//串口中断服务程序 { RI=0;//清RI标志 id=SBUF;//将串口收到的值赋给变量ID flag=1;//接收到数据标记 }
void init() { //P3M0=0;// //P3M1=0X80;//P3_7强推挽出 //P3_7=0;//开机先将P3_7拉低 TMOD=0x20;//设置定时器1为工作方式2 TH1=0xfd;// TL1=0xfd;//定时器1赋初值,波特率9600 (晶振11.0592MHZ) TR1=1;//启动定时器1 REN=1;//串口接收允许 SM0=0;// SM1=1;//串口工作在方式1 EA=1;//开总中断 ES=1;//开串口中断 }
|