打印

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

[复制链接]
423|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
NOKOL520|  楼主 | 2019-8-22 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 NOKOL520 于 2019-8-22 15:37 编辑

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

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

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

__CONFIG(0xE0F1);   //30F5

//void delay(uint x);
void init();
uint get_ad(uchar y);
void monitor();
void key_scan();
void sentchar(uchar data1);
void printcom(const uchar *dat);
void printdata(uint dat);
uint filter();

void main()
{
        init();
        while(1)
        {        
                k++;               
                RD1=!RD1;               
                if(k>=1000)
                {
                        k=0;
                        monitor();
                        //TMR1IE=!TMR1IE;
                        //TMR1ON=TMR1IE;
                }               
                key_scan();        
        }
}
/*void delay(uint x)
{
        uint a,b;
        for(a=x;a>0;a--)
                for(b=110;b>0;b--);
}*/
void init()                                        //初始化:4MHZ,AD, PWM,uart,定时器012
{
        OSCCON=0x67;        
        TRISA=0x0f;
        TRISB=0x01;
        TRISC=0xc0;
        TRISD=0;
        PORTA=0;
        PORTB=0;
        PORTC=0;
        PORTD=0xE1;
        TXSTA=0x24;
        RCSTA=0x90;
        SPBRG=25;        
        RCIE=1;

        
        ANSEL=0x28;
        ADIE=1;
        ADCON0=0x05;
        ADCON1=0x9e;
        
        OPTION=0X07;
        TMR0=61;
        T0IE=1;
        INTCON=0xa0;
        GIE=1;
        PEIE=1;
        PIE1=0X03;
        T2CON=0X1C;
        //TMR2IE=0;
        TMR2ON=1;
        CCPR1L=0x5b;                        //C8
        CCP1CON=0x0C;
        //TMR2=0;
        PR2=0x7C;
        T1CON=0x01;        
        TMR1L=(65536-200)%256;
        TMR1H=(65536-200)/256;
        //delay(10);
        T1CON=0;        
        PORTD=0x81;
}
uint get_ad(uchar y)                                //AN1---133,AN3---141
{--ADC--}
void monitor()
{--调用ADC和平均值+判定---}
void key_scan(){---按键扫描----}
void sentchar(uchar data1){---发送数据---}
void printcom(const uchar *dat){----发送字符串----}
void printdata(uint dat){ ----发送变量值----}
uint filter(){----去除最大和最小后取平均值----}
void interrupt T1()
{
     if(TMR1IF==1)
     {
          p=data[jcout];
          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

粉丝