今天小编要和大家分享的是控制,MCU相关信息,接下来我将从如何用软件实现单片机的系统复位,ps4完胜 看门狗及巫师3次世代版分辨率曝光这几个方面来介绍。
控制,MCU相关技术文章如何用软件实现单片机的系统复位
在单片机构成的系统中,由于单片机的工作有可能受到来自外来电磁场的干扰而出现程序跑飞的现象,从而陷入死循环,出于对单片机运行状态进行实时性的监控的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称看门狗(watch dog)
看门狗的工作过程如下:
看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过单片机的程序控制,使他定时的往看门狗芯片的这个引脚送入高电平(或者是低电平)这一个程序语句是分散在单片机的其他控制语句中的,一旦单片机由于干扰造成程序跑飞而陷入死循环时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便对他送入一个复位信号,使单片机从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。
示例代码:
用软件观察看门狗的喂狗现象:如果在while循环中屏蔽这一局,那么在看门狗的作用下,程序将会不断
//不断的复位,这是看到的现象是在看门狗的作用下,led灯不断的闪烁
#include
#define uchar unsigned char
#define uint unsigned int
sfr WDT_CONTR = 0xe1;//51系列的单片机的看门狗的位置
sbit led1 = P1^0;
void delayms(uint x)
{
uint i,j;
for(i = x;i》0;i--)
for(j = 110;j》0;j--);
}
main()
{
WDT_CONTR = 0x35;//0011 0101表示喂狗,时间是2.095m要喂一次
led1 = 0;
delayms(500);
led1 = 1;
while(1)
{
delayms(1000);
// WDT_CONTR = 0x35;如果在while循环中屏蔽这一局,那么在看门狗的作用下,程序将会不断
//不断的复位,这是看到的现象是在看门狗的作用下,led灯不断的闪烁
}
}
看门狗的寄存器为WDT_CONTR,字节地址是e1,不能位寻址,实现喂狗功能一般是在程序中插入
sfr WDT_CONTR = 0xe1 ;
WDT_CONTR= 0x35;//0011 0000这里可以查看专门的书籍看寄存器的相关位的设置