12c5a60s2单片机ADC采样程序详解(每一句话都是什么意思)

12c5a60s2单片机ADC采样程序详解(每一句话都是什么意思),第1张

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值

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12419124.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存