typedef unsigned int WORD
#include "reg51.h"
#include "intrins.h"
/*Declare SFR associated with the ADC */
sfr ADC_CONTR = 0xBC
sfr ADC_RES = 0xBD
sfr ADC_LOW2= 0xBE
sfr P1ASF = 0x9D
sfr P2M0 = 0x96
sfr P2M1 = 0x95
/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER 0x80
#define ADC_FLAG0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60
//延时
void Delay(WORD n)
{
WORD x
while (n--)
{
x = 5000
while (x--)
}
}
//初始AD寄存器
void InitADC()
{
P1ASF = 0xff
ADC_RES = 0
ADC_CONTR = ADC_POWER | ADC_SPEEDLL
Delay(2)
}
//AD转换
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
return ADC_RES
}
void main()
{ BYTE temp
P2M1=0 P2M0=0x03 //P2.0和P2.1强推挽
InitADC()
while (1)
{
temp=GetADCResult(0)//转换P1.0
if(temp>1)
P2|=0x03//P1.0有电压 P2.0和P2.1输出高
else
P2&=0xFC//P1.0无电压 P2.0和P2.1输出低
}
}
ui_AD_data=(ui_ADCH<<8)|UI_ADcl就是这里我没有看懂
看你这个程序,转换结果应该是右对齐的,假定转换结果为1023(0x03ff),那么ADCL = 0XFF,ADCH = 0X03
ui_ADCL=ADCL也就等于0xff
ui_ADCH=ADCH也就等于0x03
ui_ADCH<<8,那么ui_ADCH就等于0x0300,再和ui_ADCL做或运算,则ui_AD_data=0x3ff,你所说的返回最大也才255,不知道是怎么来的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)