jeanlove 发表于 2009-07-27 22:12

请问能直接用C语言对8251编程吗?

对于x86架构而言,是不是再8086之后的8251全都是集成到了cpu的内部,只是端口没变。

那么我能直接用C语言对8251编程吗? 在Linux/Win上如果我想这样做,是需要调什么特殊的库,还是只能求助于汇编?

能解释一下么,最好举个简单的例子。谢谢!!!!!!!!!!!!!

OwnWaterloo 发表于 2009-07-27 22:12

回复 #1 jeanlove 的帖子

原帖由 jeanlove 于 2009-7-27 22:12 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
那么我能直接用C语言对8251编程吗? 在Linux/Win上如果我想这样做,是需要调什么特殊的库,还是只能求助于汇编?


我仅在win32下玩过8042, 应该还是有不少地方是相通的。
是可以不写一行汇编代码的, 但是要借助一些库。


8042需要的是60、64端口, 具体的读写规则lz可以去搜, 我也记不太清楚了。


读端口在x86上好像是这样的吧?
in AL,64H ; 将64端口读到al中。

但也可以不写汇编,msvc提供的crt中, 有conio.h这个头文件,提供了:
_inp 、 _inpw 、 _inpd 、 用作读端口
_outp 、 _outpw 、 _outpd、 用作写端口。

所以在win32上, 读写端口是不用写汇编的。linux上是否提供这些函数我就不知道了……



还需要注意的是, 在win98系列中, 端口“据说”是可以随便读写的(使用win98时不会编程,会编程时又不用win98……)。
而在winnt系列中, 端口是受保护的, 需要特定权限才能读写。

获得端口读写权限, 我不清楚具体要怎么做。 但可以求助于一个库"WinIO", 它可以帮助你获得读写端口的权限(其实该库还可以做别的一些事情)。
依然, 可以不用写汇编代码 ……



还有一个当时折磨过我的问题……
winio提供的.sys(用于Win XP) .vxd(用于Win98 ), 这2个文件一定要和.exe放在同目录下。
只放在Path或者system32下都是不行的。



PS:
lz你搞什么的……研究范围有点小广……

[ 本帖最后由 OwnWaterloo 于 2009-7-28 11:13 编辑 ]

jeanlove 发表于 2009-07-28 12:32

原帖由 OwnWaterloo 于 2009-7-28 11:10 发表 http://linux.chinaunix.net/bbs/images/common/back.gif


我仅在win32下玩过8042, 应该还是有不少地方是相通的。
是可以不写一行汇编代码的, 但是要借助一些库。


8042需要的是60、64端口, 具体的读写规则lz可以去搜, 我也记不太清楚了。


读端口在x8 ...
楼上的大人学识渊博,知识范围乃是大广啊... ...

我研究计算机,初学... ...

YaoFei 发表于 2009-08-08 11:52

哪里有8251 ?

yikaikai 发表于 2009-08-08 17:30

单片机不都是直接用c的么?

kissGNU 发表于 2009-08-11 10:59

操作系统包括linux和windows都提供给用户据直接操作端口的函数接口,其实现无非是汇编mov和in/out指令。单片机可以C语言实现,实际上也被汇编成这些指令了
页: [1]
查看完整版本: 请问能直接用C语言对8251编程吗?