C语言做串口通讯程序

根据给定文件的信息,我们可以总结出以下关于使用C语言进行串口通信的相关知识点: ### 一、串口通信概述 串行通信(Serial Communication)是一种数据传输方式,它通过单一线路来发送每一位数据,因此在长距离传输时非常有用且成本较低。串口通信在各种设备间的数据交换中广泛使用,比如计算机与PLC(可编程逻辑控制器)、传感器或其他电子设备之间的通信。 ### 二、C语言实现串口通信的关键步骤 #### 1. 选择合适的通信参数 在使用C语言实现串口通信之前,需要设置正确的通信参数,包括波特率、数据位数、停止位等。例如,在本例中,波特率为9600bps,数据位为7位,停止位为1位。 #### 2. 使用BIOS API函数 在DOS环境下,可以通过调用BIOS提供的API函数来控制串口。具体来说,使用`bioscom()`函数可以读写串口寄存器,实现对串口的配置和数据收发功能。 - `bioscom(int cmd, char byte, int port)`: 这个函数是关键函数,用于配置或查询串口状态。 - `cmd`: 指令码,不同的值代表不同的操作,如0表示初始化配置,1表示写入数据,2表示读取数据,3表示查询端口状态。 - `byte`: 数据或配置参数,根据`cmd`的不同而变化。 - `port`: 串口号,通常是0或1,分别对应COM1和COM2。 #### 3. 初始化串口 初始化串口非常重要,这一步骤决定了后续的通信是否能够正常进行。初始化通常包括设置波特率、数据位、停止位等参数。 - 代码示例:`bioscom(0, SETTINGS, PORT);` - `SETTINGS`: 包含了波特率、数据位、奇偶校验位和停止位等配置参数。例如,`(0x02|0x04|0x18|0xE0)`分别代表设置8位数据、无奇偶校验、1位停止位以及波特率为9600bps。 #### 4. 发送数据 发送数据是通过调用`sendPort(int port, char cc)`函数完成的。该函数会将指定的数据字符发送到指定的串口端口,并检查发送是否成功。 - `sendPort(int port, char cc)`: 发送一个字符到指定端口,并打印发送结果。 #### 5. 查询端口状态 为了确保通信的稳定性,还需要定期检查串口的状态。这可以通过调用`check_status(int port)`函数来实现,该函数返回端口当前的状态。 - `check_status(int port)`: 返回端口的状态信息,如果返回0,则表示串口处于错误状态;返回1,则表示一切正常。 #### 6. 接收数据 接收数据一般通过循环读取串口缓冲区的方式完成。在本示例中并未详细展示这一部分的功能。 ### 三、实际应用案例分析 #### 1. 发送命令 在示例代码中,定义了几个命令字符串,每个字符串代表一种特定的操作命令,例如: - `char a[20]="@00WR0000000144*";`: 表示执行某种特定操作的命令。 - `char b[20]="@00WR0000000441*";`: 另一个不同操作的命令。 #### 2. 主循环 主函数`main()`中包含了一个无限循环,用于不断监听键盘输入,并根据输入的不同按键执行相应的命令。 - 当按下`F1`键时,发送命令`a[]`。 - 当按下`F4`键时,发送命令`d[]`。 - 当按下`F2`键时,发送命令`b[]`。 - 当按下`F3`键时,发送命令`c[]`。 ### 四、注意事项 1. **环境限制**:这段代码是在DOS环境下编写的,因此可能不适用于现代操作系统。 2. **兼容性问题**:由于依赖于特定的BIOS API函数,这段代码可能无法在所有系统上运行。 3. **安全性考虑**:在编写串口通信程序时,需要考虑到数据的安全性和完整性。 以上就是从给定文件中提取的主要知识点,这些内容为我们了解如何使用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 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;
剩余5页未读,继续阅读

- 粉丝: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 疫情背景下初中班主任如何通过远程网络技术进行工作探究.docx
- 5G融媒体时代下的网络与新媒体专业人才培养探究.docx
- PPT摸板互联网信息技术区块链科技.pptx
- solon-Java资源
- 泵与泵站课程设计包括CAD图纸及表格数据.doc
- 【人工智能大会】2025WAIC算力核芯成果:全球治理、技术突破与中国方案推动产业变革
- AUTOCAD工程绘图期末考试试卷级答案2010.doc
- 嵌入式系统课程研究设计题目与要求.doc
- MPS系统机械手站单元的设计与PLC控制.doc
- 室内设计工程有限公司网站-网站策划书.doc
- 基于MATLAB的频率分析课程设计.doc
- tinyflow-Python资源
- 计算机辅助语言学习理论及学习环境研究.docx
- 软件开发项目管理.docx
- 汽车网站策划方案书.doc
- 专利数据库检索案例及分析.ppt



- 1
- 2
前往页