专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

PIC16F917 内部AD练习程序

作者:佚名   来源:不详   点击数:  更新时间:2014年08月31日   【字体:

/*************PIC16F917单片机程序*************************/
/******************************************************************/
/*****File  Function :  内部AD练习程序                 *****/
/*****Program Author :  ZhengWen(ClimberWin) *****/
/*****MCU            : PIC16F917  内部晶振         *****/
/*****Compile Date   :  2014/08/17                     *****/
/*****Edition Info   :  V1.0                                   *****/
/*************************************************************/
//RA5(AN4)作为AD输入,电位器调节电压,LED显示电压数值
//引脚定义:PORTD=8LED,KEY=RB0(INT)
/*修改日期:                                                 */

/************************************/
#include <pic.h>
#define uchar unsigned char
#define uint unsigned int
void Init(void);//初始化子程序
#define       KEY       RB0
void Init(void)
 {
     PORTA = 0B00000000;
     PORTB = 0B00000000;
     PORTC = 0B00000000;
     PORTD = 0B00000000;   
     TRISA = 0B00100000;//设置RA5(AN4)作为输入
     TRISB = 0B00100001;//设置RB0为输入,作为按键口
     TRISC = 0B00000000;//设置RC0为输出
     LCDCON=0x00;//关闭LCD功能,不然PORTC不能作为普通I/O输出
     TRISD = 0B00000000;//设置PORTD口为输出,作为LED显示口
    
   
///////////AD配置///////////////////////////////////////
     ANSEL= 0B00010000; //选择AN4作为AD输入 (PDF 148)
     ADCON0=0B10010001;//AD结果格式Right justified,选择参考电压VDD-VSS,AN4输入,关闭AD转换
     ADCON1=0B01010000;  //AD转换时钟选择

     ADIE=1;//AD中断使能
     PEIE=1;
     ADIF=0;//清除中断标志位
     GIE=1;  //开总中断
}
void  interrupt  ADint(void)
  {
    
      PORTD=~ADRESL;//LED输出显示低8位
      PORTC=~ADRESH;//LED输出显示高2位
       ADIF=0;//清除中断标志位
      ADCON0=ADCON0|0B00000010;//开始AD转换
  }
 
////////////主程序/////////////////////////
int main (void)
{
  Init();//初始化程序
  ADCON0=ADCON0|0B00000010;//开始AD转换
  while(1) //等待AD转换
   {
    ;
   }
}
关闭窗口