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

基于51单片机ADC0809的基础使用

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

基于51单片机ADC0809的基础使用

引用
CSDN
1.
https://blog.csdn.net/qq_40598185/article/details/80343378

ADC0809是一种常用的模数转换器芯片,广泛应用于各种电子设备中。本文将详细介绍如何使用51单片机与ADC0809进行模数转换,包括芯片的引脚功能、时序图以及具体的程序代码。

系统框架图

ADC0809引脚功能

  1. IN(0~7):模拟信号输入通道,可以选择0~7脚进行采集。
  2. ADD(A~C):用于选择模拟通道输入口的地址线。
  3. START:启动转换信号输入端,当有一个脉冲输入时,ADC0809开始转换。
  4. ALE:地址锁存允许输入端,当有一个正脉冲输入时,所选的ADD(A~C)会被锁存到芯片里。
  5. EOC:转换结束输出端,当ADC0809处于转换期或没有工作时处于低电平状态,转换成功时变为高电平。
  6. 2^(-1~-8):数据输出端,从MSB到LSB分别对应的是(128,64......1)。
  7. OUTPUT ENABLE:输出使能端,低电平时输出呈高阻态,高电平时数据输出。
  8. CLOCK:时钟信号输入端,频率范围为10KHz到640KHz。
  9. V_REF+:正基准电压输入端,通常接5V。
  10. V_REF-:负基准电压输入端,通常接地。
  11. VCC:电源输入端,接+5V。
  12. GND:接地端。

时序图

从时序图可以看出,程序中需要先写地址,然后装载地址,再启动START。当EOC为高时,启动OUTPUT ENABLE,数据输出,单片机读数据。

程序代码

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit ADDA=P1^0;               // 地址A
sbit ADDB=P1^1;               // 地址B
sbit ADDC=P1^2;               // 地址C
sbit START_ALE=P1^4;          // 地址装载,转换启动脚
sbit OE=P1^5;                 // 输出使能
sbit EOC=P1^6;                // 转换标志位
sbit key_start=P3^2;          // 开始转换按键
sbit key_end=P3^3;            // 停止转换按键

uchar ADC_Date=0;
uint i;

void ADC_START()              // ADC转换开始函数
{
    START_ALE=1;              // 一个正脉冲
    START_ALE=0;
    while(!EOC);
    OE=1;
}

void usart_timer_init()       // 串口初始化,定时器初始化
{
    TMOD=0x22;                // 定时器1,定时器0都设为方式2
    TH1=253;
    TL1=253;
    TH0=131;
    TL0=131;
    TR1=1;                    // 开定时器1
    REN=0;                    // 不开启串口接收
    SM0=0;                    // 波特率不加倍,且为方式 1
    SM1=1;
    EA=1;                     // 开总中断
} 

void key_scan()               // 按键扫描函数
{
    if(key_start==0)
    {
        ET0=1;
        TR0=1;
        while(1)
        {
            if(key_end==0)
            {
                ET0=0;
                TR0=0;
                break;
            }
        }         
    }
}

void main()
{
    ADDA=0;
    ADDB=0;
    ADDC=0;
    START_ALE=0;
    usart_timer_init(); 

    while(1)
    {
        key_scan();  
    }
}

void pick() interrupt 1       // 定时器0中断服务函数
{
    ADC_START();
    ADC_Date=P0;
    SBUF=ADC_Date;
    while(!TI);
    TI=0;
    OE=0;
}  

总结

本文详细介绍了51单片机与ADC0809的连接和使用方法,包括硬件连接、时序控制和软件编程。通过本文的学习,读者可以掌握基本的模数转换技术,为后续的电子项目开发打下基础。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号