实验目的
1、掌握A/D转换器0809的工作原理及其与8031的连接方法。
2、掌握A/D转换的程序设计。
实验板中,A/D接口采用0809芯片,其接口连接如图6-1示。8路模拟输入,由A、B、C三脚选择。输入Vin=0~5V时,相应输出00H~FFH。
为了启动A/D转换,应在STAR引脚加正脉冲,通常可用写入指令MOVX @DPTR,A来获得。A/D转换结束后,EOC脚发出高电平,通知CPU从数据口D7~D0读取转换结果。线路中,0809 EOC接至8031的INT1,所以即可通过查询,也可利用中断响应来判断A/D转换是否完成。
本实验仅采集一路(IN1)的模拟输入0~5V,假设A/D转换的结果存放于CPU内RAM 50H。下面分别列出查询法或中断法的转换程序。
ORG 0600H |
查询法 | |
AD1: |
MOV DPTR, #5001H |
|
MOVX @DPTR, A |
;启动0809通道1 | |
MOV R2, #20H |
;延时 | |
DL: |
DJNZ R2, DL |
|
WEND: |
JB P3.3 ,WEND |
;等待A/D完成 |
MOVX A, @DPTR |
;读A/D结果 | |
MOV 50H, A |
;存50H | |
RET |
||
ORG 0620H |
中断法,主程序。 | |
MAIN: |
MOV SP #60H |
;设置堆栈指针 |
SETB EA |
;开CPU中断 | |
SETB EX1 |
;允许INT1中断 | |
SETB IT1 |
;INT1边沿触发 | |
|
MOV DPTR, #5001H |
|
MOVX @DPTR, A |
;启动0809通道1 | |
SJMP $ |
;等待中断或其它 | |
ORG 0013H |
||
LJMP AD2 |
;中断入口 | |
ORG 0640H |
||
AD2: |
PUSH PSW |
; A/D中断服务子程序 |
PUSH A |
;入栈保护 | |
PUSH DPL |
||
PUSH DPH |
||
MOV DPTR, #5001H |
||
MOVX A, @DPTR |
;读A/D转换结果 | |
MOV 50H, A |
;结果存50H | |
MOV DPTR, #5001H |
||
MOVX @DPTR ,A |
;再次启动通道1 | |
POP DPH |
;恢复现场 | |
POP DPL |
||
POP A |
||
POP PSW |
||
RETI |
实验步骤:
1、 输入程序。
2、采用设置断点和连续执行方式,运行程序。检查模拟输入电压和A/D转换结果之间是否互相对应。
思考题:
1、中断法A/D采样程序,中断子程序中为什么要再次启动A/D?
2、仿真调试中,如何确认中断已经响应?
3、如果采集8路输入,程序如何改写?
(二)A/D演示实验
实验内容:
实验板的最左二位数码管显示0809通道1的A/D转换结果(16进制数字量),它经标度变换后得到的模拟输入电压值(10进制)显示在最右三位,两者之间以“一”号分开。
设A/D转换结果为数字量N,则对应的模拟输入大小为 。可见,只要将乘积5×N的小数点右移8位,就能实现标度变换了。
参考程序:
ORG 0000H |
||
LJMP MAIN |
||
ORG |
||
MAIN: |
MOV SP, #60H |
;设置堆栈 |
MOV DPTR, #0B000H |
;8155命令字 | |
MOV A, #03H |
||
MOVX @DPTR, A |
;A、B口输出,C口输入 | |
MOV R0, #2AH |
;显示初始化 | |
MOV A, #11H |
;全部亮“一” | |
ML0: |
MOV @R0, A |
|
INC R0 |
||
CJNE R0, #30H, ML0 |
||
DIS: |
LCALL DISP |
;调用显示 |
LCALL AD1 |
;调用A/D | |
MOV A, 50H |
;采样值高8位送显示缓冲2A | |
ANL A, #0F0H |
||
SWAP A |
||
MOV 2AH, A |
||
MOV A, 50H |
;低8位送显示缓冲2B | |
ANL A, #0FH |
||
MOV 2BH, A |
||
MOV A, 50H |
;标度度换:5×N×2-8 | |
MOV B, #05H |
||
MUL AB |
;结果:整数存B,小数存A | |
PUSH A |
;暂存 | |
MOV A, B |
;整数加亮小数点后送显示2DH | |
ADD A, #14H |
;14H为显示字形码中加亮小数点的偏移量 | |
MOV 2DH, A |
||
POP R3 |
;小数部分变换为BCD码后,存入显示缓冲2EH、2FH | |
MOV R0, #2E |
;调用二进制小数→十进制 | |
LCALL PBTD |
||
SJMP DIS |
||
END |
实验步骤:
1、输入程序。
2、单步执行,观察程序执行过程。
3、连续运行。改变模拟输入的大小,观察显示结果。
思考题:
拟将实验板作为温度变送器的测量值数字显示。温度变送器量程0~300℃、输出0~5V,接至0809的通道1,试编写程序。
评论
查看更多