|  | 
 
 发表于 2004-6-26 16:15:05
|
显示全部楼层 
| [quote:b53ca732e6="llc"][quote:b53ca732e6="ddv"]在DOS中,我可以这种方式直接实现用串口发送任一字符串,在linux中该怎样做? 
 P1 = &H2F8: P2 = &H2F9: P3 = &H2FB: P4 = &H2FD
 OUT P3, 128: OUT P1, 96: OUT P2, 0: OUT P3, 27
 
 N$=“1234567989”
 T = 0
 FOR I = 1 TO LEN(N$)
 F1:
 IF (INP(P4) AND 32) = 0 OR (INP(P4) AND 64) = 0 THEN GOTO F2
 T = 0
 OUT P1, ASC(MID$(N$, I, 1))
 FOR J = 0 TO 10000: NEXT J
 GOTO F3
 F2:
 T = T + 1: IF T > 1000 THEN I = 100 ELSE GOTO F1
 F3:
 NEXT I[/quote]
 
 linux下打开端口并初始化成raw后,可以用read(write)来逐个读取(写)字节
 请问你上面:
 P2 = &H2F9: P3 = &H2FB这两个端口是设置串口参数的吧?
 OUT P3, 128: OUT P1, 96: OUT P2, 0: OUT P3, 27这三行是设置成什么样的参数?
 P4端口是串口状态,那(INP(P4) AND 32) = 0和(INP(P4) AND 64) = 0 代表什么状态?缓冲已满?[/quote]
 不好意思,我那个是以前用MS-BASIC编的。
 
 P2 = &H2F9    波特率寄存器高位
 P3 = &H2FB   线路控制寄存器
 
 OUT P3, 128   置P3最高位为1,以便能访问其他寄存器
 OUT P1, 96     置波特率低位寄存器值
 OUT P2, 0       置波特率高位寄存器值
 以上两行决定了波特率为1200
 OUT P3, 27     置控制寄存器值,字符长度8位,1个停止位,无奇偶校验
 
 P4 是线路状态寄存器
 (INP(P4) AND 32) = 0    传送保持寄存器不空
 (INP(P4) AND 64) = 0    传送转移寄存器不空
 以上两个判断可确定字符是否已成功发送,两者均为1才能确定字符已成功发送。
 
 
 当线路控制寄存器最高位为1或0时,其他寄存器有不同的定义,
 
 当为1时:
 2F8 为波特率寄存器低位,只写
 2F9 为波特率寄存器高位,只写
 
 当为0时:
 2F8 为发送保持寄存器/数据接收寄存器,可读写
 2F9 为中断允许寄存器,可读写
 | 
 |