56
mov ds,ax
mov dx,offset int_proc mov al,int_vect mov ah,25h int 21h
in al, 21h ;设置中断掩码 and al, irq_mask_2_7 out 21h, al in al, 0a1h
and al, irq_mask_9_15 out 0a1h, al mov ax,data mov ds,ax
mov dx,offset msg2 mov ah,09h int 21h
mov dx,offset msg3 mov ah,09h int 21h
mov irq_times,0ah sti loop1:
cmp irq_times,0 ;等待中断并判断中断10次后退出 jz exit mov ah,1 int 16h
jnz exit ;按任意键退出 jmp loop1 exit: cli
mov bl, irq_mask_2_7 ;恢复中断掩码 not bl in al, 21h or al, bl out 21h, al
mov bl, irq_mask_9_15 not bl in al, 0a1h 57
or al, bl out 0a1h, al
mov dx,ipreg ;恢复原中断向量 mov ax,csreg mov ds,ax
17
mov ah,25h mov al,int_vect int 21h
mov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,关闭中断 in ax,dx
and ax,0f7ffh out dx,ax mov ax,4c00h int 21h
int_proc proc far ;中断处理程序 cli
push ax push dx push ds
dec irq_times
mov ax,data ;Interrupt to do mov ds,ax
mov dx,offset msg1 mov ah,09h int 21h
mov al,20h ;Send EOI out 0a0h,al out 20h,al pop ds pop dx pop ax sti iret
int_proc endp code ends
四、模/数转换器
一、实验目的
了解模/数转换的基本原理,掌握ADC0809的使用方法。
18
二、实验内容
1、实验电路原理图如图38。通过实验台左下角电位器RW1输出0~5V直流电压送入ADC0809通道0(IN0),利用debug的输出命令启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。 启动IN0开始转换: Out 0298 0 读取转换结果: In 0298
2、编程采集IN0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。 3、将JP3的1、2短接,使IN2处于双极性工作方式,并给IN1输入一个低频交流信号(幅度为±5V),编程采集这个信号数据并在屏幕上显示波形。 三、实验提示
1、ADC0809的IN0口地址为298H,IN1口地址为299H。
2、IN0单极性输入电压与转换后数字的关系为:
其中Ui为输入电压,UREF为参考电压,这里的参考电压为PC机的+5V电源。 3、一次A/D转换的程序可以为 MOV DX,口地址
OUT DX,AL ;启动转换 ;延时
IN AL,DX ;读取转换结果放在AL中 四、参考流程图
19
五、参考程序1:AD_1.ASM ioport equ 0d400h-0280h io0809a equ ioport+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
20
相关推荐: