📄 ad8.c
字号:
//参考程序B.WADC1.c程序模/数转化通道AIN1.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;
XBR1=0X00;
XBR2=0X40;
}
void UART0_Init()
{
SCON0=0x50; //0101,0000
TMOD=0X20; //0010,0000
TH1=0xF4;
TL1=0xF4;
ES0=1; //开启串口中断0
TF1=0;
TR1=1; //定时器启动
PCON=0X00;
TI0=1;
}
void main (void) {
WDTCN = 0xde;
WDTCN = 0xad; //禁止看门狗定时器
SYSCLK_Init();
PORT_Init();
UART0_Init();
ADC_Init(); //AD转换初始化
AMX1SL =0x00;//选择通道0
for(x=0;x<=50000;x++);
while (1)
{
for(x=0;x<=50000;x++);
ADC1CN |=0X10 ;//启动AD转换
while( ADC1CN==0X90);//判断AD转换是否完成
SBUF0=0X01;
while(TI0==0);
TI0=0;
SBUF0=ADC1;//向上位发送AD转换8位数据
while(TI0==0);
TI0=0;
}
}
void ADC_Init(void)
{
ADC1CN |=0x80; /*ADC1使能,软件使能模/数转换*/
REF0CN |=0x07; /*内部电压基准提供从VREF脚输出,ADC1电压基准取自VREF0*/
ADC1CF = (SYSCLK/2500000) << 3; /*转换周期为一个时间系统,增益为1*/
ADC1CF&=0xf8;
ADC1CF|=0x01;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -