P1ASF是选择哪个口模拟AD转换功能孙局尺,(1<<ADC_CH0)(ADC_CH0相当于0)故P1ASF第0位被置1,选择P1.0为模拟通道。
第二个则高是对ADC_CONTR寄存腊配器进行了设置,(1 <<7)将第八位置1,(1 <<5)将第六位置1,ADC_CONTR = ADC_360T | ADC_ON 将ADC_CONTR寄存器第六位和第八位置1,具体功能就是开启AD转换,选择转换速度。
如有不对请指正!
ADC_CONTR&=0xF8//打开ADC的电源,设置AD转换时间为亩物90个时钟周期转换一次,
//启动AD转换
ADC_CONTR|=0x00
//这句没有设置作用,只是用作延时
ADC_CONTR&=0xEF
//清空AD转换完成的标志位
ADC_CONTR|=0x08
//开始AD转换
while(!(ADC_CONTR&0x10))
//检测AD是否转换完成
val1=ADC_RES
//取10位AD转换结果埋耐野的高两位数据
val1=val1<<8
//把数据向右移8位
,为取AD低8位数据做处理
val1=val1|ADC_RESL
//取AD数据的低八弯喊位数据
ADC_CONTR
&=
!ADC_FLAG
//清空AD转换完成的标志位,以便下次转换做准备
#include<pic.h>#define uint unsigned int
#define uchar unsigned char
void delay(uint ms)
{
uint i,j
for(i=0i<msi++)
for(j=0j<110j++)
}
void AD_init()
{
TRISA=0x0B//高亮AN0AN1AN3为输入,其余为输出
PORTA=0XF4//上电初始为1
ADCON0=0x41//转换时钟为8分频,开启AD
ADCON1=0x84//AN0AN1AN3为模拟口,内部基准电压
}
uint get_ad(uchar ch)
{
uint adval
float advalf
ADCON0=ch//开启友知AD,赋值通道号
delay(10)//切换通道后必须延时大于2TD,否则多路互相影响
ADGO=1//启动转换
while(ADGO)//等待转换结好念消束
adval=ADRESH//00000000 00000011读取转换值
adval=adval<<8|ADRESL//00000011 11111111
advalf=adval/1023.0*5.0//==2.3843
adval=advalf*1000
return (adval)
}
//..........主程序..........
void main(void)
{
uint temp1,temp2,temp3
while(1)
{
temp1=get_ad(0x41)//将采集的值赋给变量
display_Sz4_816(8,1,temp1,1)//第一路AD值//液晶的显示函数,自己看情况调用temp
temp2=get_ad(0x49)
display_Sz4_816(8,2,temp2,1)//第二路AD值
temp3=get_ad(0x59)
display_Sz4_816(8,3,temp3,1)//第三路AD值
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)