8051单片机读ADC0808模数转换结果

发布时间 2023-09-18 02:55:05作者: 汀洲杜若

环境:在proteus中仿真。80C51用11.0592兆赫晶振。电路逻辑连接如下图。

 左上角用一个变阻器当信号输入。ADC0808是按照它手册里的典型应用框图连接的。

右下角是一个虚拟的串口,可以在proteus里看51发出来的数据。下面的程序每隔约一秒执行一次模数转换,将值通过串口发出来,灯用来指示有没有正常工作。

T0CT EQU 60H;定时器0自己用的计数器
ORG 00H
JMP START
ORG 03H
JMP ISR_INT0
ORG 0BH
JMP ISR_TIM0
START:
MOV T0CT,#0
MOV TMOD,#21H
MOV TL0,#0B0H;延时用,溢出一次大概50毫秒
MOV TH0,#3CH
MOV SCON,#40H
MOV A,#0FDH;波特率设置为9600bps
MOV TL1,A
MOV TH1,A
SETB IT0
SETB PX0;外部中断0的优先级高
SETB TR1
SETB TR0
MOV IE,#03H
SETB EA
JMP $;等待
ISR_INT0:;转换完了就把数据发出来
MOV DPTR,#7FF5H
MOVX A,@DPTR
MOV SBUF,A
RETI
ISR_TIM0:
MOV TL0,#0B0H;重装计数
MOV TH0,#3CH
INC T0CT
MOV A,T0CT
CJNE A,#20,ISR_RETI;如果一秒到了就执行转换
MOV T0CT,#0
MOV DPTR,#7FF5H
MOVX @DPTR,A
ISR_RETI:
RETI
END

非常简单。

我原来用6兆赫晶振仿真,数据老是不对,后来发现是波特率没设置好,其实总线上的信号还是正确的。EOC信号也可以直接接到IO引脚上,程序看它是不是从低电平退出了就行。