#include <reg51.h>#define uchar unsigned char#define TR 0uchar buf[10]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a};uchar sum;void main(void){ init ( ); if(TR==0) {send( );} if(TR==1) {receive( );}}void delay(unsigned int i){ unsigned char j; for(;i>0;i--) for(j=0;j<125;j++) ;}void init(void){ TMOD=0x20; TH1=0xf4; TL1=0xf4; PCON=0x00; SCON=0x50; TR1=1;}void send(void){ uchar i do{ delay(1000); SBUF=0xaa; while(TI==0); TI=0; while(RI==0); RI=0; }while(SBUF!=0xbb); do { sum=0; for(i=0;i<10;i++) { delay(1000); SBUF =buf[i]; sum+=buf[i]; while(TI==0); TI=0; } delay(1000); SBUF=sum; while(TI==0); TI=0; while(RI==0); RI=0; }while(SBUF!=0x00); while(1);}void receive(void){ uchar i; RI=0; while(RI==0);RI=0; while(SBUF!=0xaa); SBUF=0xBB; while (TI==0); TI=0; sum=0; for(i=0;i<10;i++) { while(RI==0);RI=0; buf[i]=SBUF; sum+=buf[i]; } while(RI==0); RI=0; if(SBUF==sum) { SBUF=0x00; } else { SBUF=0xFF; while(TI==0);TI=0; }}
时间: 2023-06-15 16:07:01 浏览: 395
51单片机电子琴
这段代码是基于单片机的串口通信代码,使用的是8051系列的单片机。其中定义了一些常量和变量,包括数据传输方向(TR)、发送或接收数据的缓存数组(buf)、校验和(sum)等。在 main 函数中,根据 TR 的值判断是发送还是接收数据,并调用相应的函数。send 函数用于发送数据,receive 函数用于接收数据。这里使用了循环来发送和接收数据,并且在发送时还进行了校验和的计算和检查。在单片机中,串口通信是非常常见的操作,常用于与外部设备进行数据交互。
阅读全文