DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 134|回复: 0
打印 上一主题 下一主题

数据采集控制卡硬件I/O控制原理

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 17:06:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                      卡的运作均是通过寄存器的帮助而进行的,寄存器分成控制寄存器、状态寄存器两种,负责不同的功能,一个为Input,一个为Output。寄存器在卡上就是某一个芯片的控制中心所在,当利用程序下达询问的指令时,某一个寄存器就会将数据传回(实际是放在总线上供CPU读取);同样地,当程序欲控制芯片作某一个操作时(例如更改设置,或是输出信号),也是将指令写入某一个规定的寄存器,该寄存器的值一经改变,就反应到真实的硬件操作上。
?
  卡的寄存器的存取一般都是从之前提到的地址开始存储的,称为基地址,寄存器的存储通常也是以一个字节为单位,如果卡片上的寄存器较多的话,就会使用到比较多的字节,卡的功能越复杂,用到的寄存器就越多。因此同一台计算机上不同的卡片使用的基地址均不相同。所以实际的控制程序必须和寄存器打交道,要取得卡片的任何状态,必须读取寄存器中的数值;而要控制状态时,也是写人控制的数值到寄存器,因此程序的对象就是寄存器,一片卡可能会有很多寄存器,实际的数目由功能来决定,功能越多,则使用到的寄存器数量也必定越多。
?
  现在很多卡的厂商考虑到用户的方便雨将原本需要较复杂的寄存器读写过程包装起来,变成所谓的函数,工程师只知道呼叫某一个函数,就可以成功地控制或是读取信息,其他的细节就由厂商的DLL或是OCX代劳了。函数没有看到寄存器的指定,最多也就只有地址和中断的设置,函数使用起来更精简。
?
  当然硬件寄存器读写要有一定的方法,读写的方法与操作系统有关。在传统DOS环境下(不包含Windows中DOS虚拟机),程序运行于CPU的Ring0级,对硬件拥有完全的控制权,可以很容易地实现对时间的准确控制。而Windows 95/98使用抢占式多任务机制,系统接管全部硬件资源,程序在CPU的Ring3级上运行,无法直接与硬件打交道。Windows 98下实现对硬件资源访问的方便有:
?
  (1)利用Windows提供的各个段选择符标号可直接访问内存。
?
  (2)可用VC斗+提供的函数直接访问硬件上的内存和端口,如int outp(unsigned,int)。
?
  (3)嵌人汇编访问硬件上的内存和端口。
?
  但在较高级的系统中(如Windows NT,Windows2000)这样的做法也是不行的,这是由于Windows操作系统是一个受保护的系统,随便下达硬件控制指令的话,将会危害到整个系统的稳定性,硬仵的操作通常是利用微软的SDK(Software Development Kit)和DDK(Device Development Kit)来完成。
?
  在WindowsNT下,由于对I/O端口的直接操作被屏蔽,普通用户只能借助一定的驱动开发工具来开发设各的驱动程序,实现用户应用程序和硬件之间的通信。所以设各的驱动程序的作用函数供工程师使用来控制硬件,而不涉及操作系统底层编程。现在有各种设备驱动程序专用开发软件,如Windriver能在很短的时间内开发出高效的设备驱动。
?
  程序语言例如VisualBasic、Delphi、C++等等常用的语言,都可以开发应用程序,其中Visual Basic没有提供直接访问底层硬件的控件和方法本身的程序无法直接控制到适配卡,必须通过DLL或是额外OCX控件的协助才行,通过DLL或是OCX,控制程序码就经过层层的转译,一直到卡片上的寄存器,而检测程序代码则经相反的管道将状态传回到我们所写的程序里。但如果由最基础的程序一直写到硬件卡片控制的话,将会使得工程师花费太多的时间而无法顺利完成任务。所以现在就出现了组态软件如WINCC,控制硬件通信不需要涉及底层,只需要设置相应的参数就可以了,大大减轻了工程师的负担,使工程师主要精力花在界面和工艺上,特别适合于工程应用。
  
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-11-18 02:23 , 耗时 0.126129 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表