?? 18f_ad.c
字號:
//************************************************
//用18f6585寫的5通道ad程序,2006-9-22調試通過
//************************************************
#include<p18f6585.h>
#include<math.h>
void Int_tmr0(void);
void ad_init(void);
void initial(void);
int count,res[5];
union adres
{
int y1;
unsigned char adre[2];
}adresult;//使用聯合來存放ad轉換的結果
//ad初始化
void ad_init(void)
{
ADCON0bits.ADON=1;//ad轉換器工作
ADCON1=0x82;//選擇5個口均為模擬輸入
PIR1bits.ADIF=0;
TRISA=0x2f;//RA4為輸出,其他均為輸入
}
//主程序初始化
void initial(void)
{
INTCON=0xa0;//開放總中斷和T0中斷
INTCON2bits.TMR0IP=1;//tmr0高優先中斷
TMR0L=0x01;
TMR0H=0x00;//裝初值
T0CON=0x87;//使能tmr0,16位,預分頻位256
TRISB=0;//設置輸出為0
PORTB=0x00;
count=0;
}
void main(void)
{
ad_init();
initial();
INTCONbits.GIE=1;
ADCON0bits.GO=1;
while(1)
{
;
}
}
#pragma code InterruptVectorHigh=0x08//從中斷向量地址跳轉的服務程序
void InterruptVectorHigh(void)
{
_asm
goto Int_tmr0//跳轉要執行的子程序
_endasm
}
//定時中斷來讀取5通道的ad轉換值
#pragma code
#pragma interrupt Int_tmr0
void Int_tmr0()
{
unsigned char i;
INTCONbits.TMR0IF=0;//清除中斷標志
for(i=0;i<5;i++)//循環讀取5路ad轉化值
{
ADCON0bits.GO=1;
ADCON0=ADCON0||i<<3;
do{;}
while(PIR1bits.ADIF==0);
PIR1bits.ADIF=0;
adresult.adre[0]=ADRESL;
adresult.adre[1]=ADRESH;
adresult.y1=res[i];
}
TMR0L=0x01;
TMR0H=0x00;//裝初值
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -