单片机-14_串口.ppt

单片机-14_串口

因为通讯双方基本等同,只是人为的规定一个为发送方,一个为接受方。可以编制含有初始化函数、发送函数、接受函数的程序,在主程序中根据程序的发送方和接收方设置选择变量TR,根据TR的值选择要调用的函数。这样点对点通讯双方都运行此程序,只需在程序运行之前,进行人工设置选择变量(一个令TR=0,另一个令TR=1),然后分别编译,在两台机器上分别装入并运行即可。 #include c8051f020.h #define uchar unsigned char #define TR 1 //发送、接收控制变量,0发送,1接收 uchar idata buf[16]; //发送、接收缓冲区 uchar pf; //校验和 void init(void) //初始化函数 { TMOD = 0x20; //定时器T1方式2,作波特率发生器 TH1 = 0xe8; TL1 = 0xe8; PCON = 0x00; //smod=0 TR1 = 1; SCON0=0x50; //串口0方式1,允许接收 } void send(uchar idata *d) //发送函数 { uchar i; do{ SBUF = 0xAA; //发送AA作联络信号 while(!TI0); TI0 = 0; while (!RI0); RI0 = 0; }while((SBUF0^0xBB) != 0);//异或,直到对方同意接收 do{ pf = 0; //初始化校验和为0 for(i=1;i16;i++) { SBUF0=d[i]; //发送一个字节 pf +=d[i]; //计算校验和 while(!TI0); TI0 = 0; } //总共发送16字节 SBUF = pf; while(!TI0); TI0 = 0; while(!RI0); RI0 = 0; }while (SBUF0 != 0); } void receive(uchar idata *d) //接收函数 { uchar i; do{ while(!RI0); RI0 = 0; }while((SBUF0^0xAA) != 0);//异或,接收发送请求 SBUF = 0xBB; //回答应答BB,同意接收 while(!TI0); TI0 = 0; while(1) { pf = 0; //初始化校验和为0 for(i=1;i16;i++) { while(!RI0); //接收并保存一个字节 RI0 = 0; d[i] = SBUF; pf +=d[i]; } //总共接受16字节 while (!RI0); //接受校验和 RI0 = 0; if((SBUF0^pf) == 0)

文档评论(0)

1亿VIP精品文档

相关文档