PIC16f767单片机在中断程序里怎么不能调用函数?

2020-02-08 09:25发布

/********************************************************************************************
* 实验四:   外部中断实验
* CPU型号: PIC16F877A
* 晶振:    4MHz
* 说明:     用MPLAB IDE V8。53       HI-TECH PICC编译
* 作    者:MCU.2000
* 日    期:2009年8月8号
*********************************************************************************************/
//#include <pic.h>        //调用头文件
#include <pic1687x.h>
//__CONFIG(0x3F32); //芯片配置字
//__CONFIG(HS&UNPROTECT&PWRTEN&BORDIS&WDTDIS);//芯片配置字
//__CONFIG(0x3FFD&0x3FFF&0x3FF7&0x3FBF&0x3FFB);//芯片配置字

#define        uchar  unsigned        char
#define uint   unsigned int
void delay(uchar a,uchar i);
void interrupt INT(void);
uchar temp;
void main (void)
{
     OPTION=0X00;
     TRISA=0Xc0;   //RA0设为输出(D301指示进入中断)

     INTE=1;       //INT外部中断允许位
     GIE=1;         //开放全局中断
     PEIE=1;       //使能外部中断
     RA0=1;        //LED灭
     
     while(1)      //等待中断
     {
        // delay(12,34);///////////////////在这里加上这个函数,就编译出错。
           。
           。
            。
     }
}
//中断函数
void interrupt INT(void)
{
  if(INTE && INTCON)   //判断是否为外部中断
   {
        INTF=0;        //清除中断标志
        temp=~temp;
        PORTA=temp;         //点亮LED D301     
        delay(255,255);
        delay(255,255);
   }
}  

////////////延时子函数/////////////////
void delay(uchar a,uchar i)
{       
    while(--a)
    while(--i);
}


(原文件名:untitled.JPG)


要向大侠们请教的问题是:1。主程序里while()循环语句里加上delay(12,34);函数,为什么会编译出错,出错如图。
                         2。有什么方法可以解决这个这人问题。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
millwood0
1楼-- · 2020-02-08 14:33
 精彩回答 2  元偷偷看……
luolj
2楼-- · 2020-02-08 19:37
同学,你在中断程序和背景程序中同时调用delay(12,34),
当然不行了,会导致堆栈溢出,PIC16F877A 只有8级堆栈,经不起这样折腾。


建议你不要在中断中使用该函数,另外延时可用定时器来产生。
boming
3楼-- · 2020-02-09 00:38
回复【2楼】luolj 倚天健
-----------------------------------------------------------------------

这只是举例。是不是调用 不在主程序里的函数就可以了?
snoopyzz
4楼-- · 2020-02-09 02:13
原因很简音,因为会发生重入的....PIC的RAM小,PICC生成的函数是不允许重入的....

你想,如果在main中执行了delay,然后发生中断,中断中又调用delay....这时delay就重入了....
boming
5楼-- · 2020-02-09 04:58
回复【4楼】snoopyzz
-----------------------------------------------------------------------

哦,原来这样,谢谢你。谢谢大家。。
yklstudent
6楼-- · 2020-02-09 09:50
 精彩回答 2  元偷偷看……

一周热门 更多>