1、如图,数模D/A转换图
要求:
- 结合课件及实验指导书说明该硬件工作原理,(注意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周期)的方波。
- 如果要求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