#include<pic.h> #include<stdio.h> #include<math.h> #define key_counter GP3 #define led_control GP1
_CONFIG(INTOSC&WDTDIS&CP&MCLRDIS&INTOSC8);//内部时钟,关闭看门狗,代码保护,关闭MCLR,开8M晶振 /***************************************************************************/ //键盘扫描 /****************************************************************************/ void keyscan() { if(key_counter==1) led_control=1;//lighted the led else { asm("sleep");//if there is no key ,watchdog gets sleeping GIE=1; //关闭所有中断 } } /*************************************************************/ //10us plus /******************************************************************/ void pwm_initial() { led_control=1; for(i=0;i<10;i++) ; led_control=0; for(i=0;i<10;i++); } main() { keyscan); pwm_initial(); TMR0=0;//定时器清零 T0IF=0;//T0清除中断标志位 T0IE=0;TMR0中断允许 TMR0ON=1;//定时器打开 TMR0=200;//500ns中断一次 while(1) { if(key_control==1) { led_control=0;//shut down the led GIE=1;//关闭所有中断 asm("sleep") } else if(counter==200000) break;//wait for interrupt times } led_control=0; T0IE=1;//禁止中断 TMR0=0;//关闭定时器 }
/*********************************************************************/ //中断服务程序 /***********************************************************************/ void interrupt sever() { T0IF=0;//清除中断标志 counter++;//keep up intrrupt times } |