回 帖 发 新 帖 刷新版面

主题:Qbasic下關於串口通訊的問題

原本有一個windows下的串口通訊程序可正常使用,而我在Qbasic下寫了一個卻收不全字符,也就是說收到前面的一段字符後,後面的就收不到了,其實程序還是一直在收。
Qbasic是用簡單的open com1:命令,如下:

OPEN "COM1:4800,N,8,1, CS0,DS0" FOR INPUT AS #1
OPEN outfile$ FOR OUTPUT AS #2
WHILE 1
     line$ = INPUT$(LOC(1), #1)
     IF INSTR(1, line$, "E") THEN GOTO inNCend
     PRINT #2, line$;
     line$ = ""
WEND
inNCend:
    CLOSE

用串口監看程序看:
原程序為:
0    IRP_MJ_CREATE    Serial0    SUCCESS    Options: Open     
1    IOCTL_SERIAL_SET_WAIT_MASK    Serial0    SUCCESS    Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING     
2    IOCTL_SERIAL_SET_QUEUE_SIZE    Serial0    SUCCESS    InSize: 1024 OutSize: 1024    
3    IOCTL_SERIAL_PURGE    Serial0    SUCCESS    Purge: TXABORT RXABORT TXCLEAR RXCLEAR    
4    IOCTL_SERIAL_SET_TIMEOUTS    Serial0    SUCCESS    RI:-1 RM:0 RC:0 WM:0 WC:5000    
5    IOCTL_SERIAL_GET_BAUD_RATE    Serial0    SUCCESS        
6    IOCTL_SERIAL_GET_LINE_CONTROL    Serial0    SUCCESS        
7    IOCTL_SERIAL_GET_CHARS    Serial0    SUCCESS        
8    IOCTL_SERIAL_GET_HANDFLOW    Serial0    SUCCESS        
9    IOCTL_SERIAL_GET_BAUD_RATE    Serial0    SUCCESS        
10    IOCTL_SERIAL_GET_LINE_CONTROL    Serial0    SUCCESS        
11    IOCTL_SERIAL_GET_CHARS    Serial0    SUCCESS        
12    IOCTL_SERIAL_GET_HANDFLOW    Serial0    SUCCESS        
13    IOCTL_SERIAL_SET_BAUD_RATE    Serial0    SUCCESS    Rate: 4800    
14    IOCTL_SERIAL_SET_RTS    Serial0    SUCCESS        
15    IOCTL_SERIAL_SET_DTR    Serial0    SUCCESS        
16    IOCTL_SERIAL_SET_LINE_CONTROL    Serial0    SUCCESS    StopBits: 1 Parity: NONE WordLength: 8    
17    IOCTL_SERIAL_SET_CHAR    Serial0    SUCCESS    EOF:1a ERR:0 BRK:0 EVT:0 XON:11 XOFF:13    
18    IOCTL_SERIAL_SET_HANDFLOW    Serial0    SUCCESS    Shake:1 Replace:48 XonLimit:256 XoffLimit:256
....    
0000223    vc7comm.exe    IOCTL_SERIAL_GET_COMMSTATUS    Serial0    SUCCESS
20682    IOCTL_SERIAL_SET_WAIT_MASK    Serial0    SUCCESS    Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING     
20683    IOCTL_SERIAL_WAIT_ON_MASK    Serial0    SUCCESS        
20684    IOCTL_SERIAL_SET_WAIT_MASK    Serial0    SUCCESS    Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING     
20685    IOCTL_SERIAL_WAIT_ON_MASK    Serial0    SUCCESS        
20686    IOCTL_SERIAL_GET_COMMSTATUS    Serial0    SUCCESS        
20687    IRP_MJ_READ    Serial0    SUCCESS    Length 6: 01.MIN    
20688    IOCTL_SERIAL_GET_COMMSTATUS    Serial0    SUCCESS    
....

我寫的Qbasic程序為:
3274774    IRP_MJ_CREATE    Serial0    SUCCESS    Options: Open     
1    IOCTL_SERIAL_GET_BAUD_RATE    Serial0    SUCCESS        
2    IOCTL_SERIAL_GET_LINE_CONTROL    Serial0    SUCCESS        
3    IOCTL_SERIAL_GET_CHARS    Serial0    SUCCESS        
4    IOCTL_SERIAL_GET_HANDFLOW    Serial0    SUCCESS        
5    IOCTL_SERIAL_GET_BAUD_RATE    Serial0    SUCCESS        
6    IOCTL_SERIAL_GET_LINE_CONTROL    Serial0    SUCCESS        
7    IOCTL_SERIAL_GET_CHARS    Serial0    SUCCESS        
8    IOCTL_SERIAL_GET_HANDFLOW    Serial0    SUCCESS        
9    IOCTL_SERIAL_SET_BAUD_RATE    Serial0    SUCCESS    Rate: 4800    
10    IOCTL_SERIAL_CLR_RTS    Serial0    SUCCESS        
11    IOCTL_SERIAL_CLR_DTR    Serial0    SUCCESS        
12    IOCTL_SERIAL_SET_LINE_CONTROL    Serial0    SUCCESS    StopBits: 1 Parity: NONE WordLength: 8    
13    IOCTL_SERIAL_SET_CHAR    Serial0    SUCCESS    EOF:1a ERR:0 BRK:0 EVT:0 XON:11 XOFF:13    
14    IOCTL_SERIAL_SET_HANDFLOW    Serial0    SUCCESS    Shake:0 Replace:8 XonLimit:2048 XoffLimit:512    
15    IOCTL_SERIAL_LSRMST_INSERT    Serial0    SUCCESS    Char: ffffffff
16    IOCTL_SERIAL_SET_QUEUE_SIZE    Serial0    SUCCESS    InSize: 8192 OutSize: 100    
17    IOCTL_SERIAL_GET_TIMEOUTS    Serial0    SUCCESS        
18    IOCTL_SERIAL_SET_TIMEOUTS    Serial0    SUCCESS    RI:-1 RM:0 RC:0 WM:0 WC:5000    
19    IOCTL_SERIAL_SET_DTR    Serial0    SUCCESS        
20    IOCTL_SERIAL_CLR_RTS    Serial0    SUCCESS        
21    IOCTL_SERIAL_CLR_RTS    Serial0    SUCCESS        
22    IOCTL_SERIAL_GET_LINE_CONTROL    Serial0    SUCCESS        
23    IOCTL_SERIAL_SET_LINE_CONTROL    Serial0    SUCCESS    StopBits: 1 Parity: NONE WordLength: 5    
24    IOCTL_SERIAL_GET_LINE_CONTROL    Serial0    SUCCESS        
25    IOCTL_SERIAL_SET_LINE_CONTROL    Serial0    SUCCESS    StopBits: 1 Parity: NONE WordLength: 8    
26    IOCTL_SERIAL_SET_BAUD_RATE    Serial0    SUCCESS    Rate: 4800    
27    IOCTL_SERIAL_SET_WAIT_MASK    Serial0    SUCCESS    Mask: RXCHAR CTS DSR RLSD ERR RING     
28    IOCTL_SERIAL_WAIT_ON_MASK    Serial0    SUCCESS        
29    IOCTL_SERIAL_GET_MODEMSTATUS    Serial0    SUCCESS        
30    IOCTL_SERIAL_SET_RTS    Serial0    SUCCESS        
31    IRP_MJ_READ    Serial0    SUCCESS    Length 3: FF 03 11     
32    IRP_MJ_READ    Serial0    SUCCESS    Length 0:     
33    IOCTL_SERIAL_WAIT_ON_MASK    Serial0    SUCCESS        
34    IRP_MJ_READ    Serial0    SUCCESS    Length 6: 24 42 4D 31 39 37 
35    IRP_MJ_READ    Serial0    SUCCESS    Length 0:     
36    IOCTL_SERIAL_WAIT_ON_MASK    Serial0    SUCCESS        
37    IRP_MJ_READ    Serial0    SUCCESS    Length 0:     
38    IOCTL_SERIAL_WAIT_ON_MASK    Serial0    SUCCESS        
39    IRP_MJ_READ    Serial0    SUCCESS    Length 6: 30 31 2E 4D 49 4E 
....

對照了一下,好像我監視結果的第14行(IOCTL_SERIAL_SET_HANDFLOW  Shake:0 Replace:8 XonLimit:2048 XoffLimit:512) 和原程序(Shake:1 Replace:48 XonLimit:256 XoffLimit:256)的不同, 以及第27行(IOCTL_SERIAL_SET_WAIT_MASK  Mask: RXCHAR CTS DSR RLSD ERR RING )和原程序的(Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING )不同。不知道是不是因為這裏的問題導致收不全文本。如果是,那Qbasic裏怎麼操作HANDFLOW和TXEMPTY?
還請高手賜教 !這裏先謝了!

回复列表 (共1个回复)

沙发

在Windows读写串口我以为会死机呢,
我没有实际经验,也许QB45比较清楚。

不过我倒是觉得以字母E作为结束符,会不会存在什么问题?
没有其它更有效的结束标志了吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册