[微机原理]多点模拟量计算机数据采集实验

一、实验目的

        通过编写程序,掌握ADC0809的工作原理以及应用方法,掌握ADC0809初始化及应用的编程,实现计算机多点模拟量的采集并完成转换且能够将值实时的显示在外设上。在此基础上,掌握在计算机屏幕、七段数码管、LCD液晶屏等不同显示器件的显示编程。提高自身的编程能力。

二、实验设备与环境

        硬件上,使用实验室的TPC-ZK-II硬件实验箱,系统由USB总线接口模块、TPC-ZK-II实验系统及集成开发环境软件组成。USB总线接口模块通过USB总线电缆与pc机相连,模块直接插在TPC-ZK-II实验系统上。具体硬件见使用指导书。

         软件上,使用TPC-ZK-II集成开发环境。为用户提供了程序的编辑、汇编、调试、运行等功能。


三、实验内容与指标

3.1设计要求

        在平台上利用ADC0809编程实现从IN0、IN1、IN2采集三路信号模拟量,并将转换后的数字量(保留1位小数)在计算机屏幕上实时显示出来。在此基础上,利用数码管、LED排灯来丰富模拟量的表现形式。更进一步的,能够利用LCD显示屏实时显示模拟量的变化波形。

3.2设计目标和性能指标

3.2.1基础功能

        (1)在平台上利用ADC0809采集三路信号并转化后在计算机屏幕实时显示

        解决这个问题可以将其分为两步:第一步是采集各个路的数据,第二步是将三路信号进行一个实时的显示。首先,对于第一步的实现,只需在不同时间选通不同的IN端口,便可以拿到数据,这时拿到的数据是一个二进制数据,还需要将其变为一个十进制的数字。具体方法是:由于拿到的是255(最大值)的二进制数,可以先将其乘2再除以100,这样就拿到了整数部分(近似),再将余数除10,就拿到了近似的一位小数,由此就拿到了十进制的小数并可以调用INT功能进行显示。第二步,对于实时显示,其实就是一个串行的显示,将每次拿到的数值都送出显示便可以做到实时的动态显示。

3.2.2扩展功能

        (1)数码管显示

        实现这一问题的原理在上边已经解释,即依托在处理好小数情况下的位码、段码的快速切换。

        (2)LED的显示

        这个功能也非常简单,只需在INT0通道采集到数据后将其送给PC口即可。

        (3)LCD的显示

        本次实验并未使用。

3.3硬件电路图

        整体电路如下所示,主要芯片ADC0809、P8255。

四、程序流程图

        整个程序的框架为串行结构,由于不存在判断转跳等问题,因此十分简单,对于数码管显示的位码段码切换等细节进行了忽略,原理与之前的实验是相同的。

五、方案设计与讨论

        方案的整体架构是有两方法可以实现的,最开始是希望将所有数据都采集到并存入定义好的变量后再进行统一的输出,但这样做有两个坏处:其一,这相当于将数据刷新的时间堆在了一遍,而采集处理数据的时间堆在了另一边,会降低整个采集的实时性,此外,这种做法会加大LED输出二进制码的复杂度。在采集到IN0信号就进行输出是相对简单的。但这种方案也并不是没有优点,在处理采集数据的相对关系时,这种先采集、在处理的想法就变得非常有效,相比之下,串行输入输出会变得低效。

        在本次采用方案的灵活性上,其实还可以继续增加。方案中一旦开始就只能结束再启动,并没有人为可控的判断在内,可以添加一些例如暂停、继续的选项以增加系统的灵活性。

        在显示上,本次采用了数码管以及二进制显示的方法,但相比之下其实LCD的显示是更为直观的,也可以在此基础之上进行嵌入,LCD的基本思想在于动态的刷新屏幕,涉及到滚动等方法。

六、程序展示

;ADC:CS:280H~287H,IN0:0~5v,IN1:+5V,IN2:0V
;数码管位选:CS:288H,段选:P8255A,位选:P8255A
;LED排灯:P8255C串口

DATAS SEGMENT
  P8255A EQU 288H
  P8255B EQU 289H
  P8255C EQU 28AH
  P8255S EQU 28BH
  ADI0   EQU 280H 
  ADI1   EQU 281H 
  ADI2   EQU 282H
  NUM_LIST DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H    ;无小数点数字
  NUMP_LST  DB 0FDH,61H,0DBH,0F3H,67H,0B7H,0BFH,0E1H,0FFH,0F7H   ;有小数点的数字
  NUM1 DB ?
  NUM2 DB ?
  NUM3 DB ?
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
      MOV AX,DATAS
      MOV DS,AX
      MOV DX,P8255S
      MOV AL,80H        ;8255初始化
      OUT DX,AL
MAINLP:
      CALL GNUM1
      CALL PNUM1

      CALL GNUM2
      CALL PNUM2

      CALL GNUM3
      CALL PNUM3
      JMP MAINLP
;==============================================================

GNUM1 PROC 
      MOV AL,00
      MOV DX,ADI0
      OUT DX,AL         ;初始化数模转换器
      NOP
      NOP
      NOP
      NOP
      MOV DX,ADI0
      IN AL,DX
      MOV NUM1,AL
      MOV DX,P8255C     ;显示LED排灯
      OUT DX,AL 
      MOV BX,2
      MUL BL
      MOV BL,100
      DIV BL
      MOV CH,AL         ;CH为采集数的整数部分
      MOV CL,AH         ;CL为采集数的小数部分
      RET
GNUM1 ENDP

PNUM1 PROC 
      ;数码显示整数
      MOV DX,P8255A
      MOV AL,00
      OUT DX,AL         ;数码管清零
      MOV DX,P8255B
      MOV AL,00000001B  ;选位码
      OUT DX,AL
      MOV DX,P8255A
      MOV BX,0000H
      MOV BL,CH
      MOV BH,0
      MOV AL,NUMP_LST[BX]             ;查表输出带小数点的数字,led显示
      OUT DX,AL
      ;屏幕显示整数
      MOV AL,CH
      ADD AL,30H                
      MOV DL,AL
      MOV AH,02H                      ;输出数字个位显示在屏幕上
      INT 21H
      MOV DL,46                       ;输出小数点,显示在屏幕上
      MOV AH,02H
      INT 21H
      ;数码显示小数
      MOV AL,CL
      MOV BX,10
      MUL BL
      MOV BX,100
      DIV BL
      MOV CL,AL                       ;得到十分位数据
      MOV DX,P8255A
      MOV AL,00
      OUT DX,AL 
      MOV DX,P8255B
      MOV AL,00000010B
      OUT DX,AL
      MOV DX,P8255A
      MOV BX,0000H
      MOV BL,CL
      MOV BH,0
      MOV AL,NUM_LIST[BX]             ;输出无小数点的数字,led显示
      OUT DX,AL                  
      ;屏幕显示小数 
      MOV AL,CL
      ADD AL,30H
      MOV DL,AL
      MOV AH,02H
      INT 21H
      MOV DL,32                      ;输出空格
      MOV AH,02H
      INT 21H
      RET
PNUM1 ENDP

GNUM2 PROC 
      MOV AL,00
      MOV DX,ADI1
      OUT DX,AL                      ;初始化数模转换器
      NOP
      NOP
      NOP
      NOP
      MOV DX,ADI1
      IN AL,DX
      MOV NUM2,AL
      MOV BX,2
      MUL BL
      MOV BL,100
      DIV BL
      MOV CH,AL                      ;CH为采集数的整数部分
      MOV CL,AH                      ;CL为采集数的小数部分
      RET   
GNUM2 ENDP

PNUM2 PROC 
      ;数码显示整数
      MOV DX,P8255A
      MOV AL,00
      OUT DX,AL                      ;数码管清零
      MOV DX,P8255B
      MOV AL,00001000B               ;选位码
      OUT DX,AL
      MOV DX,P8255A
      MOV BX,0000H
      MOV BL,CH
      MOV BH,0
      MOV AL,NUMP_LST[BX]            ;查表输出带小数点的数字,led显示
      OUT DX,AL
      ;屏幕显示整数
      MOV AL,CH
      ADD AL,30H                
      MOV DL,AL
      MOV AH,02H                     ;输出数字个位显示在屏幕上
      INT 21H
      MOV DL,46                      ;输出小数点,显示在屏幕上
      MOV AH,02H
      INT 21H
      ;数码显示小数
      MOV AL,CL
      MOV BX,10
      MUL BL
      MOV BX,100
      DIV BL
      MOV CL,AL                      ;得到十分位数据
      MOV DX,P8255A
      MOV AL,00
      OUT DX,AL 
      MOV DX,P8255B
      MOV AL,00010000B
      OUT DX,AL
      MOV DX,P8255A
      MOV BX,0000H
      MOV BL,CL
      MOV BH,0
      MOV AL,NUM_LIST[BX]            ;输出无小数点的数字,led显示
      OUT DX,AL                  
      ;屏幕显示小数 
      MOV AL,CL
      ADD AL,30H
      MOV DL,AL
      MOV AH,02H
      INT 21H
      MOV DL,32                      ;输出空格
      MOV AH,02H
      INT 21H
      RET
PNUM2 ENDP

GNUM3 PROC 
      MOV AL,00
      MOV DX,ADI2
      OUT DX,AL                      ;初始化数模转换器
      NOP
      NOP
      NOP
      NOP
      MOV DX,ADI2
      IN AL,DX
      MOV NUM2,AL
      MOV BX,2
      MUL BL
      MOV BL,100
      DIV BL
      MOV CH,AL                      ;CH为采集数的整数部分
      MOV CL,AH                      ;CL为采集数的小数部分
      RET
GNUM3 ENDP

PNUM3 PROC 
      ;数码显示整数
      MOV DX,P8255A
      MOV AL,00
      OUT DX,AL                      ;数码管清零
      MOV DX,P8255B
      MOV AL,01000000B               ;选位码
      OUT DX,AL
      MOV DX,P8255A
      MOV BX,0000H
      MOV BL,CH
      MOV BH,0
      MOV AL,NUMP_LST[BX]            ;查表输出带小数点的数字
      OUT DX,AL
      ;屏幕显示整数
      MOV AL,CH
      ADD AL,30H                
      MOV DL,AL
      MOV AH,02H                     ;输出数字个位显示在屏幕上
      INT 21H
      MOV DL,46                      ;输出小数点,显示在屏幕上
      MOV AH,02H
      INT 21H
      ;数码显示小数
      MOV AL,CL
      MOV BX,10
      MUL BL
      MOV BX,100
      DIV BL
      MOV CL,AL                      ;得到十分位数据
      MOV DX,P8255A
      MOV AL,00
      OUT DX,AL 
      MOV DX,P8255B
      MOV AL,10000000B
      OUT DX,AL
      MOV DX,P8255A
      MOV BX,0000H
      MOV BL,CL
      MOV BH,0
      MOV AL,NUM_LIST[BX]            ;查表输出无小数点的数字
      OUT DX,AL                  
      ;屏幕显示小数 
      MOV AL,CL
      ADD AL,30H
      MOV DL,AL
      MOV AH,02H
      INT 21H
      MOV DL,32                      ;输出空格
      MOV AH,02H
      INT 21H
      MOV DL,0DH                     ;显示回车,进行实时显示
      MOV AH,2
      INT 21H
      RET
PNUM3 ENDP

CODES ENDS
END START

七、实验结果与分析

        首先,整个电路的实物连接如下:

         观察数码管,可以看到可以随数值的变化而实时显示(由于手机快门过快,实际上人眼观察到的此时值为2.8V)

         与此同时,观察屏幕的显示也进行着同步的更新。

         再观察显示二进制数的LED排灯,这里以5V距离,可以看到它是全亮的(即达到最大幅值)

八、实验总结

        本次的实现强化了对于ADC0809的使用,由于设计的整体架构较为简单,因此这次实验并没太多的困难,很顺利就可以实现。当然,对于LCD的显示问题也是一个可扩展的点,但线路复接是一个需要考虑的问题。

版权声明:本文为CSDN博主「尧呱呱」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45555522/article/details/121969904

生成海报
点赞 0

尧呱呱

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

理解函数栈帧

一、函数栈帧的创建 1.寄存器 一般来说,计算机中的寄存器有六种 分别是:eax, ebx, ecx,edx,ebp,esp 而ebp,esp这两个寄存器中存放的是地址,与此同时,这

# 浅谈IIC总线通讯协议

浅谈IIC总线通讯协议 相关概念 IIC总线是PHLIPS公司在八十年代初推出的一种同步串行的半双工总线,支持多主机多从机,具备总线裁决功能,用于连接整体电路。 整体电路:同一块板子上

基于8086单片机的PWM调光(带汇编)

之前网上并没有详细的基于8086的PWM调光设计,做完课程设计,给大家分享一下使用DAC8032提供电压的设计思路。 1. 总体设计 在这次设计中,使用了PWM脉宽调制输出方式,即通过对