高分求援!!! (200分)

  • 主题发起人 主题发起人 pipi158
  • 开始时间 开始时间
P

pipi158

Unregistered / Unconfirmed
GUEST, unregistred user!
由于工作关系,本人有如下开发任务,望在多串口编程以及多线程编程方面有经验者指导,
如有例程更好,先谢了:
一块16C544系列的卡,有8个com口(coma到comh),I/O地址(300H-33FH),要求每个口的
波特率为9600,程序每隔1ms从接收数据标志端口302H(COMA),30AH(COMB),312H(COMC),
31AH(COMD),322H(COME),32AH(COMF),332H(COMG),33AH(COMH)中取得是否有数据到来标志,
如果有数据且为0X6,有数据到来,可以连续读数据8次,每次1个字节,每个端口每次共8个字节。
有如下疑问:
1、“程序每隔1ms读取”如何实现,如果用多个线程,系统每次分给每个线程的时间片大约
为20ms,会不会出现丢数据现象?
2、能否用spcomm来实现?如有现成的例子最好,呵呵
3、如果以上方法不行,用汇编解决的时候需要注意什么问题?
问题较多,大家不要嫌麻烦,先谢各位了,呵呵~~~~~~~
 
1: 不用考虑每隔一毫秒的问题,串口通讯有硬件完成缓冲,使用很多空间均可完成你的功能。
2: Spcomm可以
3: 不需要使用汇编
 
1、应该不会出现数据丢失的现象
2、Spcomm可以实现
 
to 1lfirft:
to robertcool:
多谢二位热心,我还有一个疑问:spcomm调用的是delphi中的createfile等来控制com口,
而我要处理的coma-comh可以等同于标准的com口吗?比如COMA设为9600bps,
高位寄存器地址是301H,低位寄存器地址是300H即向301H写入0,向300H写入104(或68H),
标准的com口如com1也是如此设置波特率吗?谢谢
 
另外,com1口的线路控制寄存器地址为3FB,即COM1的口地址3F8+2=3FB,而在这里COMA的
线路寄存器地址为COMA的口地址300,如果我用SPCOMM,在设置线路控制寄存器的时候
对于COM1口,它会产生如下指令:
MOV DX,0X3FB
MOV AL,0X80
OUT DX,AL
而对于COMA它是否也会产生如下错误指令:
MOV DX,0X302
MOV AL,0X80
OUT DX,AL
正确设置COMA的线路寄存器的指令应该是:
MOV DX,0X300
MOV AL,0X80
OUT DX,AL
请问如何解决呢?
各位富翁,多多发言
谢谢,呵呵
 
怎么没有人来呢?请大家关注
 
第一,这种多功能串口卡应该有自己的驱动程序,一般不需要直接对端口编程。
第二,如果需要端口编程,情参考《delphi5通讯编程》一书
 
to 1lfirst:
您好!谢谢继续关注这里
1、这种卡是经过重新编程的,驱动估计不能用了
2、,<<delphi5通讯编程>>哪里出版的?有电子版吗?
感谢您的关注,送上50大洋,呵呵,别嫌少呀
 
大家都来发言呀
 
1、这种卡是经过重新编程的,驱动估计不能用了
------------
?不是很明白
2、,<<delphi5通讯编程>>哪里出版的?有电子版吗?
卧到书店去看看再告诉你,估计没有电子版
感谢您的关注,送上50大洋,呵呵,别嫌少呀
谢谢!^_^不过人不是总为钱活着。
 
我给你推荐一本书“delphi5串口通讯编程”(也好像是通信)华储书店有买www.huachu.com.cn
上几位说的<<delphi5通讯编程>>可能就是这本书,不贵
 
to yangxianjun:
你好,我去看看,谢谢
 
delphi5串口通讯编程,人民邮电出版
 
to 1lfirst:
我说的“重新编程”的意思:本卡为自行设计,用了两块16c550和一块16c554
 
接受答案了
 
接受答案了.
 
后退
顶部