C语言 做串口通讯程序

C语言 做串口通讯程序

ID:39347005

大小:23.00 KB

页数:4页

时间:2019-07-01

C语言    做串口通讯程序_第1页
C语言    做串口通讯程序_第2页
C语言    做串口通讯程序_第3页
C语言    做串口通讯程序_第4页
资源描述:

《C语言 做串口通讯程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、一、引言:现在在工业现场很少有人再用C语言做串口通讯程序了,但是基于DOS环境的程序还是有它的优势的。DOS系统的单任务环境是系统运行更加稳定、可靠;在一些追求很高的可靠性的系统中还是有一定的价值的。本文通过C语言控制PLC实现简单的物料传送为例子。二、硬件介绍:1、CPM1A采用RS232串口通讯与上位机连接,在PLC的DM区中可以设定串口参数,本文采用默认值:串口通信格式:1位---起始位、9600---波特率、7位---数据位、2位---停止位、偶校验2、C语言中用于串口读写的函数:bioscom,在bios.h头文件中。Bioscom用法:bios

2、com(intcmd,charbyte,intport)Cmd的值:0设置通信参数为btye值1发送一个字符到串口2从串口接收一个字符3返回串口端口的状态byte的值:0x027数据位0x038位数据位0x001个停止位0x042个停止位0x00无奇偶校验0x08奇校验0x18偶校验0x801200波特率0xA02400波特率0xC04800波特率0xE09600波特率注意:在对串口初始化时,上述参数值相或附给byte。Port的值:0端口11端口2三、完整源代码:#include/*此头函数请不要删除*/#include#include#defineF1

3、0x3B/*启动*/#defineF20x3C/*停止*/#defineF30x3D/*混料*/#defineF40x3E/*出料*/#defineF50x3F/*退出*/#definePORT0/*定义端口号*/#defineSETTINGS(0x02

4、0x04

5、0x18

6、0xE0)/*设定参数*//*定义发送字符函数send*/voidsendPort(intport,charcc){union{charch[2];intstatus;}port_status;/*发送一个字符*/port_status.status=bioscom(1,cc,port

7、);printf("%c",cc);/*判断发送是否正确*/if(port_status.ch[1]&128){printf("Senddataerrordetectedinserialport");printf("r");}}/*Check-Status检查端口*/intcheck_status(intport){intstatus;status=bioscom(3,0,port);if(status&0x100)return0;elsereturn1;}/*发送命令函数*/voidSendOder(charod[]){inti=0;for(i=0;i

8、<=16;i++)sendPort(PORT,od[i]);}/*应用程序主体*/main(){intkey=1,i,m=1;intcheck=1;chara[20]="@00WR0000000144*";/*启动00*/charb[20]="@00WR0000000441*";/*混料02*/charc[20]="@00WR000000084D*";/*出料03*/chard[20]="@00WR0000000247*";/*停止01*/a[16]='r';b[16]='r';c[16]='r';d[16]='r';printf("启动:F1t

9、混料:F2t出料:F3");printf("t停止:F4t退出:F5");bioscom(0,SETTINGS,PORT);/*初始化串口*/while(check!=0)/*检查端口状态*/{m+=1;check=check_status(PORT);if(m>=1000)break;}while(1){while(bioskey(1)==0);key=bioskey(0);key=key&0xFF?0:key>>8;if(key==F1)/*启动命令*/{for(i=0;i<=16;i++){sendPort(PORT,a[i]);m=1;w

10、hile(check!=0){m+=1;check=check_status(PORT);/*检查端口状态*/if(m>=3000)break;}}}elseif(key==F4)/*停止命令*/{for(i=0;i<=16;i++){sendPort(PORT,d[i]);m=1;while(check!=0){m+=1;check=check_status(PORT);if(m>=3000)break;}}}elseif(key==F2)/*混料命令*/{for(i=0;i<=16;i++){sendPort(PORT,b[i]);m=1;while(

11、check!=0){m+=1;check=check_status

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

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

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