📄 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 + -