|
各位:<br /> 下午刚写了一个比较简单的小程序,本意是想在TxPort(GP1)上输出一串波形(编码格式跟红外有此类似)。<br /> 有按键按下时,唤醒MCU并输出波形,再Sleep。Sleep时,WDT也会唤醒MCU并判断键是否还被按下,若按下则再输出波形。<br /> 但现在出现当波形输出完毕后,仅100ms左右,GP1又输出波形了,这与我程序设置不符合,程序里设置看门狗唤醒的分频为1:128,应该2.3S后才会出现波形才对。<br /> 下面是完整的原程序,是我哪里欠考虑,到现在还没想出之所以然来,请各位帮帮忙,先谢过了。<br />#include <pic.h><br /><br />__CONFIG(MCLRDIS & WDTEN & PROTECT);<br />#define Key GP0<br />#define TxPort GP1<br /><br /><br />const unsigned char IdCode[]={0xff,0xff,0xff,0xff};<br /><br />void delay(unsigned char DlyCnt){<br /> for(;DlyCnt>0;DlyCnt--){<br /> asm("nop");<br /> asm("nop");<br /> asm("nop");<br /> asm("nop");<br /> asm("nop");<br /> asm("nop");<br /> asm("nop");<br /> asm("nop");<br /> }<br />}<br /><br />void tx_head(void){<br /> TxPort=1;<br /> delay(250);<br /> delay(250);<br /> delay(250);<br /> TxPort=0;<br /> delay(50);<br />}<br /><br />void tx_1(void){<br /> TxPort=1;<br /> delay(150);<br /> TxPort=0;<br /> delay(50);<br />}<br /><br />void tx_0(void){<br /> TxPort=1;<br /> delay(50);<br /> TxPort=0;<br /> delay(50);<br />}<br /><br />void delay_10ms(void){<br /> unsigned char DlyCnt;<br /> for(DlyCnt=4;DlyCnt>0;DlyCnt--)<br /> delay(250);<br />}<br /><br />void transmit_data(){<br /> unsigned char TxCnt,TxBitCnt,TxData;<br /> tx_head();<br /> for(TxCnt=0;TxCnt<4;TxCnt++){<br /> TxData=IdCode[TxCnt];<br /> for(TxBitCnt=0;TxBitCnt<8;TxBitCnt++){<br /> if((TxData & 0x01)==0x01) tx_1();<br /> else tx_0();<br /> TxData>>=1;<br /> }<br /> } <br />}<br /><br />void main(){<br /> GPIO=0x00;<br /> TRISGPIO=0x0d; //0x09; //GP0及GP3为输入<br /> asm("clrwdt");<br /> OPTION=0x5f; //使能引脚电平变化<br /> delay(100);<br /> if(!Key){<br /> delay_10ms();<br /> if(!Key){<br /> asm("clrwdt");<br /> transmit_data();<br /> }<br /> }<br /> asm("sleep");<br /> asm("sleep");<br /> asm("sleep");<br />} |
|