51串口通信协议(新型篇).doc_第1页
51串口通信协议(新型篇).doc_第2页
51串口通信协议(新型篇).doc_第3页
51串口通信协议(新型篇).doc_第4页
51串口通信协议(新型篇).doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

51串口通信协议(新型篇)C51编程:这是网友牛毅编的一个C51串口通讯程序! /PC读MCU指令结构:(中断方式,ASCII码表示)/帧: 帧头标志|帧类型|器件地址|启始地址|长度n|效验和|帧尾标志/值:n y| r | 0x01 | x | x | x |0x13 0x10/字节数: 2 | 1 | 1 | 1 | 1 | 1 | 2/求和:/公司名称:*/模 块 名:protocol.c/创 建 者:牛毅/修 改 者:/功能描述:中断方式:本程序为mcu的串口通讯提供(贞结构)函数接口,包括具体协议部分/其他说明:只提供对AT89c51具体硬件的可靠访问接口/版 本:1.0/信 息:QQ 75011221 /#include #include /预定义/帧#define F_ST1 0x6e /帧头标志 n#define F_ST2 0x79 /帧头标志 y#define F_R 0x72 /帧类型 读 r#define F_W 0x77 /帧类型 写 w#define F_D 0x64 /帧类型 数据帧 d#define F_B 0x62 /帧类型 写回应帧 b#define F_C 0x63 /帧类型 重发命令帧 c#define F_Q 0x71 /帧类型 放弃帧 q#define F_ADDR0x31 /器件地址 0-9#define F_END 0x7a /帧尾标志 z#define F_SPACE 0x30 /空标志 0#define F_ERR10x31 /错误标志1,flagerr 1#define F_ERR20x32 /错误标志2 2/常数#define S_MAXBUF 16 /接收/发送数据的最大缓存量#define FIELD_MAXBUF 48 /最小场缓存,可以大于48字节,因为协议是以20字节为单位传输的#define communicationing P1_7 /正在通讯(1)标志#define ERRFRAME_MAX 5 /连续NOFRAME_CNT次帧不正确 #define ERR_NOCNTMAX_RESEND if(+errframe_cnt=0x30)&(bChar=0x41)&(bChar=0x61)&(bChar=0)&(bHex=10)&(bHex=15)/大写字母bHex += 0x37;else bHex = 0xff;return bHex;/函 数 名:com_int()/功能描述:初始化串口/函数说明:默认其他参数为baud_rate,n,8,1/调用函数:/全局变量:/输 入:baud_rate 波特率/返 回:无/设 计 者:牛毅/修 改 者:/版 本:/void com_init(unsigned int baud_rate)EA=1;ES=1;/ET1=1; SCON = 0x50; /* 0x52;/SCON */TMOD = 0x20; /*0x20;/ TMOD */TCON = 0x60; /*0x60;/ TCON */PCON=PCON&0x7f;switch(baud_rate) /波特率设置case 1200:TL1=0xe8;TH1=0Xe8;break; /1200case 2400:TL1=0xf4;TH1=0Xf4;break; /2400case 4800:TL1=0xfa;TH1=0Xfa;break; /4800case 9600:TL1=0xfd;TH1=0Xfd;break; /9600case 19200:PCON=PCON|0x80;TL1=0xfd;TH1=0Xfd;break; /19200case 38400:PCON=PCON|0x80;TL1=0xfe;TH1=0Xfe;break; /38400default:TL1=0xfd;TH1=0Xfd;break;/9600/函 数 名:resend_frame()/功能描述:发送重发帧/函数说明:通知PC重发/调用函数:/全局变量:/输 入:无/返 回:无/设 计 者:牛毅/修 改 者:/版 本:/void resend_frame(void)send(F_ST1);send(F_ST2);send(F_C);send(F_SPACE);send(F_SPACE);/发送效验和send(F_END);/函 数 名:quit_frame()/功能描述:发送放弃帧/函数说明:通知PC放弃通讯/调用函数:/全局变量:/输 入:无/返 回:无/设 计 者:牛毅/修 改 者:/版 本:/void quit_frame(void)send(F_ST1);send(F_ST2);send(F_Q);send(F_ERR1);send(F_ERR1);/发送效验和send(F_END);/函 数 名:com_int()/功能描述:串口中断/函数说明:/调用函数:/全局变量:/输 入:无/返 回:无/设 计 者:牛毅/修 改 者:/版 本:/void com_int()interrupt 4unsigned char i,csaddr,clen,csum,tempbufS_MAXBUF;csum=0;if(receive()=F_ST1)/是侦if(receive()=F_ST2)/头判断完communicationing=1;/设置通讯状态为正常 即启动通讯switch(receive()case F_R:/是读指令帧rif(receive()=F_ADDR)P1_2=!P1_2;/地址正确 csaddr=CharToHex(receive()4;csaddr+=CharToHex(receive();clen=CharToHex(receive()4;clen+=CharToHex(receive();csum=csaddr+clen;i=CharToHex(receive()4);send(HexToChar(clen&0x0f);csum+=clen;for(i=0;i4);send(HexToChar(databufi+csaddr&0x0f); csum+=databufi+csaddr;/if(csum127)csum-=128;send(HexToChar(csum&0xf0)4);send(HexToChar(csum&0x0f);send(F_END); /发送数据帧完毕P1_0=!P1_0;else ERR_NOCNTMAX_RESEND break;/结束标志错误else ERR_NOCNTMAX_RESEND break;/效验和错误/地址不正确break;case F_W:/是PC写指令帧wif(receive()=F_ADDR)/地址正确csaddr=CharToHex(receive()4; csaddr+=CharToHex(receive();clen=CharToHex(receive()4;clen+=CharToHex(receive();csum=csaddr+clen;for(i=0;iclen;i+)tempbufi+csaddr=CharToHex(receive()4;tempbufi+csaddr+=CharToHex(receive();csum+=tempbufi+csaddr;i=CharToHex(receive()4;i+=CharToHex(receive();if(csum!=i)ERR_NOCNTMAX_RESEND break;/效验和错误if(F_END!=receive()ERR_NOCNTMAX_RESEND break;/结束标志错误for(i=csaddr;iclen+csaddr;i+)databufi-csaddr=tempbufi-csaddr;/正确则保存数据/从PC获得数据写完毕/开始发送写回应帧send(F_ST1);send(F_ST2);send(F_B);send(F_SPACE);send(F_SPACE);/发送效验和send(F_END);/写回应帧发送完毕P1_1=!P1_1;break;case F_Q:/检测接收放弃帧csaddr=receive();csum+=csaddr;/csaddr兼做放弃帧码标志if(csaddr!=F_ERR1 & csaddr!=F_ERR2)ERR_NOCNTMAX_RESEND break;if(csum!=receive()ERR_NOCNTMAX_RESEND break;if(F_END!=receive()ERR_NOCNTMAX_RESEND break;communicationing=0;/出错退出通讯break;default:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论