<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[89S51看门狗功能的使用方法，AT89S52单片机看门狗C语言程序 ，AT89S52 中看门狗的使用。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[系统架构与硬件]]></category>
<pubDate>Thu, 30 Aug 2012 13:10:50 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	在ATMEL的89S51系列的89S51与89C51功能相同，指令兼容。HEX程序无需任何转换可以直接使用。89S51只比89C51增加了一个看门狗功能。<br/>向看门狗寄存器（WDTRST地址是0A6H）中先写入01EH，再写入0E1H，即可激活看门狗。<br/>汇编程序如下：<br/>Mov 0A6H,#01EH ;先送1E<br/>Mov 0A6H,#0E1H ;后送E1<br/>C51程序如下：<br/>在AT89X51.h声明文件中增加一行 sfr WDTRST = 0xA6来声明看门狗寄存器。<br/>sfr WDTRST = 0xA6;<br/><br/><br/>Main()<br/>&#123;<br/>WDTRST=0x1E; //先送1E<br/>WDTRST=0xE1; //后送E1<br/>喂狗指令与激活相同：<br/>WDTRST=0x1E;<br/>WDTRST=0xE1;<br/>注意事项：<br/>1． 89S51的看门狗必须由程序激活后才开始工作。<br/>2． 看门狗使用的是CPU的晶振。在晶振停振的时候看门狗也无效。<br/>3． 89S51只有14位计数器。在16383个机器周期内必须至少喂狗一次。而且这个时间是固定的，无法更改。当晶振为12M时每16个毫秒需喂狗一次。<br/><br/><br/>在C语言中要增加一个声明语句。<br/>在AT89X51.h声明文件中增加一行 sfr WDTRST = 0xA6;<br/>Main()<br/>&#123;<br/>WDTRST=0x1E;<br/>WDTRST=0xE1;//初始化看门狗。<br/>While (1)<br/>&#123;<br/>WDTRST=0x1E;<br/>WDTRST=0xE1;//喂狗指令<br/><br/>&#125;<br/>&#125;<br/><br/>注意事项：<br/>1． 89S51的看门狗必须由程序激活后才开始工作。所以必须保证CPU有可靠的上电复位。<br/>否则看门狗也无法工作。<br/>2． 看门狗使用的是CPU的晶振。在晶振停振的时候看门狗也无效。<br/>3． 89S51只有14位计数器。在16383个机器周期内必须至少喂狗一次。而且这个时间是固<br/>定的，无法更改。当晶振为12M时每16个毫秒需喂狗一次。<br/>以上程序我已调试通过。还利用定时器把看门狗的喂狗时间延长几秒至几分钟。<br/><br/>http://ajazz.blog.163.com/blog/static/91805986200971123433222/<br/><br/>下面是示例：http://blog.chinaunix.net/uid-21127577-id-1830345.html<br/>用C语言编写的单片机程序，经调试正确通过。<br/> watchdog.h:<br/><textarea name="code" class="php" rows="15" cols="100">
#include &lt;reg52.h&gt;
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sfr WDTRST = 0xA6;&nbsp;&nbsp;&nbsp;&nbsp; //定义AT89S52扩展寄存器
 
/*********************************************************/ 
/*函数名字：wdtclear&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ 
/*输入参数：无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;
/*输出参数：无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ 
/*功能描述：喂狗指令&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;
/*创建日期: 2009-04-25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp; 
/*********************************************************/
void wdtclear(void)
&#123;
 WDTRST=0x1E;
 WDTRST=0xE1;
&#125;
 
/*********************************************************/ 
/*函数名字：delay_nms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */ 
/*输入参数：延时毫秒周期参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;
/*输出参数：无&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ 
/*功能描述：延时 n 毫秒&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp;
/*创建日期: 2009-04-25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp; 
/*********************************************************/
void delay_nms(unsigned int n)
&#123;
 unsigned int i;
 unsigned int ii;
 for(i=0;i&lt;n;i++)
 &#123;
&nbsp;&nbsp;for(ii=0;ii&lt;1000;ii++);
&nbsp;&nbsp;wdtclear();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LED1闪烁. 注释掉这条语句后，LED1常亮
&nbsp;&nbsp;
 &#125;
&#125;
 
watchdog.c:
#include &quot;watchdog.h&quot;
main()
&#123;
 unsigned int i;
 WDTRST = 0x1E;&nbsp;&nbsp;//开看门狗，包含两条指令。一旦开看门狗就没有办法关闭。
 WDTRST = 0xE1;

 LED1 = 0;
 while(1)
 &#123;
&nbsp;&nbsp;LED1 = 0;
&nbsp;&nbsp;delay_nms(100); //超过16毫秒不喂狗，看门狗溢出复位。
&nbsp;&nbsp;LED1 = 1;
&nbsp;&nbsp;delay_nms(100);
 &#125;
&#125;
</textarea>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 89S51看门狗功能的使用方法，AT89S52单片机看门狗C语言程序 ，AT89S52 中看门狗的使用。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>