PIC16F1503 休眠低功耗电流降不到数据手册上写的标准,求助

2020-02-06 10:11发布

  1. /*
  2. 项目:示例程序
  3. 芯片:PIC16F1503
  4. 功能:
  5. 休眠唤醒
  6. 2.7uA

  7. 脚位定义
  8.              ________________________
  9.             |VDD                  VSS|
  10.             |RA5              AN0/RA0|
  11.             |RA4/AN3          AN1/RA1|
  12.             |RA3         PWM3/AN2/RA2|
  13.             |RC5/CWG1A/PWM1   AN4/RC0|
  14.             |RC4/CWG1B   PWM4/AN5/RC1|
  15.             |RC3/AN7/PWM2     AN6/RC2|
  16.              ------------------------


  17. */

  18. #include <pic.h>

  19. //芯片配置字
  20. __CONFIG(0x3924);
  21. __CONFIG(0x3FFF);

  22. void main()
  23. {
  24.         /*
  25.         振荡器控制寄存器
  26.         <6-3>IRCF 内部振荡器频率选择位
  27.                                                         5V供电        3.3V供电        T0
  28.         1111 16MHz                                887uA                                125us
  29.         1110 8MHz                                613uA                                250us
  30.         1101 4MHz                                470uA                                500us
  31.         1100 2MHz                                389uA                                1ms
  32.         1011 1MHz                                354uA                                2ms
  33.         1010 500kHz                                331uA                                4ms
  34.         1001 250kHz
  35.         1000 125kHz
  36.         0111 500kHz 复位默认        332uA        290uA                4ms
  37.         0110 250kHz
  38.         0101 125kHz                                320uA
  39.         0100 62.5kHz
  40.         001x 31.25kHz                        317uA
  41.         000x 31kHz                                20uA        18.3uA
  42.         */
  43.         OSCCON = 0B00000000;        //<6-3>IRCF;<1:0>SCS
  44.         VREGCON= 0B00000010;        //<1>VREGPM
  45.        
  46.         /*
  47.         PS 预分频比选择位
  48.         000 1:2
  49.         001 1:4
  50.         010 1:8
  51.         011 1:16
  52.         100 1:32
  53.         101 1:64
  54.         110 1:128
  55.         111 1:256
  56.         */
  57.         OPTION_REG = 0B00000000;//<7>#WPUEN;<6>INTEDG;<5>TMR0CS;<4>TMR0SE;<3>PSA;<2:0>PS

  58.         APFCON = 0B00000000;        //备用引脚选择
  59.         ANSELA = 0B00000000;        //模拟数字  1:模拟; 0:数字
  60.         ANSELC = 0B00000000;        //模拟数字  1:模拟; 0:数字
  61.        
  62.         LATA   = 0B00001000;        //数据锁存器
  63.         TRISA  = 0B00001000;        //输入输出        1:输入; 0:输出
  64.         PORTA  = 0B00001000;        //电平                1:高;   0:低
  65.         WPUA   = 0B00001000;        //上拉                1:使能; 0:禁止
  66.        
  67.         LATC   = 0B00000000;        //数据锁存器
  68.         TRISC  = 0B00000000;        //输入输出        1:输入; 0:输出
  69.         PORTC  = 0B00000000;        //电平                1:高;   0:低

  70.         IOCAP  = 0B00000000;        //PA电平变化中断正边沿
  71.         IOCAN  = 0B00000000;        //PA电平变化中断负边沿
  72.        
  73.         //ADC
  74.         FVRCON = 0B01000000;        //<7>FVREN;<6>FVRRDY;<5>TSEN;<4>TSRNG;<3:2>CDAFVR;<1:0>ADFVR
  75.         /*<6-2>CHS
  76.         00000 AN0
  77.         00001 AN1
  78.         00010 AN2
  79.         00011 AN3
  80.         00100 AN4
  81.         00101 AN5
  82.         00110 AN6
  83.         00111 AN7
  84.         11101 温度
  85.         11110 DAC
  86.         11111 FVR
  87.         */
  88.         ADCON0 = 0B01111100;        //<6-2>CHS;<1>GO/DONE;<0>ADON
  89.         ADCON1 = 0B10100000;        //<7>ADFM;<6-4>ADCS;<1:0>ADPREF

  90.         //Timer0
  91.         TMR0   = 0x00;

  92.         //Timer1
  93.         /*
  94.         <5:4>T1CKPS Timer1输入时钟预分频比选择位
  95.         11 1:8
  96.         10 1:4
  97.         01 1:2
  98.         00 1:1
  99.         */
  100.         T1CON  = 0B00000000;        //<7:6>TMR1CS;<5:4>T1CKPS;<2>#T1SYNC;<0>TMR1ON
  101.         T1GCON = 0B00000000;        //<7>TMR1GE;<6>T1GPOL;<5>T1GTM;<4>T1GSPM;<3>T1GGO;<2>T1GVAL;<1:0>T1GSS
  102.         TMR1H  = 0x00;                        //递增到FFFFh发生中断
  103.         TMR1L  = 0x00;

  104.         //Timer2
  105.         /*
  106.         <6-3>T2OUTPS Timer2输出后分频比选择位
  107.         0000 1:1
  108.         0001 1:2
  109.         0010 1:3
  110.         ...
  111.         1101 1:14
  112.         1110 1:15
  113.         1111 1:16
  114.         <1:0>Timer2时钟预分频比选择位 影响PWM周期
  115.         00 1
  116.         01 4
  117.         10 16
  118.         11 64
  119.         */
  120.         T2CON  = 0B00000000;        //<6-3>T2OUTPS;<2>TMR2ON;<1:0>T2CKPS
  121.         PR2    = 0x68;                        //周期寄存器//PWM周期=(PR2+1)×4Tosc×(TMR2预分频值)
  122.         TMR2   = 0x00;                        //计数保持寄存器

  123.         //PWM1
  124.         /*
  125.         38kHz T2CKPS预分频1, PR2=0X68;PWM1DCH=0x1A;
  126.         */
  127.         PWM1CON= 0B00000000;        //<7>PWM1EN;<6>PWM1OE;<5>PWM1OUT;<4>PWM1POL
  128.         PWM1DCH= 0x1A;                        //PWM占空比高位
  129.         PWM1DCL= 0x00;                        //<7:6>PWM占空比低位 10位分辨率的占空比

  130.         //CWG模块
  131.         CWG1DBR= 0x0A;                        //<5-0>上升沿死区计数
  132.         CWG1DBF= 0x0A;                        //<5-0>下降沿死区计数
  133.         CWG1CON0=0B00000000;        //<7>G1EN;<6>G1OEB;<5>G1OEA;<4>G1POLB;<3>G1POLA;<0>G1CS0
  134.         /* <2-0>G1IS
  135.         111 LC1OUT
  136.         110 N1OUT
  137.         101 PWM4OUT
  138.         100 PWM3OUT
  139.         011 PWM2OUT
  140.         010 PWM1OUT
  141.         001 ASYNC_C1OUT
  142.         000 ASYNC_C2OUT
  143.         */
  144.         CWG1CON1=0B10100010;        //<7:6>G1ASDLB;<5:4>G1ASDLA;<2-0>G1IS
  145.         CWG1CON2=0B00000000;        //<7>G1ASE;<6>G1ARSEN;<3>G1ASDC2;<2>G1ASDC1;<1>G1ASDFLT;<0>G1ASDCLC2
  146.        
  147.         PIE1   = 0B00000000;        //<7>TMR1GIE;<6>ADIE;<3>SSP1IE;<1>TMR2IE;<0>TMR1IE
  148.         PIR1   = 0B00000000;        //<7>TMR1GIF;<6>ADIF;<3>SSP1IF;<1>TMR2IF;<0>TMR1IF
  149.         INTCON = 0B00000000;        //<7>GIE;<6>PEIE;<5>TMR0IE;<4>INTE;<3>IOCIE;<2>TMR0IF;<1>INTF;<0>IOCIF

  150.         asm("nop");
  151.         asm("nop");
  152.         asm("nop");
  153.         asm("nop");
  154.         asm("nop");
  155.         asm("nop");
  156.         asm("nop");
  157.         asm("nop");
  158.         asm("nop");
  159.         asm("nop");
  160.         asm("nop");
  161.         asm("nop");
  162.         asm("nop");
  163.         asm("nop");
  164.         asm("nop");
  165.         asm("nop");
  166.        
  167.         while(1)
  168.         {
  169.                 SLEEP();
  170.                 ///////////////////////////////////////////////////////////
  171.         }
  172. }


复制代码

数据手册上写典型值是 0.5uA, 实测是 2.7uA。不知道哪里有问题。芯片只接了电源和地,其它脚都悬空输出低的。
大神们帮看看,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。