importwin;importstring;//加载dll,声明函数Pcom = raw.loadDll("\Pcomm.dll");//打开串口,正确返回0;C代码int WINAPI sio_open(int port);sio_open = Pcom.api("sio_open","int(int port)");//关闭串口,正确返回0;C代码int WINAPI sio_close(int port);sio_close = Pcom.api("sio_close","int(int port)");//设置串口参数,正确返回0;C代码int WINAPI sio_ioctl(int port, int baud, int mode);sio_ioctl = Pcom.api("sio_ioctl","int(int port, int baud, int mode)");//读取缓冲区数据,返回数据长度,为0表示没有读到数据;C代码int WINAPI sio_read(int port, char *buf, int len);sio_read = Pcom.api("sio_read","int(int port, pointer buf, int len)");//写入缓冲区数据,返回数据长度;C代码int WINAPI sio_write(int port, char *buf, int len);sio_write = Pcom.api("sio_write","int(int port, pointer buf, int len)");//设置中断函数,用来在接收大量数据的时候产生中断;C代码int WINAPI sio_cnt_irq(int port,VOID (CALLBACK *func)(int port), int count);sio_cnt_irq = Pcom.api("sio_cnt_irq","int(int port, func(int port), int count)");//串口打开函数comopen =function(port,baud,parity,stopbits,wordlength){varret = 0;vari = 0;
ret = sio_open(port);//打开串口if(ret != 0){
win.msgboxTimeout("错误码:"+ret,"串口打开错误");return0;
}
ret = sio_ioctl (port, baud, parity| stopbits | wordlength );//设置串口参数:波特率、奇偶校验、停止位、数据位if(ret != 0){
win.msgboxTimeout("错误码:"+ret,"串口设置错误");return0;
}
}// 串口发送数据函数comwrite =function(port,str,buf){
str = string.replace(str,"\s","");//去除空格及换行符for(i=1;#str;2){
buf[(i+1)/2] =eval("0X"+string.slice(str,i,i+1));
}varlen = sio_write(port,buf,#str/2)returnlen;
}//串口接收数据函数comread =function(port,buf){varlen = sio_read(port,buf,#buf);varstr =""for(i=1;len;1){
str = str++" "++string.right(string.format("%02X", buf[ i ]),2);//默认转换成有符号字节,因此取最右边两位}returnstr,len;
}
io.open();varport = 1;varbaud = 0x0c;//波特率9600
/*baud = (bits/sec)
0 = 50 6 = 600 12 = 9600 18 = 460800
1 = 75 7 = 1200 13 = 19200 19 = 921600
2 = 110 8 = 1800 14 = 38400
3 = 134.5 9 = 2400 15 = 57600
4 = 150 10 = 4800 16 = 115200
5 = 300 11 = 7200 17 = 230400
*/varwordlength = 0x03;//数据位bit_8
/*bit_cnt (bit 0, 1) = 0x00 = bit_5
0x01 = bit_6
0x02 = bit_7
0x03 = bit_8
*/varparity = 0x18;//奇偶校验EVEN