C语言做串口通讯程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言做串口通讯程序

一、 引言: 现在在工业现场很少有人再用C语言做串口通讯程序了,但是基于DOS环境的程序还是有它的优势的。DOS系统的单任务环境是系统运行更加稳定、可靠;在一些追求很高的可靠性的系统中还是有一定的价值的。本文通过C语言控制PLC实现简单的物料传送为例子。 二、 硬件介绍: 1、CPM1A采用RS232串口通讯与上位机连接,在PLC的DM区中可以设定串口参数,本文采用默认值: 串口通信格式: 1位---起始位、9600---波特率、7位---数据位、2位---停止位、偶校验 2、C语言中用于串口读写的函数:bioscom,在bios.h头文件中。 Bioscom用法:bioscom(int cmd,char byte,int port) Cmd的值:0 设置通信参数为btye值 1 发送一个字符到串口 2 从串口接收一个字符 3 返回串口端口的状态 byte的值: 0x02 7数据位 0x03 8位数据位 0x00 1个停止位 0x04 2个停止位 0x00 无奇偶校验 0x08奇校验 0x18偶校验 0x80 1200波特率 0xA0 2400波特率 0xC0 4800波特率 0xE0 9600波特率 注意:在对串口初始化时,上述参数值相或附给byte。 Port的值: 0 端口1 1 端口2 三、 完整源代码: #include /* 此头函数请不要删除 */ #include #include #define F1 0x3B /*启动*/ #define F2 0x3C /*停止*/ #define F3 0x3D /*混料*/ #define F4 0x3E /*出料*/ #define F5 0x3F /*退出*/ #define PORT 0 /*定义端口号*/ #define SETTINGS (0x02|0x04|0x18|0xE0) /*设定参数*/ /* 定义发送字符函数send */ void sendPort(int port,char cc) { union{ char ch[2]; int status; }port_status; /*发送一个字符*/ port_status.status=bioscom(1,cc,port); printf(%c,cc); /*判断发送是否正确*/ if(port_status.ch[1]128) {printf(Send data error detected in serial port); printf(\r); } } /* Check-Status 检查端口*/ int check_status(int port) { int status; status=bioscom(3,0,port); if(status 0x100)return 0; else return 1; } /*发送命令函数*/ void SendOder(char od[]) { int i=0; for(i=0;i=16;i++) sendPort(PORT,od[i]); } /*应用程序主体*/ main() { int key=1,i,m=1; int check=1; char a[20]=@00WR0000000144*; /*启动00*/ char b[20]=@00WR0000000441*; /*混料02*/ char c[20]=@00WR000000084D*; /*出料03*/ char d[20]=@00WR0000000247*; /*停止01*/ a[16]=\r; b[16]=\r; c[16]=\r; d[16]=\r; printf(启动:F1 \t混料:F2 \t出料:F3); printf( \t停止:F4 \t退出:F5\n); 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=key0xFF?0:key8; if(key==F1) /*启动命令*/ { for(i=0;i=16;i++) { sendPort(PORT,a[i]); m=1; while(check!=0) { m+=1; check=check_status(PORT); /*检查端口状态*/ if(m=3000)break; } } } else if(key==F4) /*停止命令*/ { for(i=0;i=16;i++) { sendPort(PORT,d[i]

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档