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

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位

CBA选中通道
000IN0
001IN1
010IN2
011IN3
100IN4
101IN5
110IN6
111IN7

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通道IN0~IN7进行模数转换,并将转换结果依次存储到内部RAM 的40H~47H位置

在这里插入图片描述

		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}}=56320 2161.08507×10610×103=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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值