1
项目简介
本项目是 A/D 转换入门实验,使用经典 8 位逐次逼近型模数转换芯片 ADC0809,对连接在 IN0 通道的电位器电压进行采集。通过控制 ADC0809 的 START/ALE、EOC、OE 与 CLK 信号,完成一次完整的 A/D 转换,并将 8 位数字量送 P2 口 LED 显示。
掌握本项目后,学生将理解 ADC0809 的转换时序、通道选择方法,学会通过单片机 IO 口产生控制信号驱动外部 A/D 芯片,为后续多路数据采集与传感器接口设计奠定基础。
2
电路图
电路说明
- • P1 口接 ADC0809 数据口 D0~D7
- • P3.0=START/ALE、P3.1=EOC、P3.2=OE、P3.3=CLK
- • P3.4=ADD-A、P3.5=ADD-B、P3.6=ADD-C,选中 IN0 通道
- • 电位器输出电压接入 IN0,转换结果送 P2 口 LED 显示
3
程序内容(汇编语言)
;==================================================
; 项目名称:ADC0809 单通道电位器电压采集
; 芯片型号:STC89C52RC
; 时钟频率:12MHz
; 接口说明:
; P1 = ADC0809 数据口 D0~D7
; P3.0 = START/ALE 启动与通道锁存(上升沿锁存通道,下降沿启动转换)
; P3.1 = EOC 转换结束信号(输入,高电平有效)
; P3.2 = OE 输出使能(高电平有效)
; P3.3 = CLK 时钟输入(软件产生约 500kHz 方波)
; P3.4 = ADD-A 通道地址最低位
; P3.5 = ADD-B
; P3.6 = ADD-C
; 功能说明:选择 IN0 通道采集电位器电压,转换结果送 P2 口 LED 显示
;==================================================
ORG 0000H ; 程序从复位向量 0000H 开始
LJMP MAIN ; 跳转到主程序入口
; 主程序入口
MAIN: SETB P3.0 ; START/ALE 初始高电平
CLR P3.2 ; OE 关闭,禁止数据输出
SETB P3.1 ; EOC 配置为输入口
; 主循环:反复启动 A/D 转换并读取结果
LOOP: CLR P3.6 ; ADD-C=0
CLR P3.5 ; ADD-B=0
CLR P3.4 ; ADD-A=0,选中 IN0 通道
SETB P3.0 ; ALE 上升沿锁存 IN0 通道地址
CLR P3.0 ; ALE/START 下降沿启动 A/D 转换
SETB P3.0 ; START 恢复高电平,等待下次启动
; 等待 EOC 变高,期间持续提供 ADC 时钟
WAIT_EOC:
LCALL ADC_CLK ; 给 ADC0809 提供一个 CLK 周期
JB P3.1, READ_ADC ; EOC=1 转换结束,跳转读取
SJMP WAIT_EOC ; 未结束继续等待
; 读取转换结果
READ_ADC:
SETB P3.2 ; OE=1,打开输出三态门
MOV A, P1 ; 读取 8 位转换结果到 ACC
MOV P2, A ; 结果送 P2 口 LED 显示
CLR P3.2 ; OE=0,关闭输出
LCALL DELAY ; 延时约 200ms 便于观察
SJMP LOOP ; 循环采集
; ADC0809 时钟产生子程序(产生一个 CLK 周期,约 500kHz)
ADC_CLK:
SETB P3.3 ; CLK 高电平
NOP
NOP
CLR P3.3 ; CLK 低电平
NOP
RET
; 软件延时子程序(约 200ms @12MHz)
DELAY: MOV R7, #200
DLY1: MOV R6, #250
DLY2: DJNZ R6, DLY2
DJNZ R7, DLY1
RET
END
4
评分标准
| 评分项 |
分值 |
评分标准 |
| 电路连接 |
25分 |
ADC0809 数据、控制、地址线连接正确规范 |
| 控制时序 |
30分 |
START/ALE、EOC、OE、CLK 控制正确 |
| 程序编写 |
25分 |
代码正确、规范,注释清晰完整 |
| 功能实现 |
10分 |
电位器电压变化时 LED 显示随之变化 |
| 实训报告 |
10分 |
报告内容完整、整洁 |
5
注意事项与安全规范
输入电压范围
ADC0809 模拟输入电压必须在 0~5V 之间,禁止超过 Vref+
时钟频率
ADC0809 CLK 推荐 10kHz~1.28MHz,本程序采用软件约 500kHz
防止短路
接线前确认电源关闭,避免 ADC 数据口与电源或地短路
代码规范
程序必须有完整注释,便于理解 ADC 控制时序
1
项目简介
本项目在单通道采集基础上,实现 ADC0809 的 IN0~IN7 共 8 路模拟电压的循环采集。通过动态设置 ADD-A、ADD-B、ADD-C 通道地址线,依次选中 8 个输入通道,将转换结果存入片内 RAM 缓冲区,便于后续显示或上传处理。
掌握本项目后,学生将理解 ADC0809 多路复用原理,学会使用循环与查表思想实现多通道自动巡检,为构建多路温度、压力等传感器采集系统打下基础。
2
电路图
电路说明
- • P1 口接 ADC0809 数据口 D0~D7
- • P3.0=START/ALE、P3.1=EOC、P3.2=OE、P3.3=CLK
- • P3.4~P3.6 作为通道地址线,循环选中 IN0~IN7
- • 每通道转换结果依次存入 30H~37H 片内 RAM
3
程序内容(汇编语言)
;==================================================
; 项目名称:多路模拟电压循环采集实训
; 芯片型号:STC89C52RC
; 时钟频率:12MHz
; 接口说明:同项目 01
; 功能说明:循环采集 IN0~IN7 共 8 路模拟电压,依次存入 30H~37H
;==================================================
ORG 0000H ; 程序从复位向量开始
LJMP MAIN
; 主程序入口
MAIN: SETB P3.0 ; START/ALE 初始高电平
CLR P3.2 ; OE 关闭
SETB P3.1 ; EOC 配置为输入
MOV R0, #30H ; 数据缓冲区首地址
MOV R2, #8 ; 8 路通道计数
; 循环采集 8 路通道
LOOP: MOV A, #8
CLR C
SUBB A, R2 ; A = 当前通道号 0~7
LCALL ADC_READ ; 启动并读取指定通道
MOV @R0, A ; 结果存入缓冲区
INC R0 ; 缓冲区指针加 1
DJNZ R2, LOOP ; 8 路未采完继续
; 一轮采集完成,可在此处加入显示或上传处理
MOV R0, #30H ; 重置指针
MOV R2, #8 ; 重置计数
LCALL DELAY1S ; 延时 1 秒再启动下一轮
SJMP LOOP
; ADC0809 指定通道读取子程序
; 入口:A = 通道号 0~7
; 出口:A = 8 位转换结果
ADC_READ:
MOV C, ACC.0
MOV P3.4, C ; 设置 ADD-A
MOV C, ACC.1
MOV P3.5, C ; 设置 ADD-B
MOV C, ACC.2
MOV P3.6, C ; 设置 ADD-C
SETB P3.0 ; ALE 上升沿锁存通道地址
CLR P3.0 ; 下降沿启动转换
SETB P3.0 ; START 恢复高
WAIT_EOC2:
LCALL ADC_CLK ; 提供 ADC 时钟
JB P3.1, READ_DATA2
SJMP WAIT_EOC2
READ_DATA2:
SETB P3.2 ; OE=1 打开输出
MOV A, P1 ; 读取结果
CLR P3.2 ; OE=0 关闭输出
RET
; ADC0809 时钟产生子程序
ADC_CLK:
SETB P3.3
NOP
NOP
CLR P3.3
NOP
RET
; 1 秒延时子程序
DELAY1S:
MOV R5, #5
DL1: MOV R6, #200
DL2: MOV R7, #250
DL3: DJNZ R7, DL3
DJNZ R6, DL2
DJNZ R5, DL1
RET
END
4
评分标准
| 评分项 |
分值 |
评分标准 |
| 通道切换 |
30分 |
ADD-A/B/C 设置正确,8 路通道依次选中 |
| 数据缓冲 |
25分 |
8 路结果正确存入 30H~37H |
| 程序编写 |
25分 |
代码正确、规范,注释清晰 |
| 功能实现 |
10分 |
循环采集功能正常,各通道数据正确 |
| 实训报告 |
10分 |
报告内容完整、整洁 |
5
注意事项与安全规范
通道地址
ADD-A 为最低位,ADD-C 为最高位,切勿写反
采样间隔
相邻通道间应等待上一次转换完全结束后再切换
电源稳定
多路同时接入时确保电源电流充足,避免电压跌落
1
项目简介
本项目是 D/A 转换入门实验,使用 8 位双缓冲数模转换芯片 DAC0832,通过单缓冲工作方式向 DAC 写入数字量,输出对应模拟电压。学生可使用万用表测量输出端电压,验证数字量与模拟量的线性对应关系。
掌握本项目后,学生将理解 DAC0832 的内部结构、单缓冲与双缓冲工作方式,学会控制 CS、WR1、WR2、XFER 等信号完成一次 D/A 转换。
2
电路图
电路说明
- • P1 口接 DAC0832 数据口 D0~D7
- • P3.0=CS、P3.1=WR1,低电平有效
- • ILE 接 VCC,WR2 与 XFER 接地,构成单缓冲方式
- • 写入数字量 80H 后,输出端得到约 2.5V 模拟电压
3
程序内容(汇编语言)
;==================================================
; 项目名称:DAC0832 输出电压
; 芯片型号:STC89C52RC
; 时钟频率:12MHz
; 接口说明:
; P1 = DAC0832 数据口 D0~D7
; P3.0 = CS 片选信号(低电平有效)
; P3.1 = WR1 写信号 1(低电平有效)
; WR2、XFER 接地,ILE 接 VCC,单缓冲方式
; 功能说明:向 DAC0832 写入数字量 80H,输出约 2.5V 模拟电压
;==================================================
ORG 0000H ; 程序从复位向量开始
LJMP MAIN
; 主程序入口
MAIN: SETB P3.0 ; CS 无效,未选中 DAC0832
SETB P3.1 ; WR1 无效
MOV P1, #80H ; 数字量 80H(128/255 ≈ 2.5V)
; 产生一次写脉冲:CS=0, WR1=0→1,数据锁存到 DAC
CLR P3.0 ; CS=0 选中 DAC0832
CLR P3.1 ; WR1=0 打开输入锁存
NOP ; 保持足够脉宽
NOP
SETB P3.1 ; WR1 上升沿将数据锁存到 DAC 寄存器
SETB P3.0 ; CS=1 取消选中
SJMP $ ; 保持输出电压不变
END
4
评分标准
| 评分项 |
分值 |
评分标准 |
| 电路连接 |
25分 |
DAC0832 数据、控制线连接正确,单缓冲方式接线无误 |
| 控制时序 |
30分 |
CS、WR1 控制正确,锁存脉冲宽度符合要求 |
| 程序编写 |
25分 |
代码正确、规范,注释清晰 |
| 功能实现 |
10分 |
输出电压与数字量 80H 对应,误差在允许范围 |
| 实训报告 |
10分 |
报告内容完整、整洁 |
5
注意事项与安全规范
参考电压
VREF 通常接 +5V,输出电压范围为 0~VREF
单缓冲接线
ILE 接 VCC,WR2 与 XFER 接地,WR1 接单片机写控制
防止短路
IOUT1、IOUT2 外接运放时注意反馈电阻极性
1
项目简介
本项目学习使用 DAC0832 产生方波信号。通过交替向 DAC 写入数字量 00H 和 FFH,使输出电压在 0V 与接近 VREF 的高电平之间切换,形成方波。调节延时时间可以改变方波频率。
掌握本项目后,学生将理解如何利用 DAC 产生离散模拟波形,掌握方波发生器的基本编程方法,为后续三角波、锯齿波等函数信号发生器设计提供基础。
2
电路图
电路说明
- • P1 口接 DAC0832 数据口 D0~D7
- • P3.0=CS、P3.1=WR1,单缓冲方式
- • 程序交替写入 00H 和 FFH,输出 0V~5V 方波
- • 方波频率由软件延时控制
3
程序内容(汇编语言)
;==================================================
; 项目名称:DAC 锯齿方信号输出(方波)
; 芯片型号:STC89C52RC
; 时钟频率:12MHz
; 接口说明:同项目 03
; 功能说明:DAC0832 输出 0V / 5V 交替变化的方波
;==================================================
ORG 0000H ; 程序从复位向量开始
LJMP MAIN
; 主程序入口
MAIN: SETB P3.0 ; CS 无效
SETB P3.1 ; WR1 无效
; 循环输出方波
SQWAVE: MOV P1, #00H ; 数字量 00H,输出低电平
LCALL DAC_WRITE ; 写入 DAC
LCALL DELAY ; 延时决定半周期
MOV P1, #0FFH ; 数字量 FFH,输出高电平
LCALL DAC_WRITE ; 写入 DAC
LCALL DELAY ; 延时决定半周期
SJMP SQWAVE ; 循环
; DAC0832 单缓冲写子程序
; 入口:P1 已放置待转换的数字量
DAC_WRITE:
CLR P3.0 ; CS=0 选中芯片
CLR P3.1 ; WR1=0 打开锁存
NOP
NOP
SETB P3.1 ; WR1 上升沿锁存数据
SETB P3.0 ; CS=1 释放芯片
RET
; 延时子程序(约 1ms @12MHz)
DELAY: MOV R7, #250
DL: DJNZ R7, DL
RET
END
4
评分标准
| 评分项 |
分值 |
评分标准 |
| 方波生成 |
30分 |
能正确输出 0V~5V 方波,高低电平切换明显 |
| 频率调节 |
25分 |
通过修改延时参数能改变方波频率 |
| 程序编写 |
25分 |
代码正确、规范,注释清晰 |
| 功能实现 |
10分 |
示波器或 LED 能观察到稳定方波 |
| 实训报告 |
10分 |
报告内容完整、整洁 |
5
注意事项与安全规范
输出幅度
输出高电平幅度由 VREF 决定,注意不要超过运放电源范围
频率范围
软件延时产生的方波频率较低,适合低频信号发生
负载匹配
DAC 输出为电流型,需经运放转换为电压输出,避免直接大负载
1
项目简介
本项目学习使用 DAC0832 产生锯齿波信号。通过循环递增数字量从 00H 到 FFH,DAC 输出电压从 0V 线性上升至接近 VREF,然后迅速回到 0V 继续上升,形成周期性的锯齿波形。
掌握本项目后,学生将理解锯齿波发生器的软件实现原理,学会利用 DAC 输出连续变化的模拟量,为函数信号发生器、电机调速等应用奠定基础。
2
电路图
电路说明
- • P1 口接 DAC0832 数据口 D0~D7
- • P3.0=CS、P3.1=WR1,单缓冲方式
- • 程序循环递增数字量 00H~FFH,输出线性上升电压
- • 到达 FFH 后回到 00H,形成周期性锯齿波
3
程序内容(汇编语言)
;==================================================
; 项目名称:DAC 锯齿波信号输出
; 芯片型号:STC89C52RC
; 时钟频率:12MHz
; 接口说明:同项目 03
; 功能说明:DAC0832 输出 0V→5V 线性上升的锯齿波
;==================================================
ORG 0000H ; 程序从复位向量开始
LJMP MAIN
; 主程序入口
MAIN: SETB P3.0 ; CS 无效
SETB P3.1 ; WR1 无效
; 锯齿波主循环
SAWTOOTH:
MOV R0, #00H ; 数字量从 0 开始
SLOOP: MOV P1, R0 ; 将当前数字量送 DAC 数据口
LCALL DAC_WRITE ; 写入 DAC 输出
INC R0 ; 数字量加 1
CJNE R0, #0FFH, SLOOP ; 未到达最大值继续上升
SJMP SAWTOOTH ; 到达最大值后回到 0,形成周期锯齿波
; DAC0832 单缓冲写子程序
DAC_WRITE:
CLR P3.0 ; CS=0 选中芯片
CLR P3.1 ; WR1=0 打开输入锁存
NOP
NOP
SETB P3.1 ; WR1 上升沿将数据送入 DAC 寄存器
SETB P3.0 ; CS=1 释放片选
RET
END
4
评分标准
| 评分项 |
分值 |
评分标准 |
| 锯齿波生成 |
30分 |
输出电压从 0V 线性上升至 VREF,然后归零 |
| 线性度 |
25分 |
波形上升沿平滑线性,无明显台阶或抖动 |
| 程序编写 |
25分 |
代码正确、规范,注释清晰 |
| 功能实现 |
10分 |
示波器或万用表可观察到稳定锯齿波 |
| 实训报告 |
10分 |
报告内容完整、整洁 |
5
注意事项与安全规范
波形频率
锯齿波频率由循环执行时间决定,可通过插入 NOP 或延时调整
输出缓冲
建议在 DAC 输出后加电压跟随器,提高带负载能力
电源滤波
DAC 模拟电源端应加退耦电容,减小电源噪声对波形的影响
代码规范
锯齿波循环中注意边界值处理,确保 00H~FFH 全覆盖