波特率9600 无效验位 停止位1位 数据8位
功能:串口通信发送:每次4个字节,格式如:55A1D1XX
8位LED根据XX的值来显示(比如计算机发送55A1D155,接受后LED偶数位亮)
单片机接受成功后并返回OK到计算机
#include<reg52.h> unsigned char flag,i; // flag为标志位 unsigned char code table[3]={0x55,0xA1,0XD1}; unsigned char idata str[4]; void main() {
/*串口初始化*/
TMOD=0x20; // 设置定时器1为工作方式2 TH1=0xfd; //装初值,设定波特率为9600 TL1=0xfd; TR1=1; //启动T1定时器 REN=1; //允许串口接收数据,REN、SM0、SM1这三句亦可以只写一个SCON=0x50 SM0=0; //串口工作方式设置为方式1, SM1=1; EA=1; //开总中断 ES=1; //开串口中断 P1=0x77;
while(1) { if ( flag == 1 ) { ES=0; flag=0; SBUF='O'; while(!TI); TI=0; SBUF='K'; while(!TI); TI=0; ES=1; } } }
void ser() interrupt 4 { while(RI) { for(i=0;i<4;i++) { str=SBUF; RI=0; if(str==table) continue; //准备接收下一位 else break; //跳出循环 i++; if(i==4) { P1=str[3]; i=0; flag=1; } } } }
因没有做实验的条件,大家看看这个程序写的行不行,有什么地方要改正的,谢谢了。
|