51串口通信c程序--模块集合

51串口通信c程序--模块集合

ID:34627745

大小:33.50 KB

页数:4页

时间:2019-03-08

51串口通信c程序--模块集合_第1页
51串口通信c程序--模块集合_第2页
51串口通信c程序--模块集合_第3页
51串口通信c程序--模块集合_第4页
资源描述:

《51串口通信c程序--模块集合》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、本文以51单片机控制四路开关量输入/六路开关量输出为例,设计了一个简单的上位机下位机通信作品,作为模块学习和整理,供读者参考!难为,2010-11-28,于上海!四路开关量输入/六路开关量输出C语言程序#include#defineuintunsignedint#defineucharunsignedcharucharindata[4];ucharoutdata[4];volatileuchartemp1=0,temp2=0;uchari,j;voidinitial_comm(void

2、){SCON=0x50;//设定串行口工作方式:mode1;8-bitUART,enableucvrTMOD=0x21;//TIMER1;mode2;8-BitReloadPCON=0x80;//波特率不加倍SMOD=1TH1=0xfa;//baud:9600;fosc=11.0596IE=0x90;//enableserialinterruptTR1=1;//timer1}voiduart_send(void){ES=0;if(indata[3]==indata[0]^indata[1]^indata

3、[2]){if(indata[1]==0x01){temp1=P0;temp1=temp1&0x0f;outdata[0]=0xee;outdata[1]=0x02;outdata[2]=temp1;outdata[3]=outdata[0]^outdata[1]^outdata[2];for(i=0;i<4;i++){SBUF=outdata[i];while(TI==0);TI=0;}}if(indata[1]==0x03){temp2=indata[2];P1=temp2;}if(indata[1

4、]==0x04){outdata[0]=0xee;outdata[1]=0x05;outdata[2]=temp2;outdata[3]=outdata[0]^outdata[1]^outdata[2];for(i=0;i<4;i++){SBUF=outdata[i];while(TI==0);TI=0;}}}ES=1;}voidmain(){initial_comm();ES=1;while(1){uart_send();}}voiduart_receive(void)interrupt4{RI=0;

5、for(j=0;j<4;j++){indata[j]=SBUF;while(RI==0);RI=0;}}四路开关量输入/六路开关量输出通讯协议通信设置:波特率9600b/s1位起始位8位数据位无校验位1位停止位命令格式:区别码(1字节)+Command(1字节)+Content(1字节)+Xor(1字节)区别码:上位发送/单片机接收:0xff单片机发送/上位机接收:0xeeCommand=0x01上位机命令单片机读取四路输入开关量的输入状态如:0xff+0x01+0x00+XorCommand=0x02

6、单片机返回四路输入状态给上位机此时,Content的1字节中的低四位分别表示四路开关量的输入状态1表示输入高电平,0表示输入低电平第一路输入(第0位)第二位输入(第1位)第三路输入(第2位)第四路输入(第3位)如:假设某一时刻四路输入开关量的输入状态为0x03,上位机读取其状态为:0xee+0x02+0x03+XorCommand=0x03上位机命令单片机控制六路输出的输出状态此时,Content的1字节中的低六位分别表示六路开关量的输出状态1表示输出高电平,0表示输出低电平第一路输出(第0位)第二路输

7、出(第1位)第三路输出(第2位)第四路输出(第3位)第五路输出(第4位)第六路输出(第5位)如:上位机欲设置某一时刻六路输出开关量的输出状态为0x01:0xff+0x03+0x01+XorCommand=0x04上位机命令单片机读取六路输出开关量的输出状态如:0xff+0x04+0x00+XorCommand=0x05单片机返回六路输出状态给上位机此时,Content的1字节中的低六位分别表示六路开关量的输出状态1表示输出高电平,0表示输出低电平第一路输出(第0位)第二路输出(第1位)第三路输出(第2位

8、)第四路输出(第3位)第五路输出(第4位)第六路输出(第5位)如:某一时刻六路输出开关量的输出状态为0x01,上位机读取其状态为:0xee+0x05+0x01+XorContent:表示四路输入开关量的输入状态(数据)或者六路输出开关量的输出状态(数据),在不使用它的命令格式中,它的值无意义,为通信方便,在不使用它的命令格式中,规定其值为0x00;Xor:从第一个字节开始到Xor的前一个字节(总共3个字节),做异或运算

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。