请教10f200看门狗问题

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

请教10f200看门狗问题

今天试下来,10F200在执行SLEEP后不光将预分器给清0了,也次预分频给清0了。这跟16F616好像有点差别的。<br /><br />各位是否有其它意见???
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

64

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部