#include <STC12C5A60S2.H>
#include "intrins.h"
//ADC_CONTR bit:
#define ADC_POWER 0x80 //adc 启动
#define ADC_FLAG 0x10 //adc转换完成标志
#define ADC_START 0x08 //adc开始标志
#define ADC_SPEEDLL 0x00 //540 clocks
#define ADC_SPEEDL 0x20 //360 clocks
#define ADC_SPEEDH 0x40 //180 clocks
#define ADC_SPEEDHH 0x60 //90 clocks
#define FOSC 11059200L
#define BAUD 9600
void Delay10us() //@11.0592MHz
{
unsigned char i;
_nop_();
_nop_();
_nop_();
i = 24;
while (--i);
}
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void InitUart()
{
SCON=0x50;
TMOD=0x20;
TH1=TL1=-(FOSC/12/32/BAUD);
TR1=1;
TI=1;
}
void SendData(unsigned char dat)
{
while(!TI);
TI=0;
SBUF=dat;
}
void InitADC()
{
P1ASF = 0xFF;
AUXR1 |= 1<<2; //1:ADC_RES<<8+ADC_RESL
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL;
Delay10us();
}
unsigned char GetADCResult(unsigned char ch)
{
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;
_nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=~ADC_FLAG;
return ADC_RES;
}
void main()
{
unsigned char ch = 0;
InitUart();
InitADC();
while(1)
{
//SendData(ch);
SendData(GetADCResult(ch));
SendData(ADC_RESL);
//ch++;
if(ch==8) ch=0;
Delay500ms();
Delay500ms();
Delay500ms();
Delay500ms();
}
}
万用表测得VCC电压为4.59V,把P1.0和3V3短接,上位机收到数据位0x02DD,即733。
根据公式733*4590/1024=3285mV,测试正常。
设计资源 培训 开发板 精华推荐
- 使用与 DC/DC 反馈分压器相连的 VCCA 的 LTC1728ES5-2.5 电源监视器的典型应用
- 【单片机最小系统】MSP430F5529最小系统
- DC2551A-C,使用 LT1997-1 可配置精密放大器的演示板
- LTC1909-8EG 演示板,SMBU 控制的 DC/DC 转换器,Vin = 7.5V-21V,Vout = 1.3V-3.5V@10A
- LT1084CT-12、12V/5A 低压差负电源的典型应用电路
- 相位/串行输入2相步进电机驱动IC —— TB67S261FTG
- LTC2938CDE 电源和温度监视器的典型应用电路
- LT3091HR 简单电缆压降补偿的典型应用
- 51单片机系统版
- 用于 30kHz PWM 调光的 LT3761HMSE 升压 LED 驱动器的典型应用电路