使用pcomm库sio_cnt_irq(port,CntIrq,1)的函数相关疑问

 sio_cnt_irq(ComPort,CntIrq,1);不是每接收一个字节函数会触发一次回调函数, 而是说只要串口收到大于等于一个字节数的数据就会触发,但可以用这个函数sio_read的返回值判断是否已经收完本帧数据, 注意,数据帧的长度必须在协议里规定好,或者包含在数据帧中一起发到PC, 以供程序判断是否读完一帧数据, 然后继续接收下一帧数据, 这样,至于需要触发多少次中断回调函数都无关紧要了。

modbus子站程序中用到中断方式处理。查询资料才知道,要modus子程序的留言。
 

sio_read 

Note:

If the length of data in the driver's input buffer is less than the buffer defined for sioread(), all data in the driver's input buffer will be transferred to that of sio_read(). Otherwise, sio_read() reads specified length bytes from the driver's input buffer.

  

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
int WINAPI sio_ioctl(int port, int baud, int mode); int WINAPI sio_getch(int port); int WINAPI sio_read(int port, char *buf, int len); int WINAPI sio_putch(int port, int term); int WINAPI sio_write(int port, char *buf, int len); int WINAPI sio_flush(int port, int func); long WINAPI sio_iqueue(int port); long WINAPI sio_oqueue(int port); int WINAPI sio_lstatus(int port); int WINAPI sio_lctrl(int port, int mode); int WINAPI sio_cnt_irq(int port, VOID (CALLBACK *func)(int port), int count); int WINAPI sio_modem_irq(int port, VOID (CALLBACK *func)(int port)); int WINAPI sio_break_irq(int port, VOID (CALLBACK *func)(int port)); int WINAPI sio_Tx_empty_irq(int port, VOID (CALLBACK *func)(int port)); int WINAPI sio_break(int port, int time); int WINAPI sio_flowctrl(int port, int mode); int WINAPI sio_Tx_hold(int port); int WINAPI sio_close(int port); int WINAPI sio_open(int port); long WINAPI sio_getbaud(int port); int WINAPI sio_getmode(int port); int WINAPI sio_getflow(int port); int WINAPI sio_DTR(int port, int mode); int WINAPI sio_RTS(int port, int mode); int WINAPI sio_baud(int port, long speed); int WINAPI sio_data_status(int port); int WINAPI sio_term_irq(int port, VOID (CALLBACK *func)(int port), char code); int WINAPI sio_linput(int port, char *buf, int lne, int term); int WINAPI sio_putb_x(int port, char *buf, int len, int tick); int WINAPI sio_putb_x_ex(int port, char *buf, int len, int tms); int WINAPI sio_view(int port, char *buf, int len); int WINAPI sio_TxLowWater(int port, int size); int WINAPI sio_AbortWrite(int port); int WINAPI sio_SetWriteTimeouts(int port, DWORD TotalTimeouts); int WINAPI sio_GetWriteTimeouts(int port, DWORD *TotalTimeouts); int WINAPI sio_SetReadTimeouts(int port, DWORD TotalTimeouts, DWORD IntervalTimeouts);Pcomm串口动态链接
PComm 函数 PComm 函数是台湾MOXA公司提供的,他为用户提供了基于win32 api的开发接口。 PComm函数分为7大类 控制函数、数据输入函数、数据输出函数、状态函数、事件驱动函数、传输文件函数、特殊设定函数 上述函数均返回int型数据,若函数调用成功则返回0,否则返回一个负整数。 控制函数主要包括 sio_open(PortNum) 打开串口 sio_close(PortNum) 关闭串口 sio_ioctl(PortNum, baud, mode)设置串口的工作模式,包括 波特率,数据位元,停止位,效验等 sio_flush(portNum,func)清除发送、接收缓冲区 其中func 为0清空输入 ,为1清空输出,为2清空输入输出 sio_SetWriteTimeouts(int port,DWORD TotalTimeouts):设置串口写操作的超时。 sio_lctrl(Portnum,mode) 设置串口RTS/DTS。 待定 数据输入函数主要包括 sio_getch(PortNum) 从输入缓冲区读一个字符 sio_read(PortNum,buf,len) 从输入缓冲区读指定个数的字符 sio_iqueue(Portnum)读取输入缓冲区中的字符长度 数据输出函数主要包括 sio_putch(PortNum) 写一个字符到输出缓冲区 sio_write(PortNum,buf,len)写指定个数的字符到输出缓冲区 状态函数主要包括 sio_lstatus(portNum)获取串口的CTS,DSR,DCD,RI线的状态 sio_getbaud(portNum)获取串口的波特率 sio_getmode(portNum)获取串口的工作模式。对应sio_ioct函数 事件函数主要包括 sio_term_irq(portNum,func,code) 当接收到指定字符时响应事件,func为回调函数名,code为指定的字符 sio_cnt_irq(PortNum,func,count) 当接收到指定个数字元时响应事件,func为回调函数名,count接收的个数 传输文件函数主要包括 sio_FtASCIITx(portNum,fname,func,key)发送一个文本文件 sio_FtASCIIRx(portNum,fname,func,Key,sec)接收一个文本文件 int i,Ret,DataLen; FILE *fp1; uchar RetDataC[30],WriteData[24],PSC[5]; Ret = sio_open(port); if (Ret != SIO_OK ) return(-1);//打开串口错误 Ret = sio_ioctl (port, B9600, P_NONE | BIT_8 | STOP_1 ); if (Ret != SIO_OK) { sio_close(port); return(-2);//设置串口参数失败 } /*Ret = sio_lctrl (port, C_DTR | C_RTS ); if (Ret != SIO_OK) { sio_close(port); return(-2);//设置串口参数失败 }*/ /*Ret = sio_flush(port,2); if (Ret != SIO_OK){ sio_close(port); return(-3);//清空 输入和输出缓冲区的数据 }*/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值