一、实验目的
掌握模/数转换芯片ADC0809的使用方法。ADC0809包括一个8位的逐次逼近型的ADC部分,并提供一个8通道的模拟多路开关和联合寻址逻辑。用它可直接输入8个单端的模拟信号,分时进行A/D转换,在多点巡回检测、过程控制等应用领域中使用非常广泛。ADC0809的主要技术指标为:
- 分辨率:8位
- 单电源:+5V
- 总的不可调误差:±1LSB
- 转换时间:取决于时钟频率
- 当时钟频率CLOCK=640kHz时,转换时间为100µs
- 当时钟频率CLOCK=500kHz时,转换时间为128µs
- 模拟输入范围:单极性0~5V
- 时钟频率范围:10KHz~1280KHz
ADC0809 外部引脚图
二、实验内容
编写实验程序,将ADC单元中提供的0V~5V信号源作为ADCO809的模拟输入量,进行A/D转换,转换结果通过变量进行显示。
三、实验步骤
1.连接实验线路。
2.编写实验程序,经编译、链接无误后装入系统。
3.将变量VALUE添加到变量监视窗口中。
方法如下:打开设置\变量监控,出现下图的界面,选中要监视的变量“VALUE”,单击“加入监视”后确定,就会在软件左侧栏的“变量区”出现该值。
4.在JMPSTART语句行设置断点,使用万用表测量ADJ端的电压值,计算对应的采样值,然后运行程序。
5.程序运行到断点处停止运行,查看变量窗口中VALUE的值,与计算的理论值进行比较,看是否一致(可能稍有误差,相差不大)。
6.调节电位器,改变输入电压,比较VALUE与计算值,反复验证程序功能。
四、电路连接
电路连接如下所示:
五、代码设计
1.关于延时程序
DALLY: PUSH CX ;延时程序
PUSH AX
MOV CX, 100H
A5: MOV AX, 0800H
A6: DEC AX
JNZ A6
LOOP A5
AX不等于0会跳到A6,A5循环次数为100H次
六、实验现象
连接好后,使用万用表测得的电压值如下:
程序运行到断点处VALUE的值如下:
源代码
;=========================================================
; 文件名: AD0809.ASM
; 功能说明: 进行AD采样,将结果显示。 片选为IOY0
;=========================================================
IOY0 EQU 0600H
AD0809 EQU IOY0+00H*2 ;AD0809的端口地址
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS
PUBLIC VALUE ;设置全局变量以便变量监视
DATA SEGMENT
VALUE DB ? ;AD转换结果
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV DX, AD0809 ;启动AD采样
OUT DX, AL
CALL DALLY
IN AL, DX ;读AD采样结果
MOV VALUE, AL ;将结果送变量
JMP START ;在此处设置断点, 观察变量窗口中的VALUE值
DALLY: PUSH CX ;延时程序
PUSH AX
MOV CX, 100H
A5: MOV AX, 0800H
A6: DEC AX
JNZ A6
LOOP A5
POP AX
POP CX
RET
CODE ENDS
END START
这段汇编代码的思路如下:
- 定义了IOY0和AD0809的端口地址常量,以便于后续使用。
- 定义了堆栈段和数据段,其中包括一个全局变量VALUE,用于存储AD转换结果。
- 在代码段中,通过MOV指令将数据段地址加载到DS寄存器中。
- 使用OUT指令向AD0809端口发送命令,启动AD采样。
- 调用DALLY函数进行延时,以等待AD转换完成。
- 使用IN指令从AD0809端口读取AD采样结果,并将结果存储到VALUE变量中。
- 通过JMP指令实现循环,使程序持续进行AD采样和结果显示。