问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

51单片机并行I/O扩展应用——ADC0809

创作时间:
作者:
@小白创作中心

51单片机并行I/O扩展应用——ADC0809

引用
CSDN
1.
https://blog.csdn.net/weixin_73271965/article/details/145415769

ADC0809

管脚功能说明
(1)IN7~IN0:8路模拟量输入端.允许8路模拟量分时输入,共用一个A/D转换器.
(2)D7~D0:8位数字量输出. D7为最高位, D0为最低位.由于有三态输出锁存,可与主机数据总线直接相连.
(3)C、B、A:3位地址线即模拟量通道选择线.ALE为高电平时,地址译码与对应通道选择见表2-2 .
(4)ALE:地址锁存允许信号(Address Latch Enable),输入,高电平有效.上升沿时锁存3位通道选择信号.
(5)START:启动A/D转换信号,输入,高电平有效.上升沿时将转换器内部清零,下降沿时启动A/D转换.
(6)EOC(End of Convention):转换结束信号,输出,AD转换完成,EOC变为高电平.
(7)OE(Output Enable):输出使能信号,输入,高电平有效.该信号用来打开三态输出缓冲器,将A/D转换得到的8位数字量送到数据总线上.
(8)CLOCK:外部时钟脉冲输入端.当脉冲频率为640kHz时,A/D转换时间为100ms
(9)Vref+,Vref-:参考电压源正、负端.取决于被转换的模拟电压范围,通常Vref+ = +5V,Vref- = 0V
(10)Vcc:工作电源,+5V
(11)GND:电源地

ADC0809与单片机连接示意图

外部中断+三总线模式控制ADC0809

采样通道地址

以P2.7引脚为例→对应地址7FFFH
分析各个通道的地址:IN0到IN7的地址为7FF8H到7FFFH
对应下图的ABC连接A0 A1 A2,作为P0口复用地址线低8位的其中低3位
C B A 选中通道
0 0 0 IN0
0 0 1 IN1
0 1 0 IN2
0 1 1 IN3
1 0 0 IN4
1 0 1 IN5
1 1 0 IN6
1 1 1 IN7

ADC0809转换过程

ADC0809例题

ADC0809采集

①中断触发方式
💡例:ADC0809 IN1通道读取AD数据存储在内部RAM30H处

  
        ORG 0000H
        LJMP START 
        ORG 0013H
        LJMP INT1SUB
START:
        MOV SP ,#60H
        SETB IT1
        SETB EX1
        SETB EA
        MOV DPTR ,#7FF9
        MOVX @DPTR ,A ;启动A/D转换
        SJMP $
INT1SUB:
        MOVX A ,@DPTR
        MOV 30H A
        MOVX @DPTR ,A ;启动A/D转换
        RETI
END
  

②中断查询方式

  
        ORG 0000H  		;主程序入口地址
        AJMP MAIN 		;跳转主程序
        ORG 1000H 		;程序入口地址
MAIN:  
        MOV DPTR,#7FF8H 	;指向0809 IN0通道地址
        MOV R7,#08H
        MOVX @DPTR,A	;启动A/D转换
LOOP: 
        JNB P3.3,$		;EOC直接和P3.3相连(INT1引脚)
        MOVX  A,@DPTR      	;读A/D转换结果
        MOV @R0,A		;存数
        INC R0
        INC DPTR
        DJNZ  R7,LOOP
        SJMP $
END
  

💡例:ADC0809 ,对8个通道IN0-IN7进行模数转换 ,fosc = 6MHz,并将转换结果一次存储到内部RAM40H-47H中

  
        ORG 0000H
        LJMP MLOOP
        ORG INT1SUB
MLOOP:
        MOV SP ,#60H
        MOV R0 ,#40H
        MOV R7 ,#08H
        SETB IT1 ;边沿触发
        SETB EA
        SETB EX1
        MOV DPTR ,#7FF8H ;指向0809IN0通道地址
        MOVX @DPTR ,A ;启动A/D转换
        SJMP $ ;等待中断
INT1SUB:
        MOVX A ,@DPTR ;读A/D转换结果
        MOV @R0 ,A
        INC R0
        INC DPTR
        DJNZ R7 ,NEXT ;若未采完8次则NEXT
        CLR EX1
NEXT:
        MOVX @DPTR ,A ;启动A/D转换
        RETI
END
  

ADC0809+定时器

💡例:间隔1s采集一次,IN0采集AD数据存储在内部RAM30H中,使用定时器1方式1,外部中断1
定时100ms,计数初值为:X=15536=3CB0H

  
        ORG 0000H
        LJMP START
        ORG 0013H
        LJMP INT1SUB
        ORG 001BH
        LJMP T1SUB
START:
        MOV TH1 ,#3CH
        MOV TL1 ,#0B0H
        SETB TR1
        SETB ET1
        SETB EA
        MOV R2 ,#10
        SETB EX1
        SETB IT1 ;边沿触发
        MOVX DPTR ,#7FF8H
        SJMP $
T1SUB:
        MOV TH1 ,#3CH
        MOV TL1 ,#0B0H
        DJNZ R2 ,NEXT ;100ms跳过
        MOV R2 ,#10
        MOVX @DPTR ,A ;1s启动A/D转换
NEXT:
        RETI
INT1SUB:
        MOVX A ,@DPTR ;读A/D转换结果
        MOV 30H ,A
        RETI
END
  

💡例:并编写汇编代码,fosc=6MHz,每间隔1秒对AD0809八个AD通道IN0IN7进行模数转换,并将转换结果依次存储到内部RAM 的40H47H位置

![](https://wy-static.wenxiaobai.com/chat-rag-image/11329142306169174485)
  
        ORG 0000H
        LJMP START
        ORG 0003H
        LJMP INT0SUB
        ORG 000BH
        LJMP T0SUB
START:
        MOV SP ,#60H
        MOV TH0 ,#3CH
        MOV TL0 ,#0B0H
        SETB TR0
        SETB ET0
        SETB EA
        MOV R2 ,#10
        MOV R0 ,#40H
        MOV R7 ,#08H
        SETB EX0
        SETB IT0
        MOVX DPTR ,#0FF78H ;16个引脚只用到4个 A7 , A0,A1,A2 0111_1000
        SJMP $
T0SUB:
        MOV TH0 ,#3CH
        MOV TL0 ,#0B0H
        DJNZ R2 ,NEXT ;100ms跳过
        MOV R2 ,#10
        MOVX @DPTR ,A ;1s启动A/D转换
NEXTT0:
        RETI
INT0SUB:
        MOVX A ,@DPTR ;读A/D转换结果
        MOV @R0 ,A
        INC R0
        INC DPTR
        DJNZ R7 ,NEXTINT ;若未采完8次则NEXT
        MOVX DPTR ,#0FF78H
        MOV R7 ,#08H
        MOV R0 ,#40H
NEXTINTI:
        MOVX @DPTR ,A ;启动A/D转换
        RETI
END
  

ADC0809+定时器+串口

💡例:用ADC0809以100Hz的频率采集1个通道的模拟信号,并将获得的数字量,通过串口发送到计算机,串口工作方式1,波特率4800bps,fosc=11.0592MHz,10ms采集一次
定时器10ms,初值:2 16 − 10 × 1 0 − 3 1.08507 × 1 0 − 6 = 56320 2^{16}-\frac{10\times 10^{-3}}{1.08507\times 10^{-6}}=56320216−1.08507×10−610×10−3 =56320→ DC00H

  
        ORG 0000H
        LJMP START
        ORG 000BH
        LJMP T0SUB
        ;ORG 0023H
        ;LJMP TXSRV
        ORG 0003H
        LJMP INT0SUB
START:
        MOV SP ,#60H
        MOV TH1 ,#0F4H
        MOV TL1 ,#0F4H ;定时器1工作方式2 8位自动重装载作为串口波特率发生器
        MOV TMOD ,#21H ;定时器1方式2-波特率,定时器0定时1s方式1 16位.TMOD = 00100001
        MOV SCON ,#40H ;串口工作方式1
        SETB TR1
        MOV PCON ,#80H ;SMOD = 1
        MOV TH0 ,#0DCH
        MOV TL0 ,#00H ;fosc = 11.0592MHz 11059200/12=9216,65536-9216=DC00H
        SETB ET0
        SETB EA
        SETB EX0 ;外部中断0
        SETB IT0 ;边沿触发
        MOV DPTR ,#7FF8H ;AD地址通道0地址
        SJMP $
T0SUB:
        ;10ms进入定时器中断采样
        MOV TH0 ,#0DCH
        MOV TL0 ,#00H ;fosc = 11.0592MHz 11059200/12=9216,65536-9216=DC00H
        MOVX @DPTR ,A
        RETI
INT0SUB:
        MOVX A ,@DPTR
        MOV SBUF A
        JNB TI ,$ ;串口发送标志位查询方式
        CLR TI
        RETI
END
  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号