计算机接口与汇编-第四次作业

本文详细解析了数模D/A转换器的工作原理,包括Ua和Ub点的模拟量输出与数字量输入的关系,以及编程产生输出方波的方法。同时介绍了模数A/D转换器的工作流程,并展示了如何编程读取模拟量并以十六进制显示。最后,剖析了8253定时器在方式3的应用,包括产生不同频率方波的编程实例。
摘要由CSDN通过智能技术生成

1、如图,数模D/A转换图

要求:

  1. 结合课件及实验指导书说明该硬件工作原理,(注意Ua、Ub点的模拟量输出与数字量输入之间的关系以及Ua、Ub点输出电压的范围)

答:D/A转换器用于将数字量转换为模拟量,它的输入量是数字量D,输出为模拟量V0,要求输出量与输入量成正比,即V0 = D*VR,其中VR为基准电压。

1)U1=- Vref*D/256
2)ua= Vref*D/256 (0-5v之间)
3)Ub=2* Vref*D/256-5(-5   +5)(其中Vref=5)

(2)为了说明输出数字量与模拟量间的关系,请填写如下表格

数字量

Ua电压

Ub电压

备注

理论值(计算)

实测值

理论值(计算)

实测值

理论值应该在实验前计算好,实测值可以在实验室用示波器测量

00H

0

-5

40H

1.25

-2.5

80H

2.5

0

FFH

5

5

(3)利用该电路,编程产生输出方波。

io0832a        equ 290h

code  segment

   assume cs:code

start:

mov dx,io0832a

l1:

mov    al,0

out dx,al    ;输出方波0

call delay  ;方波宽度

mov al,0FFh   

out dx,al ;输出方波1

call dalay ;方波宽度

push dx

mov ah,06h ;判断是否有键按下

   mov dl,0ffh

Int 21h

    pop dx

    jz    l1      ;若无则转LLL

    mov ah,4ch    ;返回

int 21h

delay proc near          ;延时子程序

    mov   bx,200

lll:   

mov cx,0

ll:

loop ll

    dec bx

    jne lll

    ret

delay endp

code ends

   end start

2、如图,模数转换A/D图

要求:(1)结合课件及实验指导书说明硬件工作原理,(注意从软硬件上解释AD何时启动、何时转换结束)

答:A/D转换器用于将模拟量转换成相应的数字量。ADC0809是CMOS单片型逐次逼近式A/D转换器,其工作方式为:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。


(2)为了说明输入-拟量与输出数字量间的关系,请填写如下表格

输入模拟量(v)

转换后的数字量

备注

理论值(计算)

实测值

理论值应该在实验前计算好,实测值可以在实验室调节好输入模拟量后,用程序读来观察

0-

0(00H)

1.25

64(40H)

2.5

128(80H)

5

255(FFH)

(3)编程将采集到的直流电压以十六进制形式显示到屏幕

io0809a    equ 298h

code segment

assume cs:code

start:

mov  dx,io0809a    ;启动A/D转换器

    out  dx,al

    mov  cx,0ffh       ;延时

delay:

loop delay

    in   al,dx         ;从A/D转换器输入数据

    mov  bl,al         ;将AL保存到BL

    mov  cl,4

    shr  al,cl         ;将AL右移四位

    Call  disp          ;调显示子程序显示其高四位

    mov  al,bl

    and  al,0fh

    call  disp          ;调显示子程序显示其低四位

    mov  ah,02

    mov  dl,20h        ;加回车符

    int  21h

    mov  dl,20h

    int  21h

    push dx

    mov  ah,06h          ;判断是否有键按下

    mov  dl,0ffh

    int 21h

    pop dx

    je   start         ;若没有转START

    mov  ah,4ch        ;退出

    int  21h

disp proc near          ;显示子程序

    mov  dl,al

    cmp  dl,9          ;比较DL是否>9

    jle  ddd           ;若不大于则为'0'-'9',加30h为其ASCII码

    add  dl,7          ;否则为'A'-'F',再加7

ddd:

add  dl,30h        ;显示

    mov  ah,02

    int  21h

    ret

disp endp

code ends

end start

3、如图,定时器8253方式3应用图

要求:(1)说明该硬件工作原理

答:此芯片在本题中使用了方式3即方波发生器,在这种方式下,当CPU设置控制字后,输出为高电平。在写入计数初值后就开始计数,输出保持为高电平。当计数到一半计数初值时,输出变为低电平,直至计数到0,输出又变为高电平,重新开始计数。若计数值为N,则方式3的输出为周期=(N×CLK周期)的方波。

  1. 如果要求out0产生1kh方波,计数器初值n=?

答:n = 1Mhz/1khz = 1000

(3)利用该电路,编程产生1kh方波

;宏定义

show macro val  ;显示单个字符

    mov dl,val

    mov ah,2

    int 21h

endm

newline macro ;回车换行

     show 0ah

     show 0dh

endm

;数据段

data segment

io8253_0 equ 280h ;8253 0 通道

io8253_2 equ 282h ;8253 2 通道

io8253_k equ 283h ;8253 控制口

val db 0 ;

int_flag db 0

data ends

;代码段

code segment

assume ds:data,cs:code

start:

     mov ax,cs  

     mov ds,ax

     

     mov dx,offset int_proc; 使用int 21h的25号功能设置中断向量表

     mov ax,250bh   

     int 21h

     

     mov dx,21h

     in al,dx         ;开启中断IRQ3

     and al,0f7h      ;xxxx0xxx 0允许,1屏蔽

     out dx,al

                     

     mov dx,io8253_k  ;定时器8253配置,;8253 0 通道

     mov al,36h       ;00 11 011 0 计数器0 高低位 方式3输出方波 二进制

     out dx,al

     mov dx, io8253_0

     mov ax,1000      ;产生1ms方波

     out dx,al        ;先低后高

     mov al,ah

     out dx,al

     

     mov dx,io8253_k  ;定时器8253配置,8253 2 通道

     mov al,0b6h      ;1011 0110 计数器0 高低位 方式3输出方波 二进制

     out dx,al   

     mov dx, io8253_2

     mov ax,1000      ;产生1s方波

     out dx,al        ;先低后高

     mov al,ah

     out dx,al

     

     mov val,0

ll:

     cmp int_flag,1

     jnz ll           ;如果进入中断则显示val的置

     mov int_flag,0   ;中断标志清0

     mov al,val

     mov cl,4

     shr al,cl        ;右移4位,屏蔽低4位

     cmp al,9

     

     jle nb1          ;0-9 加30h,否则加37h

     add al,7h

nb1:

     add  al,30h      

     

     show al          ;显示高位

     

     mov al,val

     and al,0fh       ;屏蔽高4位

     cmp al,9

     jle nb2

     add al,7h

nb2:

     add al,30h

     show al          ;显示低位

     newline

     jmp ll           ;返回

exit:     

     in al,21h   ;屏蔽IRQ3

     or al,08h   ;;xxxx1xxx

     out 21h,al

     

     mov ah,4ch

     int 21h

int_proc proc far ;中断服务子程序,主要是进行val++操作

     

     mov ax,data ;再次加载数据段

     mov ds,ax

     

     mov al,val ;+1

     inc al

     mov val,al

     mov int_flag,1 ;中断标志置1

     mov dx,20h  ;EOI 中断结束命令 20端口送20

     mov al,20h

     out dx,al     

       

     sti          ;开中断    

     iret

int_proc endp

code ends

end start

  • 34
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值