4.2 使用Dynamic C实现串口数据的传输
Dynamic C提供了一些与计算机串行口进行通信的函数可供用户程序调用,下面简要介绍其中的一部分。
4.2.1 打开串行接口
int serXopen( bard )
bard : 长整型,每秒钟传送的比特数。
该函数用于打开RCM2200的串行接口,由于RCM2200核心模块拥有四个串行口,故X可根据需要取为A\B\C\D其中一个。在调用该函数之前,还必须先定义串行口的输入输出缓冲区大小,通常情况下设定为2n-1,否则就采用默认值31,但在编译时会给出警告。该函数的返回值:成功则为1,否则为0。
4.2.2 读取PC机串行口数据
int serXgetc() /* X = A|B|C|D */
程序可以调用该函数查询串行口是否有字符来到,如果有,返回该字符值;否则,返回值-1。
4.2.3 发送数据到PC机串行口
int serXputs( *s )
int serXwrite( s, length ) /* X = A|B|C|D */
这两个函数均可用于发送字符串给计算机的串行口,返回成功发送的字符数。
s : 待发送字符串的首地址;
length : 待发送字符串的长度。
4.2.4 关闭串行口
void serXclose() /* X = A|B|C|D */
该函数用于关闭已经打开的串行口。
5 实现以太网与串口之间的通信
5.1 定义网络以及串口初始化数据
在程序的开头,必须使用#define定义一些初
始化数据,比如:RCM2200所使用的本地IP地址以及端口,与之通信的远地IP地址以及端口以及串口输入输出缓冲区的大小等等。
5.2 主程序
在主程序中调用PC机串口发送字符串给RCM2200经过处理后再由RCM2200发送UDP报文给以太网以及RCM2200接收以太网发送来的UDP报文后再送给计算机的串行口两个子程序。
main()
{
sock_init(); //初始化网络库函数
: //打开串行口及网络套接字
for(;;;)
{
tcp_tick(NULL);//察看套接字状态
init_comm();//网络发报文串口接收
comm_init();//串口发数据网络接收
}
}
5.3网络发报文串口接收
子程序init_comm() 使用库函数udp_recv查询RCM2200以太网接口是否有UDP报文来到,如果没有则返回主程序,否则将UDP报文存放到buf_init数组中,然后调用serCputs(buf_init)通过RCM2200的串行口C发送到计算机的串行口。值得一提的是,当RCM2200接收到了一次报文之后,它将自动关闭接收报文的套接字,因此,如果还想接受下一次发送的报文,必须再次调用函数udp_open打开该套接字。
5.4串口发字符串网络接收
子程序 comm_init()调用函数serCgetc()用于查询计算机的串行口是否有数据到来,如果没有则返回主程序,否则将接收到的字符存储到buf_comm数组中,直到检测到结束符到来,将字符串以UDP报文的形式通过函数udp_send发送给以太网。如果发送成功,则返回主程序等待下一次数据的到来,否则关闭该套接字后重新打开再返回主程序等待。
注册
个人空间
