打印
[国产单片机]

请教STC的AD与EEPROM的问题

[复制链接]
1797|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxbbqxb|  楼主 | 2010-4-6 20:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在用STC12C5A32S2做个电流测量的,下面用这段程序做A/D转换,但是后面怎么处理才能从ADC_RES和ADC_RESL这10位里得到测量值,
还有就是用内部的EEPROM做个能够储存,外部电路突然断电,所测得的电流值,能够下次再读出,以及利用软件可以全部擦除储存的值。
哪位懂的,帮忙看下,教我下。谢谢了

#include "intrins.h" //51基本运算(包括_nop_空函数)
sbit P1M0=P1^0;
sbit P1M1=P1^1;
/*A/D SFR*/
sfr ADC_CONTR = 0xBC; //A/D 转换控制寄存器 ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000
sfr ADC_RES  = 0xBD;  //A/D 转换结果高8位 ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2  0000,0000
sfr ADC_RESL = 0xBE;  //A/D 转换结果低2位                                           ADCV.1 ADCV.0  0000,0000
/*********************************************************************************************/
void DELAY_MS (unsigned int a)
{
unsigned int i;
while( --a != 0){
  for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/**********************************************************************************************/
void Read_init (unsigned char CHA)
{
unsigned char AD_FIN=0; //存储A/D转换标志
    CHA &= 0x07;            //选择ADC的8个接口中的一个(0000 0111 清0高5位)
    ADC_CONTR = 0x40;  //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
    _nop_();
    ADC_CONTR |= CHA;       //选择A/D当前通道
    _nop_();
    ADC_CONTR |= 0x80;      //启动A/D电源
    DELAY_MS(1);            //使输入电压达到稳定(1ms即可)
}
/**********************************************************************************************/
/**********************************************************************************************/
void ADC_Read (void)
{
unsigned char AD_FIN=0; //存储A/D转换标志
    ADC_CONTR |= 0x08;      //启动A/D转换(0000 1000 令ADCS = 1)
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    while (AD_FIN ==0){     //等待A/D转换结束
        AD_FIN = (ADC_CONTR & 0x10); //0001 0000测试A/D转换结束否
    }
    ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 关闭A/D转换,
}
/**********************************************************************************************/
/**********************************************************************************************/
void Ad_Change (void)
{
Read_init(0);//ADC初始化
P1M1 = 0x01; //P1.7~P1.0:0000 0001(高阻)//注意:更改ADC通道时须同时将对应的IO接口修改为高阻输入。
P1M0 = 0x00; //P1.7~P1.0:0000 0000(强推)
ADC_Read ();//调用ADC转换程序
//dAD_RESULT=ADC_RES+ADC_RESL;
   

}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

1

粉丝