📄 adc0.c
字号:
/******************************************
0v-----34290 0.2v------26280
v=(34290-result)*0.2/(34290-26280)
=(34290-result)/40050
******************************************/
#include <c8051f060.h>
sfr16 ADC0 = 0xBE;
#define SYSCLK 22118400
void SYSCLK_Init (void);
void PORT_Init (void);
void ADC0_Init(void);
void ad();
//float result[10]={0};
float result;
float v=0; //输入的实际电压值
unsigned int i=0;
//unsigned int k=0;
void main (void)
{
WDTCN = 0xde;
WDTCN = 0xad;
SYSCLK_Init ();
PORT_Init ();
ADC0_Init();
while(1)
{
ad();
}
}
void ad()
{
char old_SFRPAGE = SFRPAGE;
SFRPAGE = ADC0_PAGE;
AD0INT=0;
AD0BUSY=1; //开始ADC转换
while(AD0INT==0); //等待转换结束
//result[i]=ADC0;
//i++;
//if(i>9)i=0;
result=ADC0;
v=(34290-result)/40050;
v=v+v*0.02; //误差调整
SFRPAGE = old_SFRPAGE;
}
void ADC0_Init(void)
{
char old_SFRPAGE = SFRPAGE;
int j;
SFRPAGE = ADC0_PAGE;
ADC0CN = 0xC0;
//ADC0CN = 0x80;
REF0CN = 0x03;
for(j=0;j<10000;j++);
AMX0SL = 0x00;
ADC0CF = (SYSCLK/25000000) << 4;
//ADC0CF | = 0x07;
SFRPAGE = old_SFRPAGE;
}
void PORT_Init (void)
{
char old_SFRPAGE = SFRPAGE;
SFRPAGE = CONFIG_PAGE;
XBR2 = 0x40;
P0MDOUT |= 0xFF;
SFRPAGE = old_SFRPAGE;
}
void SYSCLK_Init (void)
{
char old_SFRPAGE = SFRPAGE;
int j;
SFRPAGE = CONFIG_PAGE;
OSCXCN = 0x67;
for (j=0; j <5000; j++) ;
while (!(OSCXCN & 0x80)) ;
RSTSRC = 0x04;
CLKSEL = 0x01;
OSCICN = 0x00;
SFRPAGE = old_SFRPAGE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -