您当前的位置:五五电子网电子知识单片机-工控设备STC单片机(STC1256xxAD 系列 MCU 的 A/D 转换程序 正文
STC1256xxAD 系列 MCU 的 A/D 转换程序

STC1256xxAD 系列 MCU 的 A/D 转换程序

点击数:7815 次   录入时间:03-04 11:48:27   整理:http://www.55dianzi.com   STC单片机(
//  ADC DEMO_56xx 程序演示 STC1256xxAD 系列 MCU 的 A/D 转换功能。时钟 18.432MHz
//  转换结果以 16 进制形式输出到串行口,可以用串行口调试程序观察输出结果。
//---------------------------------------------------------------------
#include "STC12C5620AD.H"
//---------------------------------------------------------------------
typedef    unsigned char   INT8U;
typedef    unsigned int    INT16U;
//---------------------------------------------------------------------
//以下选择 ADC 转换速率,只能选择其中一种
                        //          SPEED1 SPEED0  A/D转换所需时间
#define AD_SPEED   0x60 //0110,0000   1      1     270个时钟周期转换一次,
                        //                         CPU工作频率27MHz时,
                        //                         A/D转换速度约100KHz
//#define AD_SPEED   0x40 //0100,0000   1      0     540个时钟周期转换一次
//#define AD_SPEED   0x20 //0010,0000   0      1     810个时钟周期转换一次
//#define AD_SPEED   0x00 //0000,0000   0      0     1080个时钟周期转换一次
//---------------------------------------------------------------------
void initiate_RS232 (void);         // 串口初始化
void Send_Byte(INT8U one_byte);     // 发送一个字节
INT16U get_AD_result(INT8U channel);
void delay(INT8U delay_time);       // 延时函数
//---------------------------------------------------------------------
void main()
{
    INT16U ADC_10bit;

    initiate_RS232();               //波特率 = 9600

    ADC_CONTR |= 0x80;              //1000,0000 打开 A/D 转换电源
    while(1)
    {
        Send_Byte(0xAA);
        Send_Byte(0xAA);

        ADC_10bit = get_AD_result(2);//P1.2 为 A/D 当前通道
        Send_Byte(ADC_10bit >> 8);  //发送高 8 位测量结果
        delay(0x1);

        ADC_10bit = get_AD_result(3);//P1.3 为 A/D 当前通道, 测量并发送结果
        Send_Byte(ADC_10bit >> 8);  //发送高 8 位测量结果
        
        delay(0x30);                //延时
    }
}
//---------------------------------------------------------------------
void delay(INT8U delay_time)        // 延时函数
{
    INT16U n;
    while(delay_time--) 
    { 
        n = 6000;
        while(--n);
    }
}
//---------------------------------------------------------------------
void initiate_RS232 (void)          // 串口初始化
{
    ES = 0;                         // 禁止串口中断
    TMOD = 0x20;                    // 设置 T1 为波特率发生器
    SCON = 0x50;                    // 0101,0000 8位数据位, 无奇偶校验
    TH1 = 0xFB;                     // 18.432MHz 晶振, 波特率 = 9600
    TL1 = 0xFB;
    RI = 0;
    TR1 = 1;
    ES = 1;                         // 允许串口中断
}
//---------------------------------------------------------------------
void Send_Byte(INT8U one_byte)      // 发送一个字节
{
    TI = 0;                         // 清零串口发送中断标志
    SBUF = one_byte;
    while (!TI);
    TI = 0;                         // 清零串口发送中断标志
}
//---------------------------------------------------------------------
INT16U get_AD_result(INT8U channel)
{
    ADC_DATA   = 0;

    channel &= 0x07;                //0000,0111 清0高5位
    ADC_CONTR = AD_SPEED;
    ADC_CONTR = 0xE0;               //1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位
    ADC_CONTR |= channel;           //选择 A/D 当前通道

[1] [2]  下一页


本文关键字:程序  STC单片机(单片机-工控设备 - STC单片机(