用PComm开发PC机与单片机的通信程序
后,发送中断才开始工作,并将缓冲区数据逐一发送给微机。当发送完指定长度的数据后(发送缓冲区为空),发送中断处理程序将发送中断置为禁止(关闭)状态,直到通信处理程序将其再一次开放。其流程如图2所示。
2.3通信处理程序
考虑到尽量减少通信中断程序所占用的CPU时间,通信处理程序被放在普通主循环中调用。只有在接收到上位机送来的一串数据,且接收完毕标志为“ON”时,才能真正进行处理,否则不进行处理。这样就可利用送信后等待微机回答的时间进行别的处理,从而消除了空等待时间,提高了CPU的利用率。通信处理程序可根据通信处理状态的不同来分别执行不同的路径。在进入相应路径后,首先对接收缓冲区的内容进行正确性检查,检查正确后再根据通信要求或协议规定对缓冲区的内容进行处理(包括内存的写入和读出),同时重新组织数据到发送缓冲区以向微机发送数据,最后退出通信处理程序以执行其它的程序。待接收中断程序重新接收到数据并将接收完标志置为“ON”后,可重新进入通信处理程序进行处理。
3PC机通信程序设计
在VC++6.0环境下,利用PC机串口进行通信的常用方法有两种?第一是调用WindowsAPI?Appli-cationProgramInterface?函数;第二是使用ActiveX的MSComm控件。第一种方法需声明及调用许多API函数,十分烦琐。而第二种方法是将API函数封装起来,这种方法虽较为简便,但不能满足复杂情况下的通信要求。本文将介绍另外一种用PComm处理PC机的串口通信方法。
PComm是一种用于处理多进程/多线程的串口通信软件开发工具,它提供了许多基于API函数的命令集来处理串口通信,可以在VisualC++、VisualBasic、Delphi5.0等多种开发工具下使用,且具有传输速度快、使用灵活方便等特点,能够满足复杂情况下的串口通信要求。
3.1Pcomm的主要命令码
PComm的主要命令码有以下几种:
●sioopen(port);
用于设置并打开串口,其中port的1、2、3、4分别代表COM1、COM2、COM3、COM4。当返回值为0时,表示串口已经打开,否则为串口打开出错。
●sioclose(port);
关闭串口,当返回值为0时,表示串口已经关闭,否则为串口关闭出错。
●sioioctl(port?baud?mode);
用于设置串口波特率、校验位、数据位、停止位等参数。
●siogetch();
从串口输入缓冲区读出一个字符,返回值为0表示已收到数据。
●sio-read(port?buf?len);
用于从串口输入缓冲区读出一串字符,buf代表字符串数组len代表数组长度,返回值为0表示未收到字符,大于0代表收到字符的个数。
●sio-SetReadTimeouts?port?TotalTimeouts(Inter-valTimeouts);
在设定的等待时间内连续读串口输入缓冲区,TotalTimeouts代表设定的等待时间,IntervalTimeouts代表每次读出的间隔时间。
●sio-flush 《用PComm开发PC机与单片机的通信程序(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/170024.html
2.3通信处理程序
考虑到尽量减少通信中断程序所占用的CPU时间,通信处理程序被放在普通主循环中调用。只有在接收到上位机送来的一串数据,且接收完毕标志为“ON”时,才能真正进行处理,否则不进行处理。这样就可利用送信后等待微机回答的时间进行别的处理,从而消除了空等待时间,提高了CPU的利用率。通信处理程序可根据通信处理状态的不同来分别执行不同的路径。在进入相应路径后,首先对接收缓冲区的内容进行正确性检查,检查正确后再根据通信要求或协议规定对缓冲区的内容进行处理(包括内存的写入和读出),同时重新组织数据到发送缓冲区以向微机发送数据,最后退出通信处理程序以执行其它的程序。待接收中断程序重新接收到数据并将接收完标志置为“ON”后,可重新进入通信处理程序进行处理。
3PC机通信程序设计
在VC++6.0环境下,利用PC机串口进行通信的常用方法有两种?第一是调用WindowsAPI?Appli-cationProgramInterface?函数;第二是使用ActiveX的MSComm控件。第一种方法需声明及调用许多API函数,十分烦琐。而第二种方法是将API函数封装起来,这种方法虽较为简便,但不能满足复杂情况下的通信要求。本文将介绍另外一种用PComm处理PC机的串口通信方法。
PComm是一种用于处理多进程/多线程的串口通信软件开发工具,它提供了许多基于API函数的命令集来处理串口通信,可以在VisualC++、VisualBasic、Delphi5.0等多种开发工具下使用,且具有传输速度快、使用灵活方便等特点,能够满足复杂情况下的串口通信要求。
3.1Pcomm的主要命令码
PComm的主要命令码有以下几种:
●sioopen(port);
用于设置并打开串口,其中port的1、2、3、4分别代表COM1、COM2、COM3、COM4。当返回值为0时,表示串口已经打开,否则为串口打开出错。
●sioclose(port);
关闭串口,当返回值为0时,表示串口已经关闭,否则为串口关闭出错。
●sioioctl(port?baud?mode);
用于设置串口波特率、校验位、数据位、停止位等参数。
●siogetch();
从串口输入缓冲区读出一个字符,返回值为0表示已收到数据。
●sio-read(port?buf?len);
用于从串口输入缓冲区读出一串字符,buf代表字符串数组len代表数组长度,返回值为0表示未收到字符,大于0代表收到字符的个数。
●sio-SetReadTimeouts?port?TotalTimeouts(Inter-valTimeouts);
在设定的等待时间内连续读串口输入缓冲区,TotalTimeouts代表设定的等待时间,IntervalTimeouts代表每次读出的间隔时间。
●sio-flush 《用PComm开发PC机与单片机的通信程序(第2页)》