STC89系列单片机看门狗的使用及应用程序

合集下载

中断优先及看门狗功能的使用

中断优先及看门狗功能的使用
8/10
本课题的要求
本课题教学完成后,初学者必须做到:
• 自述中断优先的含义。 • 自述中断嵌套的含义。 • 牢记AT89S51中五个中断源的默认优先权顺序。 • 牢记AT89S51中中断优先级寄存器符号、各个位标识符及各位的功能。 • 自述AT89S51看门狗定时复位寄存器的工作特征。 • 牢记看门狗定时器复位寄存器的符号及RAM地址。 • 牢记看门狗功能的启用代码。
课题九
中断优先及看门狗功能的使用
本次课的目标
学习完本课题后,您将能够:
• 使用中断优先级控制寄存器设置中断源优先级别。 • 描述中断优先级在控制系统工作中起到的作用。 • 在需要的时候使用中断优先技术来解决您的问题。 • 在AT89S51中使用看门狗技术来提高您所设计控制系
统的可靠性。
1/10
本次课讲解内容
5/10
2.设置中断优先级的具体方法
使用寄存器IP设置中断优先级,可以使用寄存器寻址、直接寻址和位寻 址。 举例: MOV IP,#01H;外部中断1的优先级别设定为高优先级,其他中断源 为低优先级 MOV 0B8H,#01H;同上 SETB PX0;将外部中断1的优先级别设定为高优先级,其他中断源优先 级不变
6/10
四.AT89S51单片机中看门狗技术
1. AT89S51中有一个14位的看门狗计数器(WDT)和看门狗复位寄存 器(WDTRST)
2. 对WDTRST实施某种写操作,WDT即从零开始计数,每个机器 周期 自动加1 3. 一旦WDT开始计数,除用硬件复位或溢出复位外,无法停止WDT的计数 4. WDT溢出时,在RST引脚输出一个高电平脉冲,并复位单片机 5. 利用看门狗技术的作用之一是程序跑飞后可自动复位控制系统
9/10

STC89C58RD+22.1184MHz晶振+外中断0+红外遥控解码+定时器0+定时器1+定时器2+串口+看门狗

STC89C58RD+22.1184MHz晶振+外中断0+红外遥控解码+定时器0+定时器1+定时器2+串口+看门狗

STC89C58RD+22.1184MHz晶振+外中断0+红外遥控解码+定时器0+定时器1+定时器2+串口+看门狗本程序通过外中断0与定时器0实现红外遥控解码,并通115200波特率的串口将红外遥控的地址码和数据码发送到PC机上的串口助手,同时使用定时器1进行喂狗,防止程序出现异常。

本程序适用于STC系列的单片,ATMEL的单片机基本通用,就是在设置看门狗和定时器2时需要参考ATMEL单片机的手册才行。

//以下程序适用于STC89C58RD+ ,使用22.1184MHz晶振,用1838来对红外遥控器解码,1838的1脚接外中断0脚,即单片机P3.2脚//红外遥控器发出的红外信号经过1838处理后输出的是9.5ms低电平(也可能是4.5ms低电平)加4.5ms高电平的前导码,后面8位的地址码,8位的地址反码(也可能是地址码),8位的数据码,8位的数据反码,总共32位码//其中0码由O.56ms低电平和0.56ms高电平组合而成.脉冲宽度为1.12ms;1码由0.56ms低电平和1.69ms高电平组合而成,脉冲宽度为2.25ms//特别说明:当使用定时器1作为波特率发生器,而定时器2作为16位自动装载的定时器时,定时器2无法正常工作,必须是定时器2作为波特率发生器,定时器1作为定时器用#include<reg52.h>#include<stdio.h>//#include<string.h>unsigned char count;unsigned int Address_Part,Data_Part;unsigned char date;bit Rev_flag;bit Over_flag;sfr WDT_CONTR=0xe1;//STC的看门狗寄存器的地址,ATMEL的芯片看门狗地址不一样sfr T2MOD=0xc9;//定时器2的模式选择寄存器地址//unsigned int time_data[35];//unsigned char time_count;#define WDT_Time 22unsigned char Count_Num=0;void delay(unsigned int z)//延时函数,在22.1184M晶振下没有调试过,只是大概的使用,大概是1个毫秒{unsigned int x,y;for(x=z;x>0;x--)for(y=200;y>0;y--);}void init_config()//初始化函数{// PCON |=0x80;//SMOD=1,定时器1要产生115200波特率必须置位,定时器2则不需要REN=1;//启动串行接收数据SM0=0;SM1=1;//SM0,SM1设置串行口为工作方式1,10位异步收发器-->1位起始位,8位数据,1位停止位TI=1;//要使用printf()函数,就需要置位,后期不能置0T2MOD=0x00;//选择定时器2为向上定时计数器T2CON=0x34;//选择定时器2为16位自动重新装载模式下的波特率发生器,启动定时器2RCAP2H=0xff;//65536-(fosc/(32*baud));//22.1184MHz产生115200波特率,算法和用定时器1做波特率发生器的算法不一样RCAP2L=0xfa;//TMOD=0x11;//设置定时器0为工作方式1,定时器1为方式1TH1=(65536-65000)/256;//定时器初值,大概是35ms进一次定时器中断TL1=(65536-65000)%256;//TR1=1;//启动T1定时器TH0=0x00;TL0=0x00;//设置定时器0初值IT0=1;//设置外中断0为下降沿触发ET0=1;//开定时器0允许中断ET1=1;//开定时器1允许中断EX0=1;//开外中断0//TR0=1;ES=1;//开串口中断EA=1;//开总中断Rev_flag=0;Over_flag=0;printf("Initialization is OK!\n\r");WDT_CONTR=0x35;//看门狗启动,计数清零,晶振为22.1184MHz,64分频,溢出时间为1S}void main()init_config();while(1){// WDT_CONTR=0x35;//看门狗启动,计数清零,64分频,溢出时间为1Sif(Over_flag){Over_flag=0;printf("Address_Part:%x,Data_Part:%x\n\r",Address_Part,Data_Part);}if(Rev_flag)//判断串口接受到数据,只是把从串口调试助手发过来的数据发回去,测试收发用而已{ES=0;Rev_flag=0;SBUF=date;//发送数据while(!TI);//发送数据完毕才跳出死循环ES=1;// TI=0;}/* if(Count_Num>WDT_Time)//0.8秒左右喂狗{Count_Num=0;//WDT_CONTR=0x35;//看门狗启动,计数清零,64分频,溢出时间为1Sprintf("T1!\n\r");}*//* if(time_count==40)//把收到的时间th值传给串口打印出来{time_count=0;printf("time:\n\r");for(;time_count<35;time_count++){printf("%d \n\r",time_data[time_count]);}memset(time_data,0,sizeof(time_data));EX0=1;//开外中断0}*/}}void exter() interrupt 0{unsigned int th;unsigned char tl;bit ds;TR0=0;//关定时器0th=TH0;//提取出高8位tl=TL0;//提取出低8位th<<=8;//左移8位th=th|tl;//算出定时器总共的计数值TH0=0x00;//初始值TL0=0x00;/* time_data[time_count]=th;//这段代码的作用是在不知道th的数值是多少为前导码,为0,为1时,把收到的时间th给提取出来,方便传给串口打印出来,要使用这一功能要把下面判断前导码那些代码给屏蔽,并且开启主函数里面的那段代码time_count++;if(time_count==35){time_count=40;EX0=0;}TR0=1;*//*这段判断前导码和0、1的值是12M晶振下的if(th>950&&th<1225)ds=0;//判断0和1else if(th>2050&&th<2345)ds=1;else if(th>13325&&th<13600)//判断前导码*///这段判断前导码和0、1的值是22.1184M晶振下的if(th>1900&&th<2260)ds=0;//判断0和1else if(th>4000&&th<4300)ds=1;else if(th>24900&&th<25350)//判断前导码{Address_Part=0;Data_Part=0;count=0;Over_flag=0;TR0=1;return;}else{TR0=1;return;}//去除干扰,当接收的是准备进前导码时的下降沿和截止码时,该语句起作用,没有该语句,则只能接收一次count++;if(count<16){Address_Part=Address_Part|ds;Address_Part=Address_Part<<1;TR0=1;}else if(count==16){Address_Part=Address_Part|ds;TR0=1;}else if(count<32){Data_Part=Data_Part|ds;Data_Part=Data_Part<<1;TR0=1;}else if(count==32){Data_Part=Data_Part|ds;Over_flag=1;}//接收完32位,后面应该有连续码,但不需要,所以不作处理}void time0() interrupt 1//要是没有该函数,可能会因为溢出而导致解码不正确{TR0=0;}void ser() interrupt 4{if(RI)//一定要加该判断句,不然串口调试助手那里会一直收到数据{RI=0;date=SBUF;//提取数据Rev_flag=1;}}void timer1() interrupt 3{TH1=(65536-65000)/256;//定时器初值;TL1=(65536-65000)%256;//Count_Num++;// printf("T2!\n\r");if(Count_Num>WDT_Time)//0.8秒左右喂狗{Count_Num=0;WDT_CONTR=0x35;//看门狗启动,计数清零,64分频,溢出时间为1S}}。

单片机看门狗的描述

单片机看门狗的描述

单片机看门狗的描述下面是关于STC89C5XX-51 单片机看门狗的描述WDT_CONTR 位置0xE1; [-] [-] [EN_WDT] [CLR_WDT] [IDLE_WDT] [PS2] [PS1] [PS0]EN_WDT: 看门狗允许位,置1 启动看门狗,看门狗不能自动启动,需要设置该位后启动,一旦启动不能关闭(只能系统重新上电和看门狗复位可以关闭)CLR_WDT: 看门狗计数器清零位,置1 清零看门狗计数器,当计数器开始重新计数,硬件清零该位。

IDLE_WDT: 单片机IDLE 模式看门狗允许位,当IDLE_WDT=1 时,单片机在IDLE 模式(空闲模式)依然启用看门狗PS2~PS0: 看门狗定时器预分频器,下表中Prescale 表示预分频数PS2 PS1 PS0 Prescale0 0 0 20 0 1 40 1 0 80 1 1 161 0 0 321 0 1 641 1 0 1281 1 1256看门狗溢出时间:(N*Prescale*32768)/晶振频率,其中N 表示指令周期数N=12 表示12 时钟周期模式;N=6 表示6 时钟周期模式。

如N=12,晶振频率为12MHz,PS2~PS0 为100 时,溢出时间=(12*32*32768)/12=1048576us,差不多是1s。

例如:给WDT_CONTR 写入0 乘以34,即是激活看门狗,同时预分频数设为32。

喂狗过程也是一样的。

顺便说一下ATMEL-51 单片机的看门狗下面是关于ATMEL-51 单片机看门狗的描述【看门狗计数器】(watchdog timer)是一个14 位的计数器,它以机器周期(晶振频率/12)增加,当计数值计满(16383/0 乘以3FFF)了就使单片机软复位;当启动了【看门狗计数器】之后,我们需要在它计数没有满之前复位计数器强制。

STC单片机看门狗功能的验证

STC单片机看门狗功能的验证
CLR IE0 ;清中断标志,读操作过程中有低电平脉冲
SETB EX0 ;允许键盘中断
RET
END
上电实物图:
6.出现的问题及解决方法
7.心得体会及建议
;子程序调用
;****************************************************************************
; 初始化子程序
CH451_INIT:
CLR CH451_DIN ;先低后高,输出上升沿通知 CH451 选择 4 线串行接口
SETB CH451_DCLK ;置为默认的高电平
SETB CH451_DIN
SETB CH451_LOAD
SETB CH451_DOUT ;置为输入
CLR IT0 ;置外部信号为低电平触发
SETB PX0 ;置高优先级或者低优先级
CLR IE0 ;清中断标志
SETB EX0 ;允许键盘中断
MOV B,#04H ;设置为键盘与显示开
MOV A,#03H
SUM DATA 7EH ;定义要用的变量
A1 DATA 7CH
A2 DATA 7BH
A3 DATA 7AH
A4 DATA 79H
DEDADATA 75H
SECDATA 74H
MINDATA 73H
WDT_CONTR EQU 0C1H;看门狗地址
;Pre_scale_Word EQU 00111111B ;清0,启动看门狗,预分频数=64, 1.1377S
CLR CH451_DCLK
MOV CH451_DIN,C ;送出一位数据
SETB CH451_DCLK ;产生时钟上升沿锁通知 CH451 输入位数据

单片机看门狗(Watchdog)的工作原理及其应用

单片机看门狗(Watchdog)的工作原理及其应用

单片机看门狗(Watchdog)的工作原理及其应用2010年05月16日星期日 23:00在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环。

程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果。

所以,出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog)。

看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行。

这个时候,看门狗电路就会由于得不到单片机送来的信号。

便在它和单片机复位引脚相连的引脚上送出一个复位信号。

使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。

看门狗,又叫 watchdog timer,是一个定时器电路。

一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU 正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零。

如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,是MCU复位,防止MCU死机。

看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。

所以,在使用有看门狗的芯片时要注意清看门狗。

STC系列单片机看门狗

STC系列单片机看门狗
(不要问我为什么,他们就是这么设计的,我 们就这么用就行)。
其中N是单片机的时钟周期,STC89C5X系列单 片机提供6时钟周期和12时钟周期两种时钟周 期,可以在烧写程序时修改;
Prescale是预分频数,通过设置【看门狗控制 寄存器】可以设置为2、4、8、16、32、64、 128、256;怎么设置演示程序中有介绍;
次,用于判断系统是否重启

i=0;

while(str[i]!='\];

while(TI==0);

TI=0;

i++;

}
//while大循环

while(true)

{

//约每隔800ms喂一次狗,可以通过调整这里的喂
狗时间来验证看门狗是否有效

//我们设置的看门狗约1秒。所以可以用800和2000
{

//初始化时两盏灯都熄灭

LED=1;

LED_busy=1;

TMOD=0x21;
//定时器0工作在方式1,作
为16位定时器;定时器1工作在方式2,作为串行口波特率发生器

TH0=0x4C;
50ms溢出一次
//定时器0装初值:每隔

TL0=0x00;

IE=0x82;
时器0中断
//IE=(1000 0010)B, 使能定

TR0=1;
//启动定时器0
}
//串行口初始化程序
void InitCOM()
{
SCON=0x50;
//SCON=(0101
0000)B,波特率不加倍,允许接收

单片机应用系统中的_看门狗_电路及低成本实现

单片机应用系统中的_看门狗_电路及低成本实现

, 看 门 狗 电路 如 图 1 所 示. 图 中
! 63!
2008 年
商丘职业技术学院学报
74LS123 触发器的输入端接高电平 , 负脉冲触发 . 第一个触发器工作状态由单片机 P1 口的 P1 . 7 控制, 系统 开始工作时 , P1 . 7 向 2A 端输入一个负脉冲, 使 2Q 端产生一个正跳变, 但并不能触发第二个单稳态触发器 动作, 1Q 端仍为低电平. P1 . 7负触发脉冲的时间间隔取决于系统控制主程序运行周期 . 在单片机应用系统 应用程序设计中 , 软件流程要设计成循环结 构. 发出喂狗信号的指令包 含在主程序中, 使用 CLR P1 . 7和 SETB P1. 7 两条指令. 如果主程序运行周期小于单稳态触发器的暂态时间 , 则当单片机正常运行时 , 将不断 重新触发第二个单稳态触发器, 其输出端 2Q 端始终保持高电平, 1A 端保持高电平 , 第一个单稳态触发器就 不会产生动作. 如果单片机受到干扰 , 产生了死循环, 那么第二单稳态触发器的暂态时间内 , 就不会出现送 给 2A 端的负脉冲 , 第二个单稳态触发器脱离暂态 , 2Q 端回到低电平触发第一个单稳态触发器翻转到暂态 , 1Q 端产生脉冲信号, 使单片机可靠复位, 系统运行的可靠性大大提高.
[ 2 ] 374- 375
.
图 2 由计数器构成的 看门狗 电路
2 . 3 由门电路构成 看门狗 电路 在电路的设计中往往会有多余的门电路, 这时可以用作 看门狗 电路 , 既降低了成本, 又提高了电路的 可靠性 . 电路形式可以有很多种 , 特别在 89C1051 / 2051 的应用电路中, 利用其 P1 . 0 /P1. 1 口没有上拉电阻 的特点 , 可以用两个 CMOS 门电路 ( 本例中是六反相器 CD4069 中的两个空余反相器 ) 设计一个极简单的低 成本 看门狗 电路, 如图 3 . 由于需要的定时时间比较长 , 因此只能使用输入阻抗高的 CMOS 门电路, 当然也 ! 64!

stc单片机看门狗程序的运用

stc单片机看门狗程序的运用

stc单片机看门狗程序的运用STC单片机是一款增强型51单片机,彻底兼容MCS-51,还添加了新的功用,比方新增两级接连优先级,多一个外接连,内置EEPROM,硬件看门狗,具有掉电办法,512B内存等。

还支撑ISP下载,不必编程器,只需一个MAX232和一些便宜的元件就能写程序,可擦写10万次。

因而是一款极好用的单片机。

在这儿,简略阐明一下其看门狗的运用。

STC单片机的看门狗一旦主张,就不能接连,其看门狗溢出时刻能够运用STC单片机用户手册核算,其简略举例如下:#include//STC单片机头文件#defineuintunsignedint#defineucharunsignedcharsbitled=P1^0;//===================================================== ============//函数称谓:voiddelay(uintus)//函数功用:延时//进口参数:us延不时刻的长短//出口参数:无//===================================================== ============voiddelay(uintus){while(us--);}main(){WDT_CONTR=0x3c;//主张看门狗led=1;//点亮LEDdelay(100);led=0;delay(100);//停息LEDwhile(1){WDT_CONTR=0x3c;//喂狗,若屏蔽掉该位,则看门狗溢出后复位,LED灯不断闪耀}}这个程序很简略,简略的我都感受欠好意思写这个程序了。

在这儿,权当是介绍STC单片机,说一下STC单片机的看门狗功用,让咱们开端了解这款单片机,这款单片机将是我将来三个月用的首要类型,在这三个月里我将接连用这款单片机写一些程序,做一些小东东。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STC89 系列单片机看门狗的使用及应用程序
看门狗概念及其应用在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称看门狗(watch dog)。

加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O 引脚相连,该I/O 引脚通过单
片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。

通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,这在我们的单片机教程网51hei 以前做过相关的电路介绍。

不过这样会给电路设计带
来复杂,STC 单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置
就可实现看门狗的应用,STC89 系列单片机内部有一个专门的看门狗定时器
寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。

相关文档
最新文档