打印

用PICKIT3调试PIC4580不能在中断里设置断点,其他位置可以

[复制链接]
1438|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a932265643|  楼主 | 2016-7-12 14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用PICKIT3调试PIC4580不能在中断里设置断点,其他位置可以,之前用ICD3可以在中断里设置断点,请问是什么原因啊
沙发
JY-DX-JY| | 2016-7-12 18:04 | 只看该作者
中断函数怎么写的?

使用特权

评论回复
板凳
a932265643|  楼主 | 2016-7-12 18:08 | 只看该作者
JY-DX-JY 发表于 2016-7-12 18:04
中断函数怎么写的?

void interrupt UART_ISR() // interrupt 4 , ?????,????
{
    uchar tt;   
    if(1 == RCIF)
   {               
        if(recei_over_flag==0)   //允许接收下条命令   
        {
            tt = RCREG;
            RCIF = 0;
            switch(recei_count)
            {
                case 0:
                {
                    rxdata[0]=RCREG;
                    if(rxdata[0]=='@')
                    {
                        recei_count++;
                        
                    }
                    else
                    {
                        recei_count=0;
                    }
                    
                }
                break;
                case 1:
                {
                    rxdata[1]=RCREG;
                    if(rxdata[1]=='C'||rxdata[1]=='A'||rxdata[1]=='R')
                    {
                        recei_count++;

                    }
                    else
                    {
                        recei_count=0;
                    }
                  
                }
                break;
                case 2:
                {
                    rxdata[2]=RCREG;
                    if(rxdata[2]==InstrAdr0)//判断接收到的第二个字符是不是地址高位InstrAdr0
                    {
                        recei_count++;//如果是InstrAdr0,则继续接收
                        
                    }
                    else if        (rxdata[1]=='A' && rxdata[2]==0x0d)//判断接收到的是不是@A(cr),即读取设备地址
                    {
                     
                        recei_over_flag=1;
                        
                        //INTCONbits.GIE = 0;
                        //recei_count=0;//如果是,则接收到@A(cr)设备读取的命令                        
                    }
                    else
                    {
                        recei_count=0;//?????InstrAdr0???????????????
                    }
                }         
                break;
                case 3:
                {
                    rxdata[3]=RCREG;
                    if(rxdata[3]==InstrAdr1 && rxdata[2]==InstrAdr0)
                    {   
                        recei_count++;
                    }
                    else
                    {
                        recei_count=0;
                    }       
                    
                }         
                break;
                default:
                    rxdata[recei_count]=RCREG;
                    if(recei_count>7)     //最多7个字符   
                    {
                        recei_count=0;
                        
                    }  
                    else if(rxdata[recei_count]==0x0d)
                    {
               
                        recei_over_flag=1;   //??????   
                        
                        //INTCONbits.PEIE = 0;     // ??????   
                        //recei_count=0;
                       
                    }
                    else
                    {
                        recei_count++;
                    }
                break;       
            }
        }
    }   

}

使用特权

评论回复
地板
XIEYUANBIN| | 2016-7-15 12:59 | 只看该作者
不能进入是编译器认为你这个程序没用,帮你优化掉了,估计是你没设置好中断,看上图你的中断名称不对吧

使用特权

评论回复
5
XIEYUANBIN| | 2016-7-15 12:59 | 只看该作者
中断名称有专用的名称,不需要你自己去对应中断向量,一般在对应芯片型号的 *.gld文件中有注明

使用特权

评论回复
6
a932265643|  楼主 | 2016-7-23 11:20 | 只看该作者
XIEYUANBIN 发表于 2016-7-15 12:59
中断名称有专用的名称,不需要你自己去对应中断向量,一般在对应芯片型号的 *.gld文件中有注明 ...

这个.gld文件在哪里可以找到?

使用特权

评论回复
7
XIEYUANBIN| | 2016-7-23 14:05 | 只看该作者
a932265643 发表于 2016-7-23 11:20
这个.gld文件在哪里可以找到?

XC的安装文件夹 的SUPPORT文件夹中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

22

帖子

0

粉丝