ADC0809_AD转换器基本应用技术
- 格式:doc
- 大小:55.50 KB
- 文档页数:6
A/D转换器的功能是将模拟量电信号转换成数字量。
1. A/D转换器的主要参数1)分辨率:是指A/D转换器可转换成二进制数的位数。
例:若一个10位A/D转换器,去转换一个满量程为5V的电压,则它能分辨的最小电压为5000mV/210≈5mV。
2)转换时间指从输入启动转换信号开始到转换结束,得到稳定的数字输出量为止的时间。
其他参数与D/A转换器类似。
2. A/D转换器与CPU的接口方法1)A/D转换器与CPU连接的注意点①ADC转换好的数据必须经过三态缓冲器件与CPU数据总线相连接(在芯片内部没有三态输出缓冲器时);②为了输入正确的转换结果,必须解决好A/D转换器和CPU取数之间的时间配合问题。
2)ADC芯片的控制信号①启动转换信号(START):是由CPU提供给ADC芯片的,在正脉冲的下降沿转换开始;②转换结束信号(EOC):一旦启动转换,EOC立即变低,直至转换结束,EOC输出高电平,通知CPU转换已结束;③允许输出信号(OE):ADC转换结束后,转换结果存放在输出锁存器中,并没有送入数据总线上。
CPU取数时,发出OE信号选通芯片内部三态输出缓冲器将数据输出。
3)A/D转换器与CPU之间传送数据的方法①延时等待法图11. 4 延时等待法ADC接口电路图11. 5 查询法A DC接口电路是利用CPU执行一条输出指令,启动ADC转换,然后CPU执行延时程序,延时时间大于所选用的ADC芯片转换时间,延时结束,CPU执行输入指令,打开三态门获取ADC 转换好的数据。
参见图11.4。
②查询法查询法是由CPU来检查EOC信号。
当CPU启动ADC芯片开始转换之后,再通过状态端口读取EOC信号,检查ADC是否转换结束。
若转换结束,则读取转换结果,否则继续查询。
参见图11.5。
③中断法用中断法可提高CPU的利用率,当ADC转换结束,由EOC信号上升沿通过8259A中断控制逻辑向CPU发出中断请求,CPU响应中断在服务程序中读取结果。
目录引言 (1)1 ADC0809的逻辑结构 (1)1.1 ADC0809引脚结构 (1)1.2 ADC0809的主要性能指标 (3)1.3 ADC0809的内部逻辑结构 (3)1.4 ADC0809的时序 (4)2 ADC0809与MCS-51单片机的接口电路 (5)2.1 0809与51单片机的第一种连接方式 (7)2.2 0809与51单片机的第二种连接方式 (9)2.3 0809与51单片机的第三种连接方式 (10)3 ADC0809与单片机制作的数字电压表 (11)总结 (16)参考文献 (16)英文翻译 (17)ADC0809芯片的原理及应用摘要:ADC0809是8位逐次逼近型A/D转换器,是目前应用比较广泛、典型的A/D转换芯片之一。
本文主要介绍ADC0809芯片的内部逻辑结构、引脚分布,并详细阐述了其工作原理。
在此基础上设计了两种相关应用电路——ADC0809与单片机的接口电路及数字电压表,并对这两种应用电路的可行性进行了讨论。
通过对ADC0809应用电路的探究,能更全面的提高对应用系统的分析、设计能力,对实践具有重要的指导意义。
关键词:ADC0809;模数转换;单片机引言A/D转换器是模拟信号源与计算机或其它数字系统之间联系的桥梁,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机等数字系统进行处理、存储、控制和显示。
在工业控制和数据采集及许多其它领域中,A/D转换器是不可缺少的重要组成部分,它的应用已经相当普遍。
目前用软件的方法虽然可以实现高精度的A/D转换,但占用CPU时间长,限制了应用。
8位A/D转换器ADC0809作为典型的A/D转换芯片,具有转换速度快、价格低廉及与微型计算机接口简便等一系列优点,目前在8位单片机系统中得到了广泛的应用。
1 ADC0809的逻辑结构ADC0809是带有8位A/D转换器、8路模拟开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,是目前应用比较广泛的A/D转换芯片之一,主要适用于对精度和采样速率要求不高的场合或一般的工业控制领域,可以和单片机直接相连。
ADC0809 A/D转换器基本应用技术基本知识ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
(1).ADC0809的内部逻辑结构由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
(2).引脚结构IN0-IN7:8条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
数字量输出及控制线:11条ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。
D7-D0为数字量输出线。
CLK为时钟输入信号线。
因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,VREF(+),VREF(-)为参考电压输入。
2.ADC0809应用说明(1).ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。
模数转换器ADC0809应用原理模数转换器(Analog-to-Digital Converter,简称ADC)是一种将模拟信号转换为数字信号的电子元件。
在电子领域中,模数转换器有着广泛的应用,其中最常见的就是采集模拟信号,并将其转换为数字信号进行处理。
ADC0809是一种八位分辨率的8通道模数转换器,它可以将输入模拟信号转换为一个八位的二进制数字。
ADC0809的工作原理ADC0809采用了单倍增量逐次比较式ADC,其基本工作原理是,将输入的模拟信号与一个参考电压进行比较,输出相应的数字信号。
具体工作流程如下图所示:___________________________________ ________________________| 时钟||___________________________________________________________________|______________ ________ ________ ________ ________| 输入模拟信号 | | 比较器0 | | 比较器1 | | ...... | | 比较器7 ||_____________| _________ |________| |________| |________| |________|| | || || | ___________ | ___________ | ___________ || |__| |__|__||__|__| |__|| 串—并串—并串—并串—并八个比较结果反相器(INV)| ________ ________ ________|______________________________| 反相器| | 反相器 | | ...... | | 反相器 ||________| |________| |________| |________|| | | || | | || | | |V V V V____ ____ ________ ________ ________| | | | | ...... | | || D0 ~ D7 |_______| D0 ~ D7 |_______| D0 ~ D7 |_______| D0 ~ D7 ||____ _____| |________| |________| |________|| | | || | | || | | || | | || | | |____ ____ ________ ________ ________| | | | | ...... | | || 转换器 | | 转换器 | | ...... | | 转换器 | |____ _____| |________| |________| |________|| | | || | | || | | |V V V V____ ____ ________ ________ ________| | | | | ...... | | || A0 ~ A7 |_______| A0 ~ A7 |______| A0 ~ A7 |_______| A0 ~ A7 ||____ _____| |________| |________| |________| ADC0809采样过程通过时序的序列完成,当转换器满足转换条件时为转换器一个时钟等分周期“CLK R”,其转换过程又称为一次采样,转换结果产生在结束时取样“EOC”有效之后的下一次时钟上升沿ACTIVE EDGE时,由拨动设置开关的方式进行设定(ADDRESS A, B, C, OE)。
ADC0809模数转换芯片概述ADC0809是8位逐次逼近型A/D 转换器。
它由一个8路模拟开关、一个地址 锁存译码器、一个A/D 转换器和一个三态输出锁存器组成(见下图)。
多路开关 可选通8个模拟通道,允许8路模拟量分时输入,共用A/D 转换器进行转换。
三 态输出锁存器用于锁存A/D 转换完的数字量,当0E 端为高电平时,才可以从三 态输出锁存器取走转换完的数据。
ADC0809内部结构图ADC0809的工作原理图XX 是ADC0809的引脚图。
引脚功能说明如下:• IN0〜IN7: 8个输入通道的模拟输入端 • DO (2一8)〜D7 (2'1): 8位数字量输出端 • START :启动信号,加上正脉冲后,A/D 转换开始进行• ALE :地址锁存信号。
由低至高电平时,把三位地址信号送入通道号地址锁存器,并经译码器得到地址输出,以选择相应的模拟输入通道。
• EOC:转换结束信号,是芯片的输出信号。
转换开始后,EOC 信号变低: 转换结束时,EOC 返回高电平。
这个信号可以作为A/D 转换的状态信号 来査询,也可以直接用作中断请求信号。
• 0E :输出允许控制端(开数字星输出三态们)。
• CLK :时钟信号。
最高允许值为640kHzo地锁与码址存译8路二A/D____态 转输换----------------出器----------------存器▲ ▲IN3 EOCIN1DODiIN4 D2IN5D3D4D6 D7LVREFX*)VREFX-)8模 拟开 关• $EF+和%EF-:A/D 转换器的参考电压。
• Vcc-电源电斥。
由于是CMOS 芯片,允许电斥范鬧宽,可以是+5V 〜+15V 。
ADC0809两种封装形式8位模拟开关地址输入通道的关系见表XXo 模拟开关的作用和8选1的 CD4051作用相同表XX 8位模拟开关功能表ADDC ADDB ADDA 输入通道号 0 0 0 INO 0 0 1 INI 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4 1 0 1 IN5 1 1 0 IN6 111IN7ADC0809芯片的转换速度在最高时钟频率卞为lOOus 左右。
adc0809原理ADC0809是一款8位串行输入模数转换器(ADC),由National Semiconductor(现为德州仪器)开发和生产。
它的原理是将输入的模拟信号转换成对应的数字信号,用于数字系统的处理和分析。
ADC0809采用逐次逼近型模数转换技术,具有8个模拟输入通道,并且能完成8位精度的转换。
它的输入范围为0-5V,输入阻抗为100kΩ。
ADC0809包含一个8位逐次逼近型模数转换器、一个输入多路选择器、一个时钟驱动电路、一个控制逻辑和一个数据锁存器。
ADC0809的工作原理如下:首先,用户通过使用时钟信号来驱动转换器的工作。
时钟信号一般由控制器提供,控制器通过多个IO引脚向ADC0809发送指令信号。
时钟信号使得转换器按照指定的频率工作。
其次,输入模拟信号经过模拟开关输入,并通过输入多路选择器将选中的信号路径引入到采样保持电路中。
ADC0809的输入多路选择器可以选择8个不同的输入通道。
输入模拟信号经过采样保持电路后,被锁存并保持一段时间以进行后续处理。
然后,转换器根据锁存的模拟信号进行逐步逼近型模数转换。
逐序地,转换器首先将8位比较器的基准电压与DAC输出进行比较。
如果DAC输出高于基准电压,则比较器输出为高电平,否则为低电平。
比较器输出经过一个选择和存储逻辑单元(LCU),得到一个3位的二进制数,供数值控制逻辑(NCL)使用。
NCL 根据LCU的输出向DAC施加增量或减量,使得DAC输出逐渐逼近输入模拟量。
最后,转换器通过串行接口将转换后的数字结果通过数据锁存器传送到输出端,供控制器读取。
串行接口为8位的串行输出,由转换器的输出引脚提供。
转换后的数字结果可以进行进一步的数字处理和显示。
需要注意的是,ADC0809的转换精度和转换速率在一定程度上有一定的权衡。
为了提高转换精度,需要减小转换速率。
当转换速率较高时,转换精度可能会下降。
因此,在具体应用中需要根据需求选择合适的转换速率和精度。
电子教材-A-D 转换器ADC0809——设计制作简易仪器仪表ADC0809 是 8 通道的 8 位逐次逼近式 A/D 转换器,其引脚排列如图8-11所示。
由单一的 5V 电源供电,片内带有锁存功能的 8 选 1 的模拟开关。
由 C 、B 、A 的编码来决定所选的输入模拟通道。
D721ADD B 24ADD A 25ADD C 23VREF(+)12VREF(-)16IN31IN42IN53IN64IN75START 6D38EOC 7OE 9CLOCK 10VCC 11D620GND 13D114D215D017D418D519IN228IN127IN026ALE 22ADC0809转换时间为 100 µs 。
转换误差为 1/2LSB 。
ADC0809 的引脚功能如下: IN7~IN0: 模拟量输入通道。
ADDA 、ADDB 、ADDC : 模拟通道地址线,可选通IN0~IN7八通道中的一个通道进行转换,其输入与被选通的通道的关系见表8-1 。
表8-1 ADC0809 通道地址选择表地址码 对应的输入通道地址码 对应的输入通道C B A C B A 0 0 0 IN0 1 0 0 IN4 0 0 1 IN1 1 0 1 IN5 0 1 0 IN2 1 1 0 IN6 011IN3 111IN7 ALE : 地址锁存信号。
START : 转换启动信号,高电平有效。
D7~D0: 数据输出线。
OE : 输出允许信号,高电平有效。
CLK : 时钟信号,最高时钟频率为 640kHz 。
EOC : 转换结束状态信号。
上升沿后高电平有效。
图 8-11 ADC0809 引脚排列图。
ADC0809模数转换器的使用详解与程序作者:佚名来源:本站原创点击数:32 更新时间:2010年06月12日【字体:大中小】带我们的王老师刚评上硕导了,下学期开始带研究生了。
从他那里了解到每做一次实验或者实践,应该把它用规范的格式记录下来,一来自己可以日后查看,二来同学间可以相互交流,共通过进步,甚为必要。
现将本次实验记录如下。
实验名称:根据光强控制外围器件的通断。
实验原理;使用AD芯片将太阳能电池产生的光生伏打电压转化为数字信号,再通过单片机处理后,在数码管上显示电压,同时根据设定电压伐值,控制外围器件的通断。
实验所需的设备:51单片机烧写器一个,电脑一台,数字式示波器一个,数字式万用表一个实验所需的元件:太阳能电池一片,单片机一片,1k排阻一个,四位连体的数码管一个,排针若干排,导线,万用版一块,焊锡。
实验前的理论准备;能熟练使用51单片机,示波器,keil软件,isp下载软件,看懂AD0 809的英文pdf说明实验的难点:难点一就是AD0809芯片的使用。
难点二就是将AD0809产生的0~256的数字换算成0~5.000的精确度,而又不至于溢出出错。
难点三就是以上的理论准备全部系自学,呵呵下面着重说明AD0809的使用难点。
ADC0809是采样频率为8位的、以逐次逼近原理进行模—数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
1.主要特性1)8路8位A/D转换器,即分辨率8位。
2)具有转换起停控制端。
3)转换时间为100μs4)单个+5V电源供电5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度7)低功耗,约15mW。
2.内部结构ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图13.22所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近3.外部特性(引脚功能)ADC0809芯片有28条引脚,采用双列直插式封装,如图13.23所示。
一.实验要求利用实验板上的ADC0809做A/D转换器,利用实验板上的电位器W1提供模拟量输入.编制程序,将模拟量转换成二进制数字量,用发光二极管显示.二.实验目的1.掌握A/D转换与单片机的接口方法.2.了解A/D芯片ADC0809转换性能及编程.3.通过实验了解单片机如何进行数据采集.三.实验电路及连线CS0809接8000H. 模块电位器V-OUT点(即中心抽头)接至ADC0809的IN0(通道0).EOC 连P3.2(INT0).将单片机的P1.0~P1.7接至八位发光二极管L1 -- L8.四.实验说明ADC0809是八位逐次逼近法A/D转换器,每采集一次一般需100us.中断方式下,A/D转换结束后会自动产生EOC信号,经一级74LS14反向后与8031的INT0相接.本示例程序采取了中断处理来正确读取A/D转换的结果.用户也可以用延时来保证A/D转换完成.读取结果由P1口送至八位发光二极管显示.五.实验程序框图六.实验程序A_DPORT EQU 8000H ;0809通道0地址ORG 0000HLJMP STARTORG 0003HLJMP INT_0ORG 0040HSTART:MOV SP,#60HMOV R7,#0FFH ;初始化SETB IT0SETB EASETB EX0 ;INT0 允许A_D:MOV DPTR,#A_DPORTMOVX @DPTR,A ;启动A_DCJNE R7,#00H,$ ;等待A_D 转换结束CPL AMOV P1,A ;数据输出MOV R7,#0FFH ;清读数标志SJMP A_DINT_0:MOVX A,@DPTR ;读A_D 数据MOV R7,#00H ;置读数标志RETIEND。
实验二 使用ADC0809的A/D 转换实验一、实验目的加深理解逐次逼近法模数转换器的特征和工作原理,掌握ADC0809的接口方法以及A/D 输入程序的设计和调试方法。
二、预备知识逐次逼近法A/D 也称逐次比较法A/D 。
它由结果寄存器、D/A 、比较器和置位控制逻辑等部件组成,如图5-1所示。
图5-1三、实验内容1 、实验原理本实验采用 ADC0809 做 A/D 转换实验。
ADC0809 是一种8路模拟输入、8位数字输出的逐次逼近法A/D 器件,转换时间约100us ,转换精度为±1/512,适用于多路数据采集系统。
ADC0809片内有三态输出的数据锁存器,故可以与8088微机总线直接接口。
IN-026msb2-1212-220IN-1272-3192-418IN-2282-582-615IN-312-714lsb2-817IN-42E OC7IN-53ADD-A 25IN-64ADD-B 24ADD-C 23IN-75ALE22ref(-)16E NABL E 9ST ART 6ref(+)12CLOCK 10UB43ADC0809123UB42A 74L S02456UB42B 74L S02E B4122U/16VCB41103RB41510IORIOWVCCADD0ADD1ADD2GNDGNDGNDVre f+5VIN6IN7IN1IN2IN3IN4IN5D7D0D1D2D3D4D5D6E OC/EOCIN0CS_0809CLK_080912UA32A 74L S04WA5110K VCCGNDRA51100V1Y61MHZ图中ADC0809的CLK 信号接CLK=,基准电压Vref(+)接Vcc 。
一般在实际应用系统中应该接精确+5V ,以提高转换精度,ADC0809片选信号0809CS 和/IOW 、/IOR 经逻辑组合后,去控制ADC0809的ALE 、START 、ENABLE 信号。
ADC0809 A/D转换器基本应用技术
基本知识
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
(1).ADC0809的内部逻辑结构
由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
(2).引脚结构
IN0-IN7:8条模拟量输入通道
ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条
ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
数字量输出及控制线:11条
ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。
D7-D0为数字量输出线。
CLK为时钟输入信号线。
因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,
VREF(+),VREF(-)为参考电压输入。
2.ADC0809应用说明
(1).ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。
(2).初始化时,使ST和OE信号全为低电平。
(3).送要转换的哪一通道的地址到A,B,C端口上。
(4).在ST端给出一个至少有100ns宽的正脉冲信号。
(5).是否转换完毕,我们根据EOC信号来判断。
(6).当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
3.实验任务
如下图所示,从ADC0809的通道IN3输入0-5V之间的模拟量,通过ADC0809
转换成数字量在数码管上以十进制形成显示出来。
ADC0809的VREF接+5V电压。
4.电路原理图
图1.27.1
5.系统板上硬件连线
(1).把“单片机系统板”区域中的P1端口的P1.0-P1.7用8芯排线连接到“动态数码显示”区域中的A B C D E F G H端口上,作为数码管的笔段驱动。
(2).把“单片机系统板”区域中的P2端口的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1 S2 S3 S4 S5 S6 S7 S8端口上,作为数码管的位段选择。
(3).把“单片机系统板”区域中的P0端口的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端口上,A/D转换完毕的数据输入到单片机的P0端口
(4).把“模数转换模块”区域中的VREF端子用导线连接到“电源模块”区域中的VCC端子上;
(5).把“模数转换模块”区域中的A2A1A0端子用导线连接到“单片机系统”区域中的P3.4 P3.5 P3.6端子上;
(6).把“模数转换模块”区域中的ST端子用导线连接到“单片机系统”区域中的P3.0端子上;
(7).把“模数转换模块”区域中的OE端子用导线连接到“单片机系统”区域中的P3.1端子上;
(8).把“模数转换模块”区域中的EOC端子用导线连接到“单片机系统”区域中的P3.2端子上;
(9).把“模数转换模块”区域中的CLK端子用导线连接到“分频模块”区域中的/4 端子上;
(10).把“分频模块”区域中的CK IN端子用导线连接到“单片机系统”区域中的ALE 端子上;
(11).把“模数转换模块”区域中的IN3端子用导线连接到“三路可调压模块”区域中的VR1 端子上;
6.程序设计内容
(1).进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕,若完毕则把数据通过P0端口读入,经过数据处理之后在数码管上显示。
(2).进行A/D转换之前,要启动转换的方法:
ABC=110选择第三通道
ST=0,ST=1,ST=0产生启动转换的正脉冲信号
7.汇编源程序
CH EQU 30H
DPCNT EQU 31H
DPBUF EQU 33H
GDATA EQU 32H
ST BIT P3.0
OE BIT P3.1
EOC BIT P3.2
ORG 00H
LJMP START
ORG 0BH
LJMP T0X
ORG 30H
START: MOV CH,#0BCH
MOV DPCNT,#00H
MOV R1,#DPCNT
MOV R7,#5
MOV A,#10
MOV R0,#DPBUF
LOP: MOV @R0,A
INC R0
DJNZ R7,LOP
MOV @R0,#00H
INC R0
MOV @R0,#00H
INC R0
MOV @R0,#00H
MOV TMOD,#01H
MOV TH0,#(65536-4000)/256
MOV TL0,#(65536-4000) MOD 256 SETB TR0
SETB ET0
SETB EA
WT: CLR ST
SETB ST
CLR ST
WAIT: JNB EOC,WAIT
SETB OE
MOV GDATA,P0
CLR OE
MOV A,GDATA
MOV B,#100
DIV AB
MOV 33H,A
MOV A,B
MOV B,#10
DIV AB
MOV 34H,A
MOV 35H,B
SJMP WT
T0X: NOP
MOV TH0,#(65536-4000)/256
MOV TL0,#(65536-4000) MOD 256 MOV DPTR,#DPCD
MOV A,DPCNT
ADD A,#DPBUF
MOV R0,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P1,A
MOV DPTR,#DPBT
MOV A,DPCNT
MOVC A,@A+DPTR
MOV P2,A
INC DPCNT
MOV A,DPCNT
CJNE A,#8,NEXT
MOV DPCNT,#00H
NEXT: RETI
DPCD: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH,00H DPBT: DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,07FH
END
8.C语言源程序
#include
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f}; unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00}; unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};
unsigned char dispcount;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
unsigned char channel=0xbc;//IN3
unsigned char getdata;
void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%6;
TR0=1;
ET0=1;
EA=1;
P3=channel;
while(1)
{
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
getdata=P0;
OE=0;
dispbuf[2]=getdata/100;
getdata=getdata;
dispbuf[1]=getdata/10;
dispbuf[0]=getdata;
}
}
void t0(void) interrupt 1 using 0
{
TH0=(65536-4000)/256;
TL0=(65536-4000)%6;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount]; dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}。