历史上的今天
返回首页

历史上的今天

今天是:2024年12月24日(星期二)

正在发生

2019年12月24日 | STC12C5A60S2单片机AD采样程序及其寄存器讲解

2019-12-24 来源:elecfans

/*********************************************************************************************************************************************************

*程序说明:本程序使用STC12C5A60S2 ADC转换功能,ADC采样使用查询方式

*芯片供电:5V

*时间:2013/3/27

*采样通道:P1^0 

*********************************************************************************************************************************************************/

#include "STC12C5A60S2.h"

#include "stdio.h"

#include "intrins.h"

#include "math.h"

#define uint unsigned int 

#define uchar unsigned char

/*******************************************************************************************************************************************************************

*函数功能:获取ADC采样值

*时间:2013、3、27

*相关寄存器讲解:                                                7                    6              5                4                      3                      2             1                  0           Reset Vale

*:ADC_CONTR://A/D 转换控制寄存器 ADC_POWER SPEED1 SPEED0   ADC_FLAG   ADC_START  CHS2     CHS1        CHS0       0000,0000

* ADC_RES    //A/D 转换结果高8位               ADCV.9       ADCV.8    ADCV.7      ADCV.6           ADCV.5          ADCV.4   ADCV.3     ADCV.2    0000,0000

*ADC_RESL    //A/D 转换结果低2位                                                                                                                                          ADCV.1    ADCV.0     0000,0000

*寄存器位控制讲解:

ADC_POWER:ADC电源

ADC_START:ADC转换启动控制位 设置为1时开始转换 转换结束后为0

ADC_FLAG:ADC转换结束标志位 转换完成后 ADC_FLAG=1 要由软件一定要清0

SPEED1|SPEED0:模数转换器速度控制位           CHS2/CHS1CHS0:模拟输入通道选择

------------------------------------------------                -------------------------------------------------

|SPEED1 | SPEED0   |  转换时间           |              | CHS2 | CHS1 | CHS0    | 模拟输入通道|

|   1         |       1         |  90个时钟周期   |               |  0       |  0       |   0   |       |   P1^0      |

|  1          |       0         |  180个时钟周期 |               |  0       |  0       |   1   |       |   P1^1      |

|  0          |       1         | 360个时钟周期  |               |  0       |  1       |   0   |       |   P1^2      |

|  0          |       0         |  540个时钟周期 |               |  0       |  1       |   1   |       |   P1^3      |

-------------------------------------------------               |  1       |  0       |   0   |       |   P1^4      |

                                                                            |  1       |  0       |   1   |       |   P1^5      |

    |  1       |  1       |   0   |       |   P1^6      |

    |  1       |  1       |   1   |       |   P1^7      |

    ----------------------------------------------

************************************************************************************************************************************************************************/

uint ADC_Get(uchar Channel)

{

ADC_CONTR=0x88|Channel;

_nop_(); _nop_(); _nop_(); _nop_();

while(!(ADC_CONTR&0x10));    //等待转换完成

ADC_CONTR&=0xe7;      //关闭AD转换,ADC_FLAG位由软件清0

return(ADC_RES*4+ADC_RESL);   //返回AD转换完成的10位数据(16进制)

}

/******************************************************************

*函数功能:将ADC采样值转换为10进制数据

*时间:2013、3、27

******************************************************************/

float ADC_Value(uchar Channel)

{

float AD_Value;

uint i;

for(i=0;i<10;i++) //采样10次取平均值

AD_Value+=ADC_Get(Channel); //转换100次求平均值(提高精度)

AD_Value/=10;

AD_Value=(AD_Value*5)/1024;//ADRJ=0,取10位转换结果ADC_RES+ADC_RESL=1024*Vin/Vcc

return AD_Value;

}

/***************************************************************

*Funtion Name:delay

*Time:2013/3/27

Author:zhuhao

***************************************************************/

void delay(unsigned int a) //延时约1ms

{

unsigned int i;

while (--a!=0)

for(i=600;i>0;i--);   //1T单片机i=600,若是12T单片机i=125

}

/***************************************************************

*Funtion Name:USART_Init

*Time:2013/3/27

Author:zhuhao

***************************************************************/

void USART_Init()

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd; //设置9600波特率

SCON=0x50; //串口方式1,允许接收

TR1=1;

}

/**********************************************************************

*函数功能:ADC初始化配置

*时间:2013、3、27

*寄存器讲解:              7      6      5      4      3       2      1      0        Reset Value

P1ASF:选择模拟功能A/D端口  P1ASF  P1ASF  P1ASF  P1ASF  P1ASF   P1ASF  P1ASF  P1ASF    0000,0000

P1ASF相应位置1则P1口的相应位作为模拟功能A/D使用

           7    6      5        4     3     2       1    0      Reset Value

AUXR1:       PCA_P4  SPI_P4  S2_P4  GF2   ADRJ         DPS     0000,0000

其中ADRJ位控制A/D转换结果寄存器(ADC_RES,ADC_RESL)的数据格式调整

ADRJ=0:10位A/D转换结果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中

ADRJ=1:10位A/D转换结果的高8位存放在ADC_RESL中,低2位存放在ADC_RES的低2位中

***********************************************************************/

void ADC_Init()

{

P1ASF=0x01;//ADC I/O选择 P1^0;

AUXR1=0x00;//ADRJ=0

ADC_RES=0;//10位ADC采样结果的高8位存放在ADC_RES中,低二位存放在ADC_RES_L的低二位中

ADC_RESL=0;

ADC_CONTR=0x80;//开启ADC电源

delay(2);//必要的延时

}

void main()

{

USART_Init();

ADC_Init();

while(1)

{

TI=1;

printf("转化:%.2f Vn",ADC_Value(0));//将ADC采样的实际电压值发送给串口助手

TI=0;

}

}


/*******************************************************************************************************************************************************************

*                                   STC12C5A60S2.h 文件

******************************************************************************************************************************************************************/

//--------------------------------------------------------------------------------

//新一代 1T 8051系列 单片机内核特殊功能寄存器 C51 Core SFRs

//                                          7     6      5       4     3    2    1     0   Reset Value

sfr ACC  = 0xE0; //Accumulator                                                              0000,0000

sfr B    = 0xF0; //B Register                                                               0000,0000

sfr PSW  = 0xD0; //Program Status Word      CY    AC    F0    RS1   RS0    OV    F1    P    0000,0000

推荐阅读

史海拾趣

芯邦(Chipsbank)公司的发展小趣事

随着公司业务的不断发展,芯邦开始积极布局UWB(超宽带通信)产品线。UWB技术以其高速率、高精度和低功耗的特点,在智能家居、物联网等领域展现出巨大的应用潜力。芯邦通过研发UWB等信息传输技术及产品,致力于从移动存储及智能家电市场出发,以手机及移动智能设备、车规及汽车周边产品应用、智能家居及物联网领域为目标市场,打造多系列产品线格局,提升公司的市场竞争力。

Caddock公司的发展小趣事

Caddock公司的发展可以追溯到1962年,当时公司推出了Micronox电阻系统。这一创新技术使电阻器在极端操作条件和恶劣环境下实现了高水平的稳定性和可靠性。这一重大突破为Caddock公司赢得了市场的广泛认可,并为后续的电阻材料技术发展奠定了坚实的基础。

E-T-A [E-T-A Circuit Breakers]公司的发展小趣事

E-T-A公司的前身可以追溯到1948年,当时由Jakob Ellenberger和Harald A. Poensgen在德国共同创立了ELPO GmbH公司。这家初创企业专注于电气设备的研发和生产。随着技术的不断发展和市场的日益扩大,公司逐渐意识到设备用断路器在电路保护领域的重要性。因此,在1953年,公司正式推出了设备用的ETA断路器,并开始逐渐将重心转移到断路器领域,这也为日后E-T-A公司的成立奠定了基础。

台湾兆欣(EMTEK)公司的发展小趣事

随着电子产品的不断小型化和集成化,兆欣面临着越来越大的技术挑战。然而,他们并没有退缩,反而加大了研发投入。经过无数次试验和改进,兆欣成功开发出全自动薄型功率电感,这一产品在市场上引起了广泛关注。同时,他们还针对USB3.0的市场趋势,预计导入相关对应产品,为公司的未来发展奠定了坚实基础。

广东长利光电(Changli Optoelectronic)公司的发展小趣事

进入21世纪,广东长利光电开始将目光投向国际市场。公司积极参加各种国际展览和交流活动,与世界各地的客户建立了广泛的联系。凭借优质的产品和服务,公司逐渐在国际市场上崭露头角。为了更好地服务全球客户,广东长利光电在中国设立了多个办事处,并建立了完善的销售和服务网络。

CBM_America_Corporation公司的发展小趣事

在面临激烈的市场竞争时,CBM_America_Corporation选择与一家国际知名的电子制造商建立战略合作关系。通过共享技术资源和市场渠道,两家公司共同开发了一款具有竞争力的智能设备。这一合作不仅提升了CBM的品牌影响力,还为其带来了稳定的订单和利润增长。随着合作的深入,CBM逐渐在电子行业中占据了重要的地位。

问答坊 | AI 解惑

高速PCB设计指南

高速PCB设计指南,一共八章,word文档,值得一看哦…

查看全部问答>

电脑故障

我的电脑 无法启动 甚至 电源CPU 显卡 风扇 都 不转 电源是 好的 我应该怎样 做 …

查看全部问答>

不仅是外观,揭秘电纸书设计

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 解读三代kindle,从“书”到“纸”再到“字” “在为汉王设计电纸书之时,我们仔细地研究了电子书的鼻祖——亚马逊推出的三代Kindle产品,然后就发现了一个很有趣的现象:第一代kindle采用了 ...…

查看全部问答>

好心人帮下忙做下毕业设计!

简易声谱仪的固件设计 规定用神州III号的STM32开发板。…

查看全部问答>

求高手

本帖最后由 paulhyde 于 2014-9-15 04:27 编辑 有没有人平时比较空的,能帮助我解决一些问题啊,我在单片机方面不是很专业,需要一个师傅带着,我可以拜他为师,还请师傅不要嫌弃我,回一下我的帖吧!跪谢!!我的qq:335947998 加我的时候最 ...…

查看全部问答>

关于智能小车循迹问题

各位大哥大姐,我在网上买了一个 4路的循迹模块。  程序是一个学长给我们写的。  4路循迹不跟单片机连接起来的时候,每一路指示灯的灭亮显示的正常。  但是只要跟单片机控制端口连接一来 。  指示灯的亮灭 ...…

查看全部问答>

基于LM3s +触摸屏的 计算器程序

基于LM3s +触摸屏的 计算器程序   哪位大侠有啊…

查看全部问答>

MSP-EXP430F5529 培训PPT资料

附件为EXP-MSP430F5529的官方开发板教程,由合肥工大改编,全中文,将之前官版的大实验进行了分解,更容易理解。 [ 本帖最后由 wstt 于 2013-1-28 10:15 编辑 ]…

查看全部问答>

出液晶屏、RS232/RS422转换器、以太网转RS232/RS485/RS422模块

本帖最后由 zhoupxa 于 2013-12-26 18:44 编辑 1. 8块拆机TRULY品牌12864点阵液晶屏,型号MCG12864C2-3,有负压,带背光,可提供规格书及C51驱动测试程序。拆机品,难免磕碰,个别屏面有少许划痕。 实物拍摄,如实描述,成色如图;零售7元/块不 ...…

查看全部问答>

适用于所有便携式电子设备的精确电量监测计

你有这样的经历吗,每次出门前都要检查一下手机的电量,生怕电量不够支撑一天的使用?或者在使用过程中,手机突然就没有电了?TI推出的能够精确地监控电池电量的产品能够帮你解决这些问题。 $(\'flv_GG1\').innerHTML=(AC_FL_RunContent(\'width\', ...…

查看全部问答>