51单片机AD89电路设计程序+原理图
- 格式:doc
- 大小:822.50 KB
- 文档页数:9
AT89S51单片机实验及实践系统板(以后简介系统板)集成多个硬件资源模块,每个模块各自可以成为独立的单元,也可以相互组合,因此,可以为不同阶层的单片机爱好者及单片机开发者提供不同的开发环境。
每个硬件模块介绍如下:1.继电器控制模块系统板上提供了2路继电器控制模块,分布在系统板的最左上端区域中,输入信号由Realy in 1和Realy in 2端口输入分别控制两路继电器,继电器控制的信号分别由最上端的两个插针输入和输出。
分别称为“com1 open1 short1”,“com2 open2 short2”,由于这个两个继电器是单刀单掷控制,当继电器不吸合时,“com1”和“short1”相通,“com2”和“short2”相通;当继电器吸合时,“com1”和“open1”相通,“com2”和“open2”相通。
其电路原理图1.1所示:2.参考电压源模块在系统板上写有“参考电压源”区域中,是由TL431来完成参考电压的调节,调节范围在0-2.50V之间;主要为是系统板上需要参考电压芯片或是为外部设备提供参考电压,由Var Vref Out端口输出。
其电路原理图如图1.2所示:图1.23.三路可调电压模块此模块主要是用于提供0-5V之间的可变的模拟电压值,即可以作为参考电压源也可以作为模拟电压信号。
这三路是相互独立的。
分别对应着由VR1,VR2,VR3端口输出。
具体的电路原理图如图1.3所示:图1.34.电源模块电源模块为系统板上其它模块提供+5V电源,电源输入有两种方式,一种为交直流电源从电源插座输入,输入的电压要求,直流输入应大于7.5V,交流输入应大于5V,通过7805三端稳压器得到5V的直流电源供给系统其它模块工作,另一种为从USB接口获取+5V电源,只要用相应配套的USB线从电脑主机获取+5V直流电源,在电源模块中加有保护电路,即电路中有短路,不会对7805三端稳压器及电脑主机电源有损害!其电路原理图如图1.4所示:5.程序下载模块该模块完成源程序代码下载到AT89S51或者是AT89S52芯片中,它需要和微机上的ISP下载器软件配合使用来完成这样的功能。
自制STC8952/STC8951下载器AT89S52/AT89S51最小系统原理图STC89C52由于价格低,性价比高,烧录程序方便等优势,收到越来越多人的青睐。
下边是一个自制STC89C52最小系统/烧录器的原理图。
如有需要请看这里:/auction/item_detail.htm?item_num_id=89 88890168如有需要请看这里:/auction/item_detail.htm?item_num_id=89 88890168图分为6个部分:1. 最小系统的核心部分(CPU)2. 阻容复位电路3. USB供电电路,8*8自锁开关以及USB公头组成,加自锁开关是方便烧录程序使芯片断电再上电4. 电源指示电路,标识系统板是否上电5. ISP接口,方便AT89S52/AT89S51芯片烧录程序6. 串口通信电路,为STC89C52/C51收录程序,或者与PC机串口通信,或者显示调试信息STC89C52/STC89C51下载器图文教程一、下载器介绍如果只想学习下载方法请直接跳到第三节,这里的介绍只是为接下来的硬件连接做准备STC89C51/STC89C52符合8051的架构,与AT89S51/AT89S52等51芯片的指令完全兼容,并且具有价格适中,性能稳定,性价比高,程序烧录方便等特点,很适合初学者使用,同时也广泛应用于产品的开发。
STC系列的芯片采用串口通信的方式来烧录编译好的文件。
根据自己在开发中积累的经验,结合目前常用的几种烧录方式,设计了一种操作简单并且可以灵活扩展的STC下载器。
如果有需要的可以在这里购买/auction/item_detail.htm?item_num_id=3197118340套件地址:/auction/item_detail.htm?item_num_id=8988890168如下图:正面图背面图二、接口详细介绍J1--------串口 J2--------USB 供电接口 J3--------51或AVR 选择J4--------TTL下载线接口 J5--------片外RAM扩展接口 J6--------5V直流电源接口(内正外负)J7--------MAX使能跳线 K1--------电源开关 K2--------51复位按键K3--------ATMega16复位按键 Y1--------可更换的晶振 P1--------I/O口P0端口P1--------I/O口P1端口 P2--------I/O口P2端口 P3--------I/O口P3端口TTL以及外部RAM扩展接口ISP接口引脚定义所有IO口都采用双排引出,可以做为最小系统使用,兼容at89s52/s51等芯片;预留TTL接口,方便连接USB转TTL下载线;预留有ISP接口,可以接ISP下载器给AT89S52/S51烧录程序;支持AVR转51转接板;使用晶振座子,晶振可以根据自己的需要更换;使用USB供电;预留有标准电源接口,可以直接接5V直流电源使用。
AD0809在51单片机中的应用我们在做一个单片机系统时,常常会遇到这样那样的数据采集,在这些被采集的数据中,大部分可以通过我们的I/O口扩展接口电路直接得到,由于51单片机大部分不带AD转换器,所以模拟量的采集就必须靠A/D或V/F实现。
下现我们就来了解一下AD0809与51单片机的接口及其程序设计。
1、AD0809的逻辑结构ADC0809是8位逐次逼近型A/D转换器。
它由一个8路模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成(见图1)。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
2、AD0809的工作原理IN0-IN7:8条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A, B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
C B A 选择的通道0 0 0 IN00 0 1 IN10 1 0 IN20 1 1 IN31 0 0 IN41 0 1 IN51 1 0 IN61 1 1 IN7数字量输出及控制线:11条ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
AD0809在51单片机中的应用我们在做一个单片机系统时,常常会遇到这样那样的数据采集,在这些被采集的数据中,大部分可以通过我们的I/O口扩展接口电路直接得到,由于51单片机大部分不带AD转换器,所以模拟量的采集就必须靠A/D或V/F实现。
下现我们就来了解一下AD0809与51单片机的接口及其程序设计。
1、AD0809的逻辑结构ADC0809是8位逐次逼近型A/D转换器。
它由一个8路模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成(见图1)。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
2、AD0809的工作原理IN0-IN7:8条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A, B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
C B A 选择的通道0 0 0 IN00 0 1 IN10 1 0 IN20 1 1 IN31 0 0 IN41 0 1 IN51 1 0 IN61 1 1 IN7数字量输出及控制线:11条ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
AD0809在51单片机中的应用
我们在做一个单片机系统时,常常会遇到这样那样的数据采集,在这些被采集的数据中,大部分可以通过我们的I/O口扩展接口电路直接得到,由于51单片机大部分不带AD转换器,所以模拟量的采集就必须靠A/D或V/F实现。
下现我们就来了解一下AD0809与51单片机的接口及其程序设计。
1、AD0809的逻辑结构
ADC0809是8位逐次逼近型A/D转换器。
它由一个8路模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成(见图1)。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
2、AD0809的工作原理
IN0-IN7:8条模拟量输入通道
ADC0809对输入模拟量要求:信号单极性,电压围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条
ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道
的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
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
数字量输出及控制线:11条
ST为转换启动信号。
当ST上跳沿时,所有部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。
D7-D0为数字量输出线。
CLK为时钟输入信号线。
因ADC0809的部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,
VREF(+),VREF(-)为参考电压输入。
3、ADC0809应用说明
(1).ADC0809部带有输出锁存器,可以与AT89S51单片机直接相连。
(2).初始化时,使ST和OE信号全为低电平。
(3).送要转换的哪一通道的地址到A,B,C端口上。
(4).在ST端给出一个至少有100ns宽的正脉冲信号。
(5).是否转换完毕,我们根据EOC信号来判断。
(6).当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
4、AD0809的应用
了解完A/D转换芯片,下面我们以图2为例来完成它的程序设计。
电路说明:
电路见图(2),主要由AD转换器AD0809,频率发生器SUN7474,单片机AT89S51及显示用数码管组成。
AD0809的启动方式为脉冲启动方式,启动信号START启动后开始转换,EOC信号在START的下降沿10us后才变为无效的低电平。
这要求查询程序待EOC无效后再开始查询,转换完成后,EOC输出高电平,再由OE变为高电平来输出转换数据。
我们在设计程序时可以利用EOC信号来通知单片机(查询法
或中断法)读入已转换的数据,也可以在启动AD0809后经适当的延时再读入已转换的数据。
AT89S51的输出频为晶振频的1/6(2MHZ),AT89S1与SUN7474连接经与7474的ST脚提供AD0809的工作时钟。
AD0809的工作频围为10KHZ-1280KHZ,当频率围为500KHZ时,其转换速度为128us。
AD0809的数据输出公式为:Dout=Vin*255/5=Vin*51,其中Vin为输入模拟电压,Vout
为输出数据。
当输入电压为5V时,读得的数据为255再乘以2,得510。
我们用510*98%得499,再将百位数码管的小数点点亮,显示为4.99V,显示值与输入值基本吻合。
软件设计思路及程序流程
编程思路:
(1)向AD0809写入通道号并启动转换
(2)延时1ms后等待EOC出现高电平(JNB EOC,$)
(3)给OE置高并读入转换数据存入数据地址或数组中。
(4)显示
(5)
初始化
1、写入通道号
2、延时20us后等待EOC变高
3、读入采集到的数据并存入数组存入下一通道
#include<at89x51.h>
#define ucharunsigned char
#define uint unsigned int
sbit st=P3^2;
sbit oe=P3^1;
sbit eoc=P3^0;
uchar codetab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//数码管显示段码ucharcode td[]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70};//通道先择数组
uint ad_0809,ad_data1,ad_data2,ad_data3,ad_data0;
uchar m,number;
uchar x[8];//八通道数据待存数组
void delaynms(uint x);//nms延时程序
void display();//显示程序
void ad0809();//芯片启动程序
voidkey();//键扫描程序
main()
{
number=1;
P1=0x00;
while(1)
{
ad0809();//调AD0809启动子程序
key();//调按键子程序
ad_0809=x[number];//把相关通道数据给ad_0809,用做显示
display();//调显示
}}
//nms延时程序
voiddelaynms(uint x)
{
uchari;
while(x-->0)
{
for(i=0;i<125;i++)
{;}}}
void display()
{
uchar a;
ad_data1=(ad_0809*49/25)/100;//读得的数据乘以2再乘以98%除以100得百位
ad_data2=((ad_0809*49/25)%100)/10;//读得的数据乘以2再乘以98%再分出十位
ad_data3=(((ad_0809*49/25)%100)%10);//读得的数据乘以2再乘以98%再分出个位
for(a=0;a<10;a++)
{
P0=tab[ad_data3];//送小数点后第二位显示
P2=0x07;//选通第一个数码管
delaynms(3);
P0=tab[ad_data2];//送小数点后第一位显示
P2=0x0b;//选通第二个数码管
delaynms(3);
P0=tab[ad_data1];//送整数显示
P0_7=0;//点亮第三个数码管小数点
P2=0x0d;//选通第三个数码管
delaynms(3);
P0=tab[number];//送通道号显示
P2=0x0e;
delaynms(3);
}}
void ad0809()
{
uchari,m=1;
for(i=0;i<8;i++)
{
P0=td[i];//选通通道
oe=0;
//OE:输出允许信号;
//用于控制三态输出锁存器向单片机输出转换得到的数据。
OE=0,输出数据线呈高电阻;OE=1,输出转换//得到的数据;
//以下三条指令为起动AD0809
//注:st与ALE连载一起
//ALE为地址锁存允许输入线,当ALE=1,地址锁存与译码器将A,B,C三条
//地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行
//转换。
st=0; //ST为转换启动信号。
st=1;//当ST上跳沿时,所有部寄存器清零;
st=0; //下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
delaynms(1);// EOC信号在START的下降沿10us后才变为无效的低电平。
while(!eoc);//等待转换结束,转换完成后,EOC输出高电平,
oe=1;//取出读得的数据,OE变为高电平来输出转换数据
x[m]=P2;//送相关通道数组
oe=0;
m++;
}}
void key()
{
if(!P3_5)//P3.5是否按下
{
delaynms(20);//延时去抖动判误
if(!P3_5)//再一次判断P3。
5是否按下
{
while(!P3_5);//等待P3。
5为高电平,按键松开
number++;//通道号显示加一
if(number>8)number=1;//八通道
}}}。