/********************************
*1 ADCON1 选择参考电压和模拟输入引脚
* ADCON0 选择通道,时钟 打开AD模式
*2 清楚 ADIF 设置 ADIE PEIE GIE
*3 等待一定的时间
*4 开始A/D转化 GO/DONE=1
*5 1扫描方式开始扫描 GO/DONE 并清零
2响应中断清中断标志位
*6 读取寄存器的值
*********************************/
#include
#include
#include
__CONFIG(0x00A);
#define inter_flag
union adrs
{
int y1;
unsigned char adre[2];
}adrsult;
delay_ms(unsigned char count)
{
unsigned int i;
unsigned int j;
for(j=0;j
for(i=0;i<100;i++);
}
void AD_Init(void)
{
/*
* INTCON
* PIR1
* PIE1
* ADRESH
* ADRESL
* ADCON0
* ADCON1
* TRISA
* PORTA
* TRISE
* PORTE
* ANSEL
*/
#ifdef inter_flag
INTCON =0XC0;
#else
INTCON=0;
ADIE=1;
PEIE=1;
ADCON0 =0X21;
ADCON1 =0X80;//?
TRISA5 =1;// AD input
TRISA1 =0;//output
}
void Start_AD(void)
{
GO=1;
#ifndef inter_flag
while(!GO);
adrsult.adre[0]=ADRESL;
adrsult.adre[1]=ADRESH;
if(adrsult.y1>0x020)
{
RA1=0;
}
else
{
RA1=1;
}
delay_ms(100);
#endif
}
main()
{
AD_Init();
Start_AD();
TRISA =0x02c;//RA2 RA3 RA5
delay_ms(1);
while(1)
{
delay_ms(100);
Start_AD();
}
}
void interrupt AD(void)
{
if(ADIF)
{
ADIF=0;
adrsult.adre[0]=ADRESL;
adrsult.adre[1]=ADRESH;
if(adrsult.y1>0x200)
{
RA1=0;
}
else
RA1=1;
}
GO=1;
}