/********************************************************************************************
* 实验四: 外部中断实验
* 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。有什么方法可以解决这个这人问题。。
当然不行了,会导致堆栈溢出,PIC16F877A 只有8级堆栈,经不起这样折腾。
建议你不要在中断中使用该函数,另外延时可用定时器来产生。
-----------------------------------------------------------------------
这只是举例。是不是调用 不在主程序里的函数就可以了?
你想,如果在main中执行了delay,然后发生中断,中断中又调用delay....这时delay就重入了....
-----------------------------------------------------------------------
哦,原来这样,谢谢你。谢谢大家。。
一周热门 更多>