|
发表于 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 为中断允许寄存器,可读写 |
|