#include
#include
#include"ADC.h"
/**************************************************************
@beep_;
voidAdc_Init(void);//完成ADC初始化
ADC配置過程:
>1:端口設(shè)置:模擬輸入無上拉
TRISIO<5:0>:
1:GPIO引腳配置為輸入
0:GPIO引腳配置為輸出
*TRISIO3=1.只能輸入.
ANSEL:bit3:0
ANS<3:0>:GP4|GP2|GP1|GP0
1:模擬輸入
0:I/O
>2:ADC設(shè)置
轉(zhuǎn)換時鐘(TAD/bit),一次ADC轉(zhuǎn)換需要11TAD周期.
ANSEL:bit6:4
ADCS<2:0>:
000:FOSC/2
001:FOSC/8(FOSC=4MHZ,TAD=2us)
101:FOSC/16(FOSC=4MHZ,TAD=4us)
...
ADCON0:A/D控制寄存器0
bit7bit6bit5bit4bit3bit2bit1bit0
ADFMVCFG-CHS2CHS1CHS0GO/DOWNADON
配置參考電壓:
ADCON0:bit6
VCFG:
1:VREF引腳
0:VDD
選擇ADC通道:
ADCON0:bit4:2
CHS<2:0>:
000:AN0(GP0)100:CVREF
001:AN1(GP1)101:0.6V
010:AN2(GP2)110:1.2V
011:AN3(GP4)111:RES
選擇結(jié)果格式:
ADCON0:bit7
ADFM:
1:右對齊(高2位放在ADRESH,低8位放在ADRESL)
0:左對齊
開啟ADC:
ADCON0:bit0
ADON:
1:使能
0:關(guān)閉
>3:清除中斷標志,使能中斷
PIE1:bit6
ADIE:
1:中斷允許
0:中斷禁止
PIR1:bit6
ADIF:
1:A/D轉(zhuǎn)換完成
0:A/D轉(zhuǎn)換未完成或未開始
INTCON:中斷寄存器
bit7:GIE全局中斷使能/禁止
bit6:PEIE外設(shè)中斷使能/禁止
>4:等待采集時間
NOP();NOP();NOP();NOP();
>5:啟動轉(zhuǎn)換
ADCON0:bit1
GO/DOWN:
1:啟動轉(zhuǎn)換或AD轉(zhuǎn)換正在進行.
0:AD轉(zhuǎn)換完成,由硬件清零.
>6:讀取結(jié)果
*查詢GO/DOWN
*等待中斷
ADC=(ADRESH,ADRESL)
*清除中斷標志
**************************************************************/
voidAdc_Init(void)
{
GIE=0;//關(guān)閉全局中斷
TRISIO4=1;
ANSEL=0x18;
ADCON0=0x8D;
ADIF=0;
ADIE=1;
NOP();NOP();NOP();NOP();//等待采集時間
PEIE=1;//打開外設(shè)中斷
GIE=1;//打開全局中斷
}