⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adctemp.c

📁 c8051f020单片机的例程
💻 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 + -