![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-14 23:49 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 如何在TC++3.0中对IO端口进行一次16位读写操作 |
| 可打印版本 2,304 / 4 |
| 第1楼 ymzheng | 发表于 2010-02-08 23:33 |
| 新手上路 发帖 1 积分 4 | |
|
如何在TC++3.0中对IO端口进行一次16位读写操作 各位好。
最近设计了一个基于ISA总线的板卡。在DOS7.1下用TC++3.0作为开发工具,编写了一段程序,对板卡上的端口地址进行读写操作。基地址为0x280,各个寄存器的地址都是偶数。但对端口进行读写时须一次读写16位数据,现在读正常,但写不正常,不能将16位数据写入板卡上的寄存器中。我用的是TC++3.0中的inpw和outpw这两个函数来对板卡上的寄存器进行读写。但我看了TC++3.0关于这两个函数的解释,说,这两个函数都是分两次将16位数据写入和读出,第一次是对给定地址的端口进行8位读写(作为低8位),第二次是对给定地址+1的端口进行读写(作为高8位)。 请教各位,在DOS下,用TC++3.0,怎样才能做到一次读写16位数据? [ Last edited by ymzheng on 2010-2-8 at 23:37 ] |
|
| 第2楼 firstsail | 发表于 2010-02-09 09:15 |
| 高级用户 发帖 295 积分 668 来自 广东深圳 | |
Originally posted by ymzheng at 2010-2-8 23:33: 可能是硬件问题。 1:由于现在计算机的速度比较快,许许多多个人开发的ISA卡往往不能正常工作,主要是由于时序不对。很多硬件工程师认为“ISA写端口”与“ISA读端口”的时序是相同的,又恰恰好IBM只公布了“ISA读端口”时序,而“ISA读端口”是在“IOR低电平”时读入,所以工程师们想当然认为“ISA写端口”是在“IOW低电平时”写入。这种错误在速度比较低的386/486计算机可以正常工作,计算机速度快了就不行了。正确的“IOW”是在“IOW上升沿”时写入才对。 2:“16位ISA端口读写”与“8位ISA端口读写”是不同的,主要是IOCS16线的应用。 |
|
| 第3楼 Johnham | 发表于 2010-03-27 18:42 |
| 初级用户 发帖 11 积分 24 | |
Originally posted by ymzheng at 2010-2-8 11:33 PM: 要证实这点,示波器或逻辑分析仪测量此板卡,重点就是楼上所指信号,证实了后,与板卡设计者讨论解决问题的方法,应不难了。 |
|
| 第4楼 cir2633 | 发表于 2010-04-02 10:57 |
| 初级用户 发帖 23 积分 52 | |
|
google一下inp(),outp()函数,这两个是一次写8bit的
|
|
| 第5楼 cir2633 | 发表于 2010-04-02 11:02 |
| 初级用户 发帖 23 积分 52 | |
|
是不是你的单个寄存器是16bit的?
比如想写的数是int a; int a_h=(a>>8)&0xff; int a_l=a&0xff; |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |