打印
[PIC®/AVR®/dsPIC®产品]

12F675记录唤醒次数失败。只成功记录一次,附上代码请高人指点下

[复制链接]
1014|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gbook|  楼主 | 2014-12-7 16:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目标是每次唤醒STEP加1,从而改LED闪烁次数,现在是每次唤醒都得1,尝试过声明全局变量和“易变”变量都不行,有哪需要修改的请指点一下
#include <htc.h>
#include <pic.h>
// 加溶丝配置
__CONFIG (INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT & UNPROTECT & BOREN);
#define        iOut                GPIO0
#define        iKey        GPIO3
volatile unsigned int STEP=0;//默认一直闪
void interrupt isr();
//抖动延时
void delayms()
{
int t=50;
    while(t--){;}

}

void delay(unsigned char ti)
{
while(ti--) {
int i;
for(i=1150;i>0;i--){
if(iKey==0){
iOut=0;


    delayms();            //防抖动延时

    if(iKey==0)           //是否需要变模,再次检测按键闭合情况
    {


SLEEP();        //按键闭合,则
NOP();

    }

}
        }
}
}


void interrupt isr(void)//中断函数。
{

if(GPIF==1){
        STEP++;//改变LED次数
           iOut=1;delay(1);iOut=0;delay(2);//唤醒标志快闪1下
GPIF=0;//清标志

}
}


//主函数
void main()
{
        OSCCAL =_READ_OSCCAL_DATA();
        CMCON = 0x07;   // 关闭比较器
        ANSEL=0x00;
        OPTION=0b00001111;
        TRISIO = 0b11111110; // GP0输出
        INTCON=0b10001000;
        IOCB = 0b00001000;  // GP3引脚电平变化引起中断

        unsigned int i;
        //WPU = 0;  // 禁止弱上拉
while(1)
  {

switch(STEP){//默认一直闪CLRWDT();
case 0:
        iOut=1;
        delay(1);
        iOut=0;
        delay(2);
   break;

default:
for(i=0;i<=STEP;i++){//几次唤醒闪几次

iOut=0;delay(20);
iOut=1;delay(20);
}
iOut=0;delay(35);
   break;
}
}                  
}
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

25

帖子

0

粉丝