2025-11-08 05:56:35
编写C51程序做AD转换,首先要让单片机连接模拟信号源,用ADC模块把模拟电压变成数字量。接着写初始化代码设置ADC参数,比如通道选择、转换速率和参考电压。然后启动转换,等待转换完成标志位翻转后读取数据,用LED或串口显示结果。仿真时要在Proteus里搭电路,把模拟信号源接到ADC输入,用虚拟仪器看波形和数值是否正常。
为什么这样做?因为ADC转换需要时间,比如12位ADC典型转换时间是1微秒,必须等数据稳定才能读。设置参考电压直接影响量程,比如Vref=2.4V时,输入0-2.4V电压对应0-4095数字值。仿真能省去硬件调试时间,Proteus里的虚拟电压源可以调0-5V模拟信号,配合ADC模块实时显示数据。数据手册说ADC0804的采样周期最小1μs,若代码没延时会导致数据不准。比如这段代码:
void ad_init
ADCFG|=0x80; //设置Vref=VDD
ADCFG&=0x7F; //选择通道0
ADTRIG=0x01; //软件触发
初始化后启动转换ADST=1,等ADIF=1时读取AD数据。仿真时若AD数据乱码,可能是采样时间太短或参考电压没接对。测试发现当模拟信号1秒内波动超过ADC分辨率1/2(12位是0.012V)时,转换结果会出现跳动。所以代码里要加延时,比如ADCON=0x80后等10μs再读数据。
本题链接: