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