📄 adctemp.c
字号:
//参考程序B.WADC0.c程序模/数转化通道AIN0.0的输入值
#include <c8051f020.h>
#define SYSCLK 22118400 // SYSCLK frequency in Hz
#define SAMPLE_RATE 50000 // Sample frequency in Hz
bit LCDBit;
unsigned long x;
void PORT_Init (void);
void Timer3_Init (int counts);
void ADC_Init(void);
void ADC_ISR (void);
void SYSCLK_Init()
{
unsigned int i;
OSCXCN=0X67; //0X67=0110,0111
for(i=0;i<256;i++); //等待>1ms
while(!(OSCXCN&0X80)); //等待XTLVLD变为1
OSCICN=0X88; //时钟失效监测器,选择外部时钟源作为系统时钟
}
void PORT_Init()
{
XBR0 = 0x04;//urat0 配置到p0.0 p0.1
XBR1=0X00;
XBR2=0X40;
}
void UART0_Init()
{
SCON0=0x50; //串口方式1
TMOD=0X20; //选用定时器1作为波特率发生器
TH1=0xF4; //波特率为4800
TL1=0xF4;
TF1=0;
TR1=1; //定时器启动
PCON=0X00; //波特率不乘2
TI0=1;
}
void main (void) {
WDTCN = 0xde;
WDTCN = 0xad; //禁止看门狗定时器
SYSCLK_Init();
PORT_Init();
UART0_Init();//AD转换初始化
ADC_Init();
AMX0SL =0x0f;//选择温度通道
for(x=0;x<=50000;x++);
while (1)
{
for(x=0;x<=50000;x++);
AD0BUSY=1;//启动AD转换
while(AD0BUSY==1);//判断AD转换是否完成
SBUF0=0X01;
while(TI0==0);
TI0=0;
SBUF0=ADC0H;//向上位机发送AD转换高4位数据
while(TI0==0);
TI0=0;
SBUF0=ADC0L;//向上位发送AD转换低8位数据
while(TI0==0);
TI0=0;
}
}
void ADC_Init(void)
{
ADC0CN |=0x80; /*ADC0使能,软件使能模/数转换*/
REF0CN |=0x07; /*内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0*/
ADC0CF = (SYSCLK/2500000) << 3; /*转换周期为一个时间系统,增益为1*/
ADC0CF&=0xf8;
AMX0CF |=0x00; /*单端输入*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -