PIC单片机之AD框架

2019-04-15 12:06发布

/********************************
*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; }