基于C语言的RS232串行接口通信设计与实现
ComPortAddr+4,0xob);
/*set input data ready interrupt mode设置输入数据中断模式*/
outportb(ComPortAddr+1,Ox01);
/*set OC interrupt vector设置中断源*/
disable ();
OldAsyncInt=getvect(IntVectNum);
setvect(ImVectNum,AsyncInt);
enable ();
/*open interrupt打开中断*/
maskb=inp(Port8259+1);
if(IntVectNum一0x0c)outport(Port8259+1,maskbOxef);/*INT4*/
else outport(Port8259+1,maskb0xf7);/*INT3*/
}
2)握手信号控制。
该函数引入递归调用的方式,很好的解决了以往串口通信过程中,在握手信号方面选择发送指定特定字符(例如“样”)所带来的误传送问题,大大提高了串口通信的成功率。
void wait(char ch)
{
if(ReceiveChar(COM232)==ch)return;//确定对方已经成功接受或者发送,就返回空
else
{
SendChar(ch);//把接受或者发送出去的字符重新发送;
wait(ch); //递归调用,直到对方确定接受或者发送成功为止;
)
)
3)向串行口发送一个字符
该函数的思想是先申请占有中断,后进行发送数据通信;
int SendChar(unsigned char Char)
{
do
{
printf(“send waiting>>>>>>>>>\n”):
//在屏幕上提示用户正在等待中断进行。
}while((inportb(comportaddr+5)0x20)==O);//检查发送端数据线是否准备好
outportb(comportaddr,Char://发送数据到缓冲区
return(Char);//返回发送完成的字符
}
4)从串行口接受一个字符
该函数的思想是先取得中断控制,后面进行接收数据通信;
int ReceiveChar(int port)
{
do{
printf(“receive waiting>>>>>>>>\n”);
∥在屏幕上提示用户正在等待中断进行。
}
while((inportb(eomportaddr+5)0x01)==0);//检查接收端数据线是否准备好
return(inportb(pONt);//从接收数据缓冲区取数据
}
3 实例
在企业产品测试平台和嵌入式控制系统之间,约定通信双方的协议相同,首先嵌入式EMB主控机通过串El把控制消息发送给产品测试平台,让产品测试平台根据发送来的指令进行相关操作:同时在产品测试平台上的测试结果信息,测试每个单项目的相关信息也通过串口传输数据到嵌入式EMB主控机;嵌入式EMB主控机把测试相关的有效信息进行整理后,通过网络上传到Server,Server把企业所有 生产线的嵌入式EMB主控机发送来的信息进行整理和分析,在企业资源管理系统ERP上共享,让企业的高级管理人员实时监视企业生产的进行情况,大大提高企业的办公效率,其整体工作原理图如图3所示。
图3企业生产整体工作原理图
4结论
本文所阐述的RS232串口通信软件,在具体实践中结合功能需要,综合考虑复杂程度、灵活性等因素,选择了合适的方法,实现了串口通信过程,同时在产品测试平台和嵌入式控制系统之间,该软件得到了充分的应用,有效地提升了企业的生产工作效率。
- 基于USB/RS232的无线通讯终端系统应用设计(12-08)
- 基于Virtex-6 FPGA的三种串行通信协议测试及对比 (二)(12-06)
- 基于VK3366 的DSP 异步串行通信的设计(02-16)
- 充分利用串行口数据传输优势实现单片机通信设计(01-16)
- 基于DSP串行通信在变频调速系统中的应用(12-13)
- 远程电源管理系统设计(04-24)