DATA1 EQU 0580H ;存放的8个数码管要显示的字型代码的内存的起始地址 DATA2 EQU 0500H ;存放的0-0FH七段数码管的字型代码的内存的起始地址
START:
JMP ADCONTORL
ADCONTORL:
CALL FORMAT;把显示0, 1, 2,…, 9, A,…, F对应的七段数码管的字型
;;代码存到起始地址为500H的内存中
MOV AX,0H MOV DS,AX
;下面的代码把显示器要显示的字符“0809--”代码存到起始地址为500H的内存中
MOV BX,DATA1; MOV DS:[BX],AL ADD BX,01H MOV DS:[BX],AL ADD BX,01H
MOV AL,40H ; 40H 为“-”的代码 MOV DS:[BX],AL ADD BX,01H MOV AL,40H MOV DS:[BX],AL ADD BX,01H
MOV AL,6fH ; 6fH 为“9”的代码 MOV DS:[BX],AL ADD BX,01H
MOV AL,3fH ; 3fH 为“0”的代码 MOV DS:[BX],AL ADD BX,01H
MOV AL,7fH ; 7fH 为“8”的代码 MOV DS:[BX],AL
MOV AL,3fH ; 3fH 为“0”的代码
ADD BX,01H MOV DS:[BX],AL
ADCON:
MOV AX,00
MOV DX,ADPORT ;ADPORT为0809端口地址00E0H OUT DX,AL ;启动本次A/D转换
MOV CX,0500H ;CX为循环初值,值越大,延时时间越长
DELAY:
LOOP DELAY ;CX减1循环直至CX=0,作用是延时
MOV DX,ADPORT
IN AL,DX ; 输入本次A/D转换的数字量 MOV CL, AL
CALL CONVERS ; 把数字量转换成数码显示的代码,存放到
;起始地址为DATA1内存中
CALL LEDDISP ; 用数码显示器显示DATA1内存中要显示的字符 JMP ADCON ; 启动下一次A/D转换,无限循环
CONVERS: ;把数字量转换成数码显示的代码,存放到起始地址为DATA1内存中的子程序
;AL和CL中放数字量 MOV BH,0H
AND AL,0FH ; 取数字量的低4位 MOV BL,AL
MOV AL,CS:[BX+DATA2]; 以数字量的低4位查放在DATA2中的代码表 MOV BX,DATA1
MOV DS:[BX],AL; 低4位数字的代码放到内存[DATA1]中 INC BX PUSH BX MOV AL,CL MOV CL,04H
SHR AL,CL ;把数字量的高4位移到低4位,低4位移出 MOV BL,AL
MOV BH,0H
MOV AL,CS:[BX+DATA2]; 以数字量的高4位查放在DATA2中的代码表 POP BX
MOV DS:[BX],AL ;高4位数字的代码放到内存[DATA1+1]中 RET
;显示放在DATA起始的内存中的8个字符的子程序
LEDDISP:
MOV AL, 90H LED1:
LED2:
MOV DX, CONTPORT ;显示器接口芯片的控制口端口地址CONTPORT OUT DX, AL
MOV BYTE PTR DS:[0600H],00;DS:[0600H]保存已显示的字符数,初值为0 CMP BYTE PTR DS:[0600H],07H ;判断是否已显示8个字符 JA LED2 ;已显示8个字符,则转 LED2退出显示子程序 MOV BL, DS:[0600H] ;把下一个要显示的字符的序号送到BL中 MOV BH, 0H
MOV AL,CS:[BX+DATA1];取下一个要显示的字符的八段编码到AL MOV DX,DATAPORT ;DATAPORT为显示器的数据端口00B8H OUT DX,AL ;送AL中的八段编码到显示器的数据端口中 ADD BYTE PTR DS:[0600H],01H ;要显示的字符的序号加1 JNZ LED1 ;和不为0(256)则循环 RET ;子程序返回
FORMAT: ;这段子程序的作用是把显示0, 1, 2,…, 9, A,…, F对应的七段数码管的字型 ;;代码3F, 06, 5B, 4F,66,6D,7D,07,7F,6F,77,7C,39,5E,79,71存到起始地址为500H的内存中
MOV BX,0
MOV WORD PTR DS:[BX+0500H],063FH ADD BX,2
MOV WORD PTR DS:[BX+0500H],4F5BH ADD BX,2
MOV WORD PTR DS:[BX+0500H],6D66H ADD BX,2
MOV WORD PTR DS:[BX+0500H],077DH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],6F7FH ADD BX,2
MOV WORD PTR DS:[BX+0500H],7C77H ADD BX,2
MOV WORD PTR DS:[BX+0500H],5E39H ADD BX,2
MOV WORD PTR DS:[BX+0500H],7179H RET
CODE ENDS
END START 3. 实验步骤
1) 按图 3-6 连好实验线路
图3-6
2) 运行实验程序 有两种方法:
第一种运行实验箱固化在EPROM中的可执行程序,其起始地址为:F000:B000,其优点为简单易用,缺点不能修改程序。
调用方法为:
在实验箱显示器显示命令提示符“—”时,按 GO 键,显示“ 500 00 ” 输入 F000,按“:”键,输入B000 ,
再按 EXEC 键,实验箱的显示器上显示“0809 ——XX”。
第二种方法为用PC机联机,其优点是可以修改程序,改变输出的波形和周期,方法参考第二章4.联机软件的使用方法,该实验对应的汇编语言源程序在联机软件安装目录下的ASM文件夹下,文件名为DVCAD.ASM。
3)调节电位器Wl, 显示器上会不断显示新的转换结果,同时用万用电表测量电位器W1中心抽头的电压(选择适当的量程以减小误差),记下模拟量和数字量的对应值。
五、实验结果
模拟量和数字量对应关系的典型值为:
0V一-00H, +2.5V--80H。 +5V--FFH
六、实验数据分析(结论,误差分析)
对实验结果进行观察,得出模拟量和数字量对应关系,分析A/D转换误差产生的原因。
七、思考题
1. 如果0809输入的模拟量来自于通道7,程序应该如何修改?如果要同时转换通道0和7的模拟量,则程序又应该如何修改?