#include
//---------------------------------------------------------------------
#define FOSC 11059200L
#define BAUD 9600
typedef unsigned char BYTE;
typedef unsigned int WORD;
sfr ADC_CONTR =0xBC; //ad控制寄存器
sfr ADC_RES =0xBD; //高八位
sfr ADC_LOW2 =0xBE; //低二位
sfr P1ASF =0x9D; //P1辅助功能控制寄存器
//---------------------------------------------------------------------
#define ADC_POWER 0x80 //AD总点源位
#define ADC_FLAG 0x10 //AD完成标志
#define ADC_START 0x08 //AD开始控制位
// CPU工作频率21MHz时 A/D转换速度约 300KHz
#define ADC_SPEEDLL 0x00 //0000,0000 0 0 420 个时钟周期转换一次 [A/D转换所需时间]
#define ADC_SPEEDL 0x20 //0010,0000 0 1 280 个时钟周期转换一次
#define ADC_SPEEDH 0x40 //0100,0000 1 0 140 个时钟周期转换一次
#define ADC_SPEEDHH 0x60 //0110,0000 1 1 70 个时钟周期转换一次,
void InitUart();
void InitADC();
void SendData(BYTE dat);
BYTE GetADCResult(BYTE ch);
void Delay(WORD n);
void ShowResult(BYTE ch);
void main ()
{
InitUart();
InitADC();
while(1)
{
ShowResult(0);
ShowResult(1);
// ShowResult(2); //开发板P1^2有问题
ShowResult(3);
ShowResult(4);
ShowResult(5);
ShowResult(6);
ShowResult(7);
}
}
void ShowResult(char ch)
{
SendData(ch);
SendData(GetADCResult(ch));
// 如果想取到十位结果,将下面这句注释取消
// SendData(ADC_LOW2);
}
BYTE GetADCResult(BYTE ch)
{
ADC_CONTR = ADC_POWER| ADC_SPEEDLL| ch| ADC_START;
_nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR & ADC_FLAG)); //等待寄存器完成工作
ADC_CONTR &= ~ADC_FLAG; //关闭ad转换
return ADC_RES; //返回值
}
void InitUart()
{
SCON = 0x5a; //设定八位串口连接方式
TMOD = 0x20; //T1为8位自动重载
TH1 = TL1= -(FOSC/12/32/BAUD); //UART的波特率设置
TR1 = 1; //打开定时器1
}
void InitADC()
{
P1ASF = 0xff; //打开8通道ADC功能
ADC_RES = 0; //清空历史
ADC_CONTR = ADC_POWER | ADC_SPEEDLL ;
Delay(2); //延时,硬件反应
}
void SendData(BYTE dat)
{
while(!TI); //TI为发送完成标志位,如果发送完成TI等于1;
TI = 0; //清除TI标志
SBUF = dat; //发送数据
}
void Delay(WORD n)
{
WORD x;
while(n--)
{
x = 5000;
while(x--);
}
}
换成十六进制却出现了这样的一串数据,能告诉我这么一串数据有什么用吗?