一、实验目的
1.在完成前置实验,掌握微机系统的基本原理、EDA软件使用方法、以及实验室硬件资源的基础上,完成本次设计型实验;
2.提高课程知识的综合运用能力;
3.培养分析工程问题、提出设计方案、以及设计微机应用系统的能力。
二、实验内容
监测报警系统:使用ADC采集数据,数码管或屏幕显示电压,高于40v或低于1.0v发出告警声。
三、实验设备
1.计算机( Windows10 64位操作系统);
2.Protues8.7
四、实验原理
1.实验电路连线
2.具体模块功能原理:
(1)电源模块:通过调节电位器改变输入电阻
(2)ADC0809(仿真使用ADC0808):采集电压数据,将之转化为8位二进制。
(3)8253:PB端信号输出给四位共阳数码管显示
(4)报警模块:与非门控制,当PA端输出信号高于204,或者低于51,则二极管过电,由于NPN工作于饱和区,此时蜂鸣器发出警报声。
五、实验步骤
1.打开Windows10系统,运行Protues8.7仿真软件,开始进行仿真。
2.调节输入电压,仿真工作时,数码管会显示此时的输入电压具体数值
3.当输入电压调节至4V以上,数码管正常显示,蜂鸣器警报;
当输入电压调节至1V以下,数码管只显示小数点后两位数,蜂鸣器警报。
六、实验结果与分析
1.正常电压工作
2.高于 4V时
3.低于1V时,显示小数点后两位
七、实验总结与建议
通过本次的实验,我深入理解ADC0809的工作方式以及工作原理,也使用了8253A以及0809接受信号、处理并传输到数据总线。在进行报警展示时,源于模电知识的不牢固,对于平时习惯连接的三极管和蜂鸣器部分的工作原理解释不到位,只知道高低电
平下三极管起到开关作用。本次实验的完成过程中,我也巩固了之前的知识,培养分析工程问题、提出设计方案、以及设计微机应用系统的能力。
DATAS SEGMENT
;此处输入数据段代码
IOYO EQU 0C400h;对应的端口地址
A8255 EQU IOYO+00H*4;A端口
B8255 EQU IOYO+01H*4;B端口
C8255 EQU IOYO+02H*4;C端口
M8255 EQU IOYO+03H*4;8255控制字
ADC0808 EQU 0C420H;对应的ADC0808的端口
TABLE DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
DB 80h,90h,88h,83h,0c6h,0a1h,86h,8eh
RESULT DB 5 DUP(?)
BUF DB 5 DUP(?)
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
DB 200 DUP(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;准备工作写控制字
LEA DI,RESULT;用来保存计算后转换的结果
MOV DX,M8255
MOV AL,99H;1001 1001
OUT DX,AL
MOV DX,B8255
MOV AL,0FH
OUT DX,AL
;相当与单片机的while(1)部分
;这里是0808测量部分部分,这里测量得到al的结果为1010 1000
LOOP1:
MOV DX,ADC0808
MOC AL,0
OUT DX,AL
MOV DX,C8255
EOC:
IN AL,DX
TEST AL,01H;00表示还在转换
JZ EOC
JMP FINISH
FINISH:
MOV DX,A8255
IN AL,DX
;计算转换结果
MOV AH,00H;将ah中的内容清零
MOC BX,01F4H;500的16进制
MUL BX;将al和500相乘,高位放到dx中,低位存在ax中
MOV BX,0FFH
DIV BX;除以255得到的结果,ax中结果为0000 0001 0100 1001
MOV CX,AX;cx中备份数据
;显示结果
;将数据转换为十进制
mov bx,10
mov si,2;三位
toDec:
mov dx,0
div bx;(dx,ax)/bx中的数据除以bx
mov [buf+si],dl;余数为该位上的值,第一次循环为个位,第二次为十位
dec si
cmp ax,0;商为0表示算法结束
ja toDec
;计算个位
inc si
mov al,[buf+si]
inc si
mov bx,offset table
xlat
and al,7fh;加上小数点
mov [di],al
;计算第一个小数点位
mov al,[buf+si]
inc si
xlat table
mov [di+1],al
;计算第二个小数点位
mov al,[buf+si]
xlat table
mov [di+2],al
;完成数码管动态扫描刷新
mov dx,b8255;8255芯片
or dx,0800h;;0000 1000 0000 0000
mov al,[di+2]
out dx,al
call delay_2ms
mov dx,b8255
or dx,1000h;0001 0000 0000 0000
mov al,[di+1]
out dx,al
call delay_2ms
mov dx,b8255
or dx,1800h;0001 1000 0000 0000
mov al,[di]
out dx,al
call delay_2ms
jmp LOOP1;循环
MOV AH,4CH
INT 21H
delay_2ms proc near
push bx
mov bx,1ffh
LP2:
pushf
popf
dec bx
jnz lp2
pop bx
ret
delay_2ms endp
CODES ENDS
END START