PIC16F917,主函数运行出错,求大神指点!!!!

[复制链接]
618|1
 楼主| NOKOL520 发表于 2019-8-22 15:20 | 显示全部楼层 |阅读模式
本帖最后由 NOKOL520 于 2019-8-22 15:37 编辑

新手学习16f917,定时器1给蜂鸣器提供波形!定时器2改变定时器1的频率,让蜂鸣器能发出类似的报警声!主函数里一个定时检测电压的,一个按键程序,现在出现的问题是,主函数跑不起来!测试发现,主函数跑了890次左右时就不跑了,然后就一直在定时器中断里打转!前面的这段时间定时器也是正常的在跑!如果把中断函数删掉,主函数就能正常跑起来!只是关掉定时器使能没用。。。。求论坛里的大神们帮忙看看,哪里出了问题!
  1. #include<pic.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. #define        low        RD0                                
  5. #define        lbt RD3                                
  6. #define        high RD2                        
  7. #define flt RD4                                
  8. #define spk RD5                                
  9. #define mot RD6                                
  10. #define ctr RD7                                
  11. #define        keyin RB0                        

  12. uint data[2]={64722,64436};                        //蜂鸣器频率const

  13. uint count=0,jcout=0,mode=0,lednum;
  14. uint vba,isp,k,t,flagb,flagf,i,p,j,s;

  15. __CONFIG(0xE0F1);   //30F5

  16. //void delay(uint x);
  17. void init();
  18. uint get_ad(uchar y);
  19. void monitor();
  20. void key_scan();
  21. void sentchar(uchar data1);
  22. void printcom(const uchar *dat);
  23. void printdata(uint dat);
  24. uint filter();

  25. void main()
  26. {
  27.         init();
  28.         while(1)
  29.         {        
  30.                 k++;               
  31.                 RD1=!RD1;               
  32.                 if(k>=1000)
  33.                 {
  34.                         k=0;
  35.                         monitor();
  36.                         //TMR1IE=!TMR1IE;
  37.                         //TMR1ON=TMR1IE;
  38.                 }               
  39.                 key_scan();        
  40.         }
  41. }
  42. /*void delay(uint x)
  43. {
  44.         uint a,b;
  45.         for(a=x;a>0;a--)
  46.                 for(b=110;b>0;b--);
  47. }*/
  48. void init()                                        //初始化:4MHZ,AD, PWM,uart,定时器012
  49. {
  50.         OSCCON=0x67;        
  51.         TRISA=0x0f;
  52.         TRISB=0x01;
  53.         TRISC=0xc0;
  54.         TRISD=0;
  55.         PORTA=0;
  56.         PORTB=0;
  57.         PORTC=0;
  58.         PORTD=0xE1;
  59.         TXSTA=0x24;
  60.         RCSTA=0x90;
  61.         SPBRG=25;        
  62.         RCIE=1;

  63.         
  64.         ANSEL=0x28;
  65.         ADIE=1;
  66.         ADCON0=0x05;
  67.         ADCON1=0x9e;
  68.         
  69.         OPTION=0X07;
  70.         TMR0=61;
  71.         T0IE=1;
  72.         INTCON=0xa0;
  73.         GIE=1;
  74.         PEIE=1;
  75.         PIE1=0X03;
  76.         T2CON=0X1C;
  77.         //TMR2IE=0;
  78.         TMR2ON=1;
  79.         CCPR1L=0x5b;                        //C8
  80.         CCP1CON=0x0C;
  81.         //TMR2=0;
  82.         PR2=0x7C;
  83.         T1CON=0x01;        
  84.         TMR1L=(65536-200)%256;
  85.         TMR1H=(65536-200)/256;
  86.         //delay(10);
  87.         T1CON=0;        
  88.         PORTD=0x81;
  89. }
  90. uint get_ad(uchar y)                                //AN1---133,AN3---141
  91. {--ADC--}
  92. void monitor()
  93. {--调用ADC和平均值+判定---}
  94. void key_scan(){---按键扫描----}
  95. void sentchar(uchar data1){---发送数据---}
  96. void printcom(const uchar *dat){----发送字符串----}
  97. void printdata(uint dat){ ----发送变量值----}
  98. uint filter(){----去除最大和最小后取平均值----}
  99. void interrupt T1()
  100. {
  101.      if(TMR1IF==1)
  102.      {
  103.           p=data[jcout];
  104.           TMR1H=p/256;


 楼主| NOKOL520 发表于 2019-8-22 15:23 | 显示全部楼层
中断函数贴不全,,补在这里
void interrupt T1()
{
        if(TMR1IF==1)           //250us
        {
                p=data[jcout];
                  TMR1H=p/256;
                TMR1L=p%256;               
                TMR1IF=0;
                spk=!spk;
        }
        if(TMR2IF==1)
        {
                PR2=0X7C;
                TMR2=0;
                j++;
                if(j>=2000)
                {
                        j=0;
                        jcout++;                       
                        if(jcout>1)
                        {
                                jcout=0;
                        }
                        //printdata(jcout);
                }       
                TMR2IF=0;                       
        }

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

14

帖子

0

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