[通用PIC核OTP系列] HC18P110L ADC设置

[复制链接]
1859|1
 楼主| 从此不早朝 发表于 2023-2-24 16:08 | 显示全部楼层 |阅读模式
AD, ADC, HC, dc
本帖最后由 芯圣电子官方QQ 于 2023-7-20 10:29 编辑
  1. //这里要将管脚口设置为输入
  2. void GPIO_inital(void)
  3. {
  4.         PORTA |= 0X04;
  5. //        PORTB=0X00;                        //PORT口输出高低电平设置  1=高电平,0=低电平
  6.         TRISA &=0X04;                        //输入输出设置  1=输入,0=输出                  
  7. //        TRISB=0X00;                        //输入输出设置  1=输入,0=输出
  8.         
  9. //        ANSEL=0X00;                        
  10.         WPUA &= 0XFB;                        //上拉设置 1=DISABLED PULL-UP  ;0=PULL-UP
  11. //        WPUB =0XFF;                        //上拉设置 1=DISABLED PULL-UP  ;0=PULL-UP
  12. }

  13. void adc_A0_init()
  14. {
  15.         ADCON0=61;                        //内部Vdd,AN0
  16.         ADCON1=50;
  17. /*                                        ;9Fh         Bit7         Bit6         Bit5         Bit4         Bit3 Bit2 Bit1                Bit 0
  18.                                         ;ADCON1 ADFM         ADCS2         ADCS1         ADCS0         -         -         -         ADREF        
  19.                                        
  20.                                         ;ADC 时钟源         ADCS[2:0] 典型值
  21.                                         ;        Fosc         000         2us
  22.                                         ;        Fosc/2         001         4us
  23.                                         ;        Fosc/4  010         8us
  24.                                         ;        Fosc/8  011         16us
  25.                                         ;        Fosc/16 100         32us
  26.                                         ;        Fosc/32 101         64us
  27.                                         ;        Fosc/64 110         128us
  28.                                         ;        FRC         111         视RC 的值而定
  29.                                         ;ADFM 数据格式
  30.                                         ;0 ADRESH[7:0]:ADRESL[7:4]
  31.                                        
  32.                                         ;1 ADRESH[1:0]:ADRESL[7:0]        
  33.                                         ;1Fh         Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
  34.                                         ;ADCON0    - VHS1 VHS0 CHS2 CHS1 CHS0 ADON ADEN
  35.                                                 
  36.                                         ;ADREF VHS[1:0] 参考电压        CHS [2:0] 模拟通道        
  37.                                         ;0 00 内部2.0V                        000 AN0
  38.                                         ;0 01 内部3.0V                        001 AN1
  39.                                         ;0 10 内部4.0V                        010 AN2
  40.                                         ;0 11 内部VDD                        011 AN3
  41.                                         ;1 xx 外部参考电压                100 AN4
  42.                                         ;                                101 AN5                        
  43.                                         ;                                110 保留
  44.                                         ;
  45. */                                                               
  46. }
  47. //┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  48. //┃ADC处理                                                                                                                    ┃
  49. //┃Version:V1.00                                                                                                   ┃
  50. //┃Functio:AD初始化数据赋值处理                                                                   ┃
  51. //┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  52. void adc_get(unsigned char AD_TD)//ADC初始化 AD_TD通道选择 AD_TD=1对应通道0(AN0仿真不能用) AD_TD=7对应通道7 没有通道5
  53. {
  54.         switch(AD_TD)
  55.         {
  56.         case 1:
  57.                 ANSEL=0X01;                //1=AD(simulation models)0=I/O(digital models)
  58.                 ADCON0=0x40;        //参考电压选择,通道选择0
  59.         break;
  60.         case 2:
  61.                 ANSEL=0X02;                //1=AD(simulation models)0=I/O(digital models)
  62.                 ADCON0=0x44;        //参考电压选择,通道选择1
  63.         break;
  64.         case 3:
  65.                 ANSEL=0X04;                //1=AD(simulation models)0=I/O(digital models)
  66.                 ADCON0=0x48;        //参考电压选择,通道选择2
  67.         break;
  68.         case 4:
  69.                 ANSEL=0X08;                //1=AD(simulation models)0=I/O(digital models)
  70.                 ADCON0=0x4c;        //参考电压选择,通道选择3
  71.         break;
  72.         case 5:
  73.                 ANSEL=0X10;                //1=AD(simulation models)0=I/O(digital models)
  74.                 ADCON0=0x50;        //参考电压选择,通道选择4
  75.         break;
  76.         case 6:
  77.                 ANSEL=0X40;                //1=AD(simulation models)0=I/O(digital models)
  78.                 ADCON0=0x58;        //参考电压选择,通道选择6
  79.         break;
  80.         case 7:
  81.                 ANSEL=0X80;                //1=AD(simulation models)0=I/O(digital models)
  82.                 ADCON0=0x5c;        //参考电压选择,通道选择7
  83.         break;
  84.         default:
  85.                 ;
  86.         break;
  87.         }
  88.         ADEN=1;
  89.         delay_us(100);                //等待ADC稳定
  90.         
  91.         ADON=1;
  92.         
  93.                 while(ADON!=0);
  94.                 databuf=ADRESH;
  95.                 databuf=(databuf<<4)|(ADRESL>>4);
  96.                 ADRESL=0x00;
  97.                 ADRESH=0x00;
  98.                 voult_buf=databuf;
  99. }


1924414306 发表于 2023-9-27 15:35 | 显示全部楼层
实测可用吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

185

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部