📄 ad10b.c
字号:
#include "reg52.h"
#include "intrins.h"
/*
#define AD_P10 0xe0; //选择P1.0口为AD转换
#define AD_P11 0xe1; //模式为SPEED0=1,SPEED1=1
#define AD_P12 0xe2; //即最高转换速度,晶振20M,转换速度为100K 10US/次
#define AD_P13 0xe3;
#define AD_P14 0xe4;
#define AD_P15 0xe5;
#define AD_P16 0xe6;
#define AD_P17 0xe7; //选择P1.7口为AD转换口
*/
sfr ADC_LOW2 = 0xBE;
sfr ADC_CONTER = 0xC5;
sfr ADC_DATA = 0xC6;
sfr P1M0=0X91;
sfr P1M1=0X92;
unsigned int Result;
unsigned int ADC()
{
ADC_CONTER = ADC_CONTER|0x80;//开AD电源
//延时2ms
ADC_DATA=0x00; //高8位清零
ADC_LOW2=0x00; //低2位清零
ADC_CONTER=0xe7; //启动P1.7通道AD转换 //
ADC_CONTER|=0x08; //启动AD转换
while ((0x10&ADC_CONTER)!=0x10);
ADC_CONTER&=0xE7; //清零ADC_FLAG标志位
Result = (ADC_DATA<<2)|(ADC_LOW2&0x03);//读取AD转换结果 10位
return (Result); //返回值
}
void delay(void) //延时
{
unsigned char m,n;
for(m=50;m>0;m--)
for(n=50;n>0;n--);
}
void sendbyte(one_byte)
{
TI=0;
SBUF=one_byte;
while (TI==0);
TI=0;
}
void init_uart(void)
{
ES=0;
TMOD=0x20; //定时器1,内部RC
SCON=0x50; //串口方式1,波特率4800
TH1=0xfd;
TL1=0xfd;
TR1=1;
ES=1;
}
void main(void)
{
unsigned int a;
unsigned char res[4];
P1M0=0xFF;
P1M1=0xFF; //设置P1口均为开漏模式
ADC_CONTER|=0x80; //开AD转换电源
init_uart();
while(1)
{
a=ADC();
res[0]=a/1000+0x30;
res[1]=(a%1000)/100+0x30;
res[2]=(a%100)/10+0x30;
res[3]=a%10+0x30;
sendbyte(0xbb); /*串口发送一字节******/
delay();
delay();
sendbyte(res[0]); /*串口发送一字节******/
delay();
delay();
sendbyte(res[1]); /*串口发送一字节******/
delay();
delay();
sendbyte(res[2]); /*串口发送一字节******/
delay();
delay();
sendbyte(res[3]); /*串口发送一字节******/
delay();
delay();
sendbyte(0xcc); /*串口发送一字节******/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -