STC12C5A60S2 ADC查询方式

发布者:创新驿站最新更新时间:2019-05-22 来源: eefocus关键字:STC12C5A60S2  ADC  查询方式 手机看文章 扫描二维码
随时随地手机看文章

/*------------------------------------------------------------------*/
/* --- STC MCU Limited ---------------------------------------------*/
/* --- STC12C5Axx Series MCU A/D Conversion Demo -------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------*/
/* If you want to use the program or the program referenced in the  */
/* article, please specify in which data and procedures from STC    */
/*------------------------------------------------------------------*/


#include "reg51.h"
#include "intrins.h"


#define FOSC    18432000L
#define BAUD    9600


typedef unsigned char BYTE;
typedef unsigned int WORD;


/*Declare SFR associated with the ADC */
sfr ADC_CONTR   =   0xBC;           //ADC control register
sfr ADC_RES     =   0xBD;           //ADC high 8-bit result register
sfr ADC_LOW2    =   0xBE;           //ADC low 2-bit result register
sfr P1ASF       =   0x9D;           //P1 secondary function control register


/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER   0x80            //ADC power control bit
#define ADC_FLAG    0x10            //ADC complete flag
#define ADC_START   0x08            //ADC start control bit
#define ADC_SPEEDLL 0x00            //420 clocks
#define ADC_SPEEDL  0x20            //280 clocks
#define ADC_SPEEDH  0x40            //140 clocks
#define ADC_SPEEDHH 0x60            //70 clocks


void InitUart();
void InitADC();
void SendData(BYTE dat);
BYTE GetADCResult(BYTE ch);
void Delay(WORD n);
void ShowResult(BYTE ch);


void main()
{
    InitUart();                     //Init UART, use to show ADC result
    InitADC();                      //Init ADC sfr
    while (1)
    {
        ShowResult(0);              //Show Channel0
        ShowResult(1);              //Show Channel1
        ShowResult(2);              //Show Channel2
        ShowResult(3);              //Show Channel3
        ShowResult(4);              //Show Channel4
        ShowResult(5);              //Show Channel5
        ShowResult(6);              //Show Channel6
        ShowResult(7);              //Show Channel7
    }
}


/*----------------------------
Send ADC result to UART
----------------------------*/
void ShowResult(BYTE ch)
{
    SendData(ch);                   //Show Channel NO.
    SendData(GetADCResult(ch));     //Show ADC high 8-bit result


//if you want show 10-bit result, uncomment next line
//    SendData(ADC_LOW2);             //Show ADC low 2-bit result
}


/*----------------------------
Get ADC result
----------------------------*/
BYTE GetADCResult(BYTE ch)
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
    _nop_();                        //Must wait before inquiry
    _nop_();
    _nop_();
    _nop_();
    while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC


    return ADC_RES;                 //Return ADC result
}


/*----------------------------
Initial UART
----------------------------*/
void InitUart()
{
    SCON = 0x5a;                    //8 bit data ,no parity bit
    TMOD = 0x20;                    //T1 as 8-bit auto reload
    TH1 = TL1 = -(FOSC/12/32/BAUD); //Set Uart baudrate
    TR1 = 1;                        //T1 start running
}


/*----------------------------
Initial ADC sfr
----------------------------*/
void InitADC()
{
    P1ASF = 0xff;                   //Open 8 channels ADC function
    ADC_RES = 0;                    //Clear previous result
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
    Delay(2);                       //ADC power-on and delay
}


/*----------------------------
Send one byte data to PC
Input: dat (UART data)
Output:-
----------------------------*/
void SendData(BYTE dat)
{
    while (!TI);                    //Wait for the previous data is sent
    TI = 0;                         //Clear TI flag
    SBUF = dat;                     //Send current data
}


/*----------------------------
Software delay function
----------------------------*/
void Delay(WORD n)
{
    WORD x;


    while (n--)
    {
        x = 5000;
        while (x--);
    }
}

关键字:STC12C5A60S2  ADC  查询方式 引用地址:STC12C5A60S2 ADC查询方式

上一篇:printf 函数在keil2 中的使用
下一篇:STC12C5A60S2 ADC中断方式

推荐阅读最新更新时间:2024-11-03 11:37

理解热插拔技术:热插拔保护电路设计过程实例
   引言   服务器、网络交换机、冗余存储磁盘阵列(RAID),以及其它形式的通信基础设施等高可用性系统,需要在整个使用生命周期内具有接近零的停机率。如果这种系统的一个部件发生了故障或是需要升级,它必须在不中断系统其余部分的情况下进行替换,在系统维持运转的情况下,发生故障的电路板或模块将被移除,同时替换部件被插入。这个过程被称为热插拔(hot swapping)(当模块与系统软件有相互作用时,也被称为hot plugging1)。为了实现安全的热插拔,通常使用带交错引脚的连接器来保证地与电源的建立先于其它连接,另外,为了能够容易的从带电背板上安全的移除和插入模块,每块印制板(PCB)或热插拔模块都带有热插拔控制器2。在工作状
[模拟电子]
STM32F0单片机 PWM + ADC 控制有刷电机介绍
1.有刷电机驱动电路 有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。 下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs
[单片机]
模数转换器的电源去耦问题解析
模数转换器的电源去耦问题解析 尽管高速ADC给电源带来的总负载是稳定的,但需要电流以ADC采样速率和此频率的谐波快速跳变。由于电路板和走线的电感会限制电源能够迅速提供的电流量,因此ADC所需的高频电流是由板电源去耦电容提供的。为高速ADC供电时,应同时采用大的电源去耦电容和局部(ADC引脚处)去耦电容。大去耦电容存储电荷以对电源层和局部去耦电容充电,局部去耦电容则提供ADC所需的高频电流。有效的去耦还能将高频电源瞬变限制在距离产生瞬变的IC非常近的区域,从而使电路板上产生的电磁辐射 (EMI) 降至最小。 一般而言,应为每个ADC电源轨至少提供一个大去耦电容。这些电容应当是10uF至22uF范围内的低ESR陶瓷或钽电容
[模拟电子]
基于惠斯顿电桥的压力传感器方案应用
所有类型的传感器在过去几年中都有了很大发展,而且与之前的产品相比,更加精确也更稳定。有的时候,这些传感器使用起来并不简单。 面向这些传感器的调节电路设计师,经常发现此类电路的开发多少有些令人头疼。然而,只需少量基础知识并使用新的在线传感器设计工具,这个过程面临的很多挑战都能够迎刃而解。 虽然现在市面上有多种传感器,但压力传感器最为常见。因此,本文将讨论基于惠斯顿电桥压力传感器的基本工作原理,以及用于转换这种桥传感器输出的处理电路,包括偏移和增益校准。 基于惠斯顿电桥的压力传感器 许多压力传感器使用微机电系统(MEMS)技术,它们由4个采用惠斯顿电桥结构连接的压敏电阻组成。当这些传感器上没有压力时,桥中的所有电阻值都
[嵌入式]
12位ADC输出变化率高达500ksps
  凌力尔特推出引脚和软件都兼容的单/双通道 12 位模数转换器 (ADC) LTC2302 和 LTC2306。这两款 ADC 都通过 SPI 兼容串行接口通信,输出变化率达 500ksps。LTC2302 测量单个差分输入通道,适用于测量桥式传感器。LTC2306 含有内部多路复用器和测量两个单端或一个差分输入通道。LTC2302 和 LTC2306 与 12 位、500ksps、8 通道 ADC LTC2308 是软件兼容的,因此在测量 1、2 或 8 个模拟通道的应用之间移植代码容易。   LTC2302/LTC2306 用单 5V 电源工作,在 500ksps 输出变化率时仅消耗 15mW 功率。在 1ksps 时仅消耗
[模拟电子]
基于DPWM的高速高精度积分型模数转换器
提出一种由单电源供电,基于数字脉宽调制(DPWM)原理实现、高速、高精度、积分型模/数转换器的方法。通过对按预置规律变化的脉宽调制信号实施低通滤波后与被测信号比较的方法,实现模/数转换,避免了高精度模/数转换器模拟电路设计的复杂性,并可达到较高的精度。该方法采用快速搜索算法后可进一步提高转换速度,且可方便地由单片机、DSP,FPGA等实现,还可为芯片集成提供有益的方法。 关键词:数字脉宽调制;积分型模/数转换器;可编程门阵列;脉宽调制信号 0 引 言     采用数字信号处理可方便地实现各种先进的自适应算法,完成模拟电路无法实现的功能,因此越来越多的模拟信号处理正在被数字化。目前,应用较多的模/数转换器主要有积分型、逐次逼近型
[电源管理]
基于DPWM的高速高精度积分型<font color='red'>模数转换器</font>
在您的8位示波器上获得8位以上的分辨率
在过去十年中,示波器技术发展非常迅速,在采样率、带宽和存储器深度等方面都实现了重大的进步。示波器的另一关键技术指标是垂直分辨率,观看额外垂直细节通常是指高动态范围测量。 目前,有几款示波器提供超过 8 位的垂直分辨率。在某些示波器中,在标准 8 位模数转换器(ADC)的输出端应用数字信号处理(DSP)技术,即可获得这种高分辨率。除此之外,额外分辨率可通过使用 8 位以上的 ADC 来实现。此外,某些示波器借助 8 位 ADC 和 DSP 组合,获得更多位数的垂直分辨率。我们将讨论: 示波器的 ADC 位数和分辨率位数如何区分 垂直分辨率与噪声之间的关系 高分辨率模式如何工作,何时使用 平均模式与何时使用 示波器
[测试测量]
在您的8位示波器上获得8位以上的分辨率
ADI推出医疗与通信专用高速模数转换器
中国,北京—Analog Devices Inc. (NASDAQ: ADI),全球领先的高性能信号处理供应商,最近宣布其市场领先的数据转换器产品系列新增一款4通道高速模数转换器(ADC) AD9653。AD9653 ADC专为医疗成像和通信应用而设计,具有高通道密度、低功耗和小尺寸等特性,可为系统工程师提供更高的设计灵活性和更低的每通道数据转换成本。AD9653 16位ADC是对已发布的12位和14位版本的补充,构成了引脚兼容、功耗与尺寸优化的高速转换器产品系列。 下载数据手册和申请样片:AD9653 16位、4通道ADC:http://www.analog.com/zh/pr0524/ad9653 让ADI中文技术论坛Eng
[医疗电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved