嵌入式计算机系统及实践实践相关课件4-模数转换器ADC0809扩展技术_第1页
嵌入式计算机系统及实践实践相关课件4-模数转换器ADC0809扩展技术_第2页
嵌入式计算机系统及实践实践相关课件4-模数转换器ADC0809扩展技术_第3页
嵌入式计算机系统及实践实践相关课件4-模数转换器ADC0809扩展技术_第4页
嵌入式计算机系统及实践实践相关课件4-模数转换器ADC0809扩展技术_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录Contents12345调试注意事项以及可能遇到的问题ADC0809简介MCS51与ADC0809的参考接口MCS51与ADC0809的接口实例实现代码实现与解读1、ADC0809简介

A/D转换器是模拟信号源与计算机或其它数字系统之间联系的桥梁,其任务是将连续变化的模拟信号转换为数字信号,以便计算机等数字系统进行处理、存储、控制和显示;在工业控制和数据采集及许多其它领域中,它是不可缺少的重要组成部分。目前用软件的方法虽然可以实现高精度的A/D转换,但占用CPU时间长,限制了应用。而作为典型的A/D转换芯片ADC0809,具有转换速度快、价格低廉及与微型计算机接口简便等一系列优点,目前在8位单片机系统中得到了广泛的应用。下面将介绍其的原理:ADC0809的性能指标:(1)具有转换起停控制端;(2)转换时间为100μs;(3)单个+5V电源供电;(4)低功耗,约15mW;(5)8路8位A/D转换器,即分辨率8位;(6)工作温度范围为-40~+85摄氏度;(7)模拟输入电压范围0~+5V,不需零点和满刻度校准。1、ADC0809简介

1、ADC0809简介

1、ADC0809简介

1、ADC0809简介

ADC的工作流程:1.送出模拟通道地址2.送出地址锁存信号3.启动ADC4.ADC开始工作EOC为低电平5.ADC转换结束,EOC拉高6.送出OE信号7.ADC输出转换结果8.CPU及时读走数据蓝色部分需要程序员操作,红色部分为ADC自动完成目录Contents12345调试注意事项以及可能遇到的问题ADC0809简介MCS51与ADC0809的参考接口MCS51与ADC0809的接口实例实现代码实现与解读2、MCS51与ADC0809的参考接口

通常,将ADC0809看作51单片机的外部RAM,是最常见的接口方案。这时,数据线对数据线、地址线对地址线的标准连接方式,如图2.2所示。由于ADC0809片内没有时钟,可利用单片机提供的地址锁存信号ALE经D触发器2分频后获得,ALE引脚的频率是单片机时钟频率的1/6,如果单片机时钟频率采用6MHz,则ALE引脚的输出频率为1MHz,再经过2分频后为500kHz,恰好符合0809对时钟的要求。在该硬件设计中,对于MCS51来说,外接的ADC0809相当于一个外扩的数据存储器,对数据存储器的写操作(MOVX),启动ADC工作,对数据存储器的读操作(MOVX),读出ADC的转换结果,P2.7对应地址位的最高位,这里要求是0,即保证P2.7输出低电平,即MOVX访问外部RAM的16位地址为0x0xxx,xxxx,xxxx,xxxx。2、MCS51与ADC0809的参考接口

或非门

2、MCS51与ADC0809的参考接口

2、MCS-51对ADC0809的控制时序

MCS51将ADC当做外部RAM,通过写(MOVX@DPTR,A)指令,选择通道,并启动ADC,下面给出具体实现的时序1.送出数据地址比如0x7ff82.锁存低三位地址,选择模拟通道3.启动ADC开始转换WR2、MCS-51对ADC0809的控制时序

MCS51将ADC当做外部RAM,通过读(MOVXA,@DPTR)指令,读出转换结果,下面给出具体实现的时序1.将OE置为高电平,ADC打开三态门,送出转换结果到数据线,P2.7需要为0。2.CPU从数据线P0口读走转换结果,最高位地址需要为0。2、MCS51与ADC0809的参考接口

由于ADC0809具有输出三态锁存器,其8位数据输出引脚可直接与数据总线连接。地址译码引脚C、B、A分别与地址总线的低3位A2、A1、A0相连,以选通INO-IN7中的一个通路。P2.7(地址线A15)作为片选信号端,在启动A/D转换时,由单片机的写信号WR和P2.7引脚信号控制ADC的地址锁存和转换启动,由于ADC的ALE信号与START信号接在一起,这样连接使得在信号的前沿写入(锁存)通道地址,紧接着在其后沿就启动转换。图2.3是有关信号的时间配合示意图。在读取转换结果时,用低电平的读信号RD和P2.7引脚经1级或非门后,产生的正脉冲作为OE信号,用以打开输出三态锁存器。ADC0809的转换结果寄存器在概念上定位为单片机外部RAM单元的一个只读寄存器,与通道号无关。因此读取转换结果时不必关心DPTR中的通道号如何,只需要注意,保证地址最高位为0,即P2.7为低电平就行。2、MCS51与ADC0809的参考接口

编程概要:MOVDPTR,#7FF8H;DPTR中的低三位地址为0,表示指向0809通道0MOVX@DPTR,A;端口地址送DPTR,P2.7=0,锁定通道0并启动转换,A寄存器的数据没啥用,实际上并没有真正写,只是给了一个写动作;注意:读写之间需要预留足够的时间,等待ADC转换完成,或者通过查询EOC的状态是否为1来开始读操作。MOVXA,@DPTR;读取转换结果此方式下单片机采用的是查询方式来控制ADC。2、MCS51与ADC0809的参考接口

外部中断1初始化编程程序如下:INADC:

SETBIT1;选择外中断为跳沿触发方式SETBEA;CPU开中断SETBEX1;外部中断0允许位MOVDPTR,#7FF8H;端口地址送DPTRMOVA,#00HMOVX@DPTR,A;启动0809对IN0通道转换„;完成其他工作

还可以采用中断方式的接口电路,只要把图2.2中的EOC引脚经过一非门接到单片机的INT1引脚上即可。采用中断方式可大大节省CPU的时间,当转换结束,EOC发出一个信号向单片机提出中断请求,单片机响应中断请求,由外部中断1的中断服务程序读A/D转换结果,并启动ADC0809的下一次转换,外部中断1采用跳沿触发方式。中断服务程序:PINT1:MOVDPTR,#7FF8H;读取A/D结果送内部RAM单元30HMOVXA,@DPTR;最高位地址需要为0,因为产生OE信号需要;MOV30H,AMOVA,#00H;启动对IN0的转换MOVX@DPTR,ARETI目录Contents12345调试注意事项以及可能遇到的问题ADC0809简介MCS51与ADC0809的参考接口MCS51与ADC0809的接口实例实现代码实现与解读3、MCS51与ADC0809的接口实例

3、MCS51与ADC0809的接口实例

查询方式参考代码:3、MCS51与ADC0809的接口实例

中断方式参考代码(汇编语言):3、MCS51与ADC0809的接口实例

中断方式参考代码(C语言,主程序):3、MCS51与ADC0809的接口实例

中断方式参考代码(C语言,中断服务程序):3、MCS51与ADC0809的接口实例

参考代码:在本实例中,ADC的A,B,C三个管脚固定接地,硬件只转换IN0通道的模拟输入,所以对读写的低三位地址没有要求,采用中断模式,将通道0的ADC转换结果通过P1口投射到八个LED灯上,转换结果越大,高位灯亮的越多,转换结果小,则亮低位LED。ORG0000H LJMPSTART ORG0003H LJMPEINT0 ORG0100H

;主程序START:

MOVR0,#30H

;设立数据存储区指针 MOVR2,#08H

;设置8路采样计数值 SETBIT0

;设置外部中断0为边沿触发模式 SETBEA ;CPU开放中断 SETBEX0 ;允许外部中断0中断LOOP:

MOVDPTR,#0000H ;送入口地址并指向IN0 MOVX@DPTR,A ;启动A/D转换,A的值无意义 LCALLDELAY ;延时,等待A/D转换完成 SJMPSTART 3、MCS51与ADC0809的接口实例

参考代码DELAY:

MOVR5,#050DELAYY:DJNZR5,DELAYY

RET ORG0200H ;中断服务程序EINT0: MOVXA,@DPTR ;读取转换后的数字量 MOV@R0,A ;存入片内RAM单元 MOVP1,A INCDPTR ;指向下一模拟通道 INCR0 ;指向下一个数据存储单元 DJNZR2,NEXT ;8路未转换完,则继续 CLREA ;已转换完,则关中断 CLREX0 ;禁止外部中断0中断 RETI ;中断返回NEXT: MOVX@DPTR,A ;再次启动A/D转换 RETI ;中断返回3、MCS51与ADC0809的接口实例

原理图3、MCS51与ADC0809的接口实例

结果图1:最小值3、MCS51与ADC0809的接口实例

结果图2:中间值3、MCS51与ADC0809的接口实例

结果图3:最大值3、MCS51与ADC0809的接口实例

结果图4:完整变化过程目录Contents12345调试注意事项以及可能遇到的问题ADC0809简介MCS51与ADC0809的参考接口MCS51与ADC0809的接口工作原理实现代码实现与解读4.实现代码实现与解读(需要更新一下版本)

本实例说明:将ADC对IN0模拟输入的转换结果,转换成数字,显示在八段码上。采用查询方式,P1.0-P1.7分别接LED的A-G,DP;P2.0-P2.3接LED的1,2,3,4。注意:这里段式LED用的LED是7SEG-MPX4-CA,共阳极管子。代码才能对应上,否则不能正确显示。4.实现代码实现与解读

注意:选择元器件时,不要选择预览图界面中标记了“NoSimulatorModel”的元器件,此时进行仿真Proteus会报错。请选择如右图所示的有仿真模型的元器件。不要选择标记了“NoSimulatorModel”的元器件!请选择Proteus中有仿真模型的元器件。4.实现代码实现与解读

注意:双击AT89C51,选择AdvancedProperties设置项中的SimulateProgramFetches,将后面的设置选为Yes。将时钟频率ClockFrequency改为10000Hz。4.实现代码实现与解读

注意:双击AT89C51,选择AdvancedProperties设置项中的SimulateProgramFetches,将后面的设置选为Yes。4.实现代码实现与解读

程序代码如下:ORG0000HLJMPSTARTORG040HSTART:MOVDPTR,#7FF8H;DPTR指向0808通道0

MOVX@DPTR,A;启动0808对IN0通道转换

LCALLDELAY;延时

MOVXA,@DPTR;读取A/D结果

MOV30H,A;将结果放到内部RAM单元30H

JMPNEXT

DELAY:

MOVR5,#050DELAYY:DJNZR5,DELAYY

RET4.实现代码实现与解读

程序代码如下:NEXT:MOVA,30H;

MOVB,#10;

DIVAB;

A÷B的商→A,余数→B

PUSHB;放入第一位,个位

MOVB,#10;

DIVAB;

PUSHB;放入第二位,十位

MOVB,#10;

DIVAB;

MOVA,B;百位放在A里;下面代码处理百位N30:

CJNEA,#0,N31;百位不为零,跳N31

MOVR2,#11000000B;如果为0,将显示0的LED控制字放R2,DP位和中间一杠不显示

JMPN20N31:

CJNEA,#1,N32;

MOVR2,#11001111B;1

JMPN20N32:CJNEA,#2,N33;

MOVR2,#10100100B;

JMPN20N33:CJNEA,#3,N34;

MOVR2,#10110000B;3

JMPN20N34:CJNEA,#4,N35;

MOVR2,#10011001B;4

JMPN20N35:CJNEA,#5,N36;

MOVR2,#10010010B;5

JMPN20N36:CJNEA,#6,N37;

MOVR2,#10000010B;6

JMPN204.实现代码实现与解读

程序代码如下:N37:CJNEA,#7,N38;

MOVR2,#11111000B;7

JMPN20N38:CJNEA,#8,N39;

MOVR2,#10000000B;8

JMPN20N39:MOVR2,#10010000B;9;下面代码处理十位N20:POPB;把十位弹出来

MOVA,B

CJNEA,#0,N21;

MOVR3,#01000000B;为0放R3

JMPN10N21:CJNEA,#1,N22;

MOVR3,#01001111B;1

JMPN10N22:CJNEA,#2,N23;

MOVR3,#00100100B;2对应的LED段显示,cf两个段灭,对应第3,6两位;高位应该为1,否则DP小数点会亮

JMPN10N23:CJNEA,#3,N24;

MOVR3,#00110000B;3

JMPN10N24:CJNEA,#4,N25;

MOVR3,#00011001B;4

JMPN10N25:CJNEA,#5,N26;

MOVR3,#00010010B;5

JMPN10N26:CJNEA,#6,N27;

MOVR3,#00000010B;6

JMPN104.实现代码实现与解读

程序代码如下:N27:CJNEA,#7,N28;

MOVR3,#01111000B;7

JMPN10N28:CJNEA,#8,N29;

MOVR3,#00000000B;8

JMPN10N29:MOVR3,#00010000B;9;下面代码处理个位N10:POPB;从堆栈弹出个位

MOVA,B

CJNEA,#0,N11;

MOVR4,#11000000B;若为0放R4

JMPLOOOPN11:CJNEA,#1,N12;

MOVR4,#11001111B;1

JMPLOOOPN12:CJNEA,#2,N13;

MOVR4,#10100100B;2

JMPLOOOPN13:CJNEA,#3,N14;

MOVR4,#10110000B;3

JMPLOOOPN14:CJNEA,#4,N15;

MOVR4,#10011001B;4

JMPLOOOPN15:CJNEA,#5,N16;

MOVR4,#10010010B;5

JMPLOOOPN16:CJNEA,#6,N17;

MOVR4,#10000010B;6

JMPLOOOP4.实现代码实现与解读

N17:CJNEA,#7,N18;

MOVR4,#11111000B;7

JMPLOOOPN18:CJNEA,#8,N19;

MOVR4,#10000000B;8

JMPLOOOPN19:MOVR4,#10010000B;9;下面代码将R2(百),R3(十),R4(个)中的数字以十进制的形式显示出来LOOOP:MOVP2,#00000010B;只显示第2位,对应百位

MOVP1,R2;显示第2位数,与下一行换一下执行顺序,就不闪了吧??

MOVP1,#11111111B;灭灯 MOVP2,#00000100B;只显示第3位,对应十位 MOVP1,R3;显示第3位数,R3中放着十位 MOVP1,#11111111B;灭灯 MOVP2,#00001000B;只显示第4位,对应个位 MOVP1,R4;显示第4位数,R4中放着个位

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论