用C语言写一个看门狗程序测试

最新更新时间:2023-01-13来源: zhihu关键字:C语言  复位 手机看文章 扫描二维码
随时随地手机看文章

用STC的MCU的IO方式控制74HC595驱动8位数码管。

用户可以修改宏来选择时钟频率.

显示效果为: 显示秒计数, 5秒后不喂狗, 等复位.

#define MAIN_Fosc 22118400L //定义主时钟

#include "STC15Fxxxx.H"

#define DIS_DOT 0x20

#define DIS_BLACK 0x10

#define DIS_ 0x11

#define Timer0_Reload (65536UL -(MAIN_Fosc / 1000)) //Timer 0 中断频率, 1000次/秒

u8 code t_display[]={ //标准字库

// 0 1 2 3 4 5 6 7 8 9 A B C D E F

0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,

//black - H J K L N o P U t G Q r M y

0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,

0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46}; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码

sbit P_HC595_SER = P4^0; //pin 14 SER data input

sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock

sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock

u8 LED8[8]; //显示缓冲

u8 display_index; //显示位索引

u16 ms_cnt;

u8 tes_cnt; //测试用的计数变量

void delay_ms(u8 ms);

void DisplayScan(void);

void main(void)

{

u8 i;

P0M1 = 0; P0M0 = 0; //设置为准双向口

P1M1 = 0; P1M0 = 0; //设置为准双向口

P2M1 = 0; P2M0 = 0; //设置为准双向口

P3M1 = 0; P3M0 = 0; //设置为准双向口

P4M1 = 0; P4M0 = 0; //设置为准双向口

P5M1 = 0; P5M0 = 0; //设置为准双向口

P6M1 = 0; P6M0 = 0; //设置为准双向口

P7M1 = 0; P7M0 = 0; //设置为准双向口

display_index = 0;

for(i=0; i<8; i++) LED8[i] = DIS_BLACK; //全部消隐

tes_cnt = 0;

ms_cnt = 0;

LED8[7] = ms_cnt;

while(1)

{

delay_ms(1); //延时1ms

DisplayScan();

if(tes_cnt <= 5) //5秒后不喂狗, 将复位,

WDT_CONTR = (D_EN_WDT + D_CLR_WDT + D_WDT_SCALE_16); // 喂狗

if(++ms_cnt >= 1000)

{

ms_cnt = 0;

tes_cnt++;

LED8[7] = tes_cnt;

}

}

}

void delay_ms(u8 ms)

{

u16 i;

do{

i = MAIN_Fosc / 13000;

while(--i) ; //14T per loop

}while(--ms);

}

void Send_595(u8 dat)

{

u8 i;

for(i=0; i<8; i++)

{

dat <<= 1;

P_HC595_SER = CY;

P_HC595_SRCLK = 1;

P_HC595_SRCLK = 0;

}

}

void DisplayScan(void)

{

Send_595(~T_COM[display_index]); //输出位码

Send_595(t_display[LED8[display_index]]); //输出段码

P_HC595_RCLK = 1;

P_HC595_RCLK = 0; //锁存输出数据

if(++display_index >= 8) display_index = 0; //8位结束回0

}


关键字:C语言  复位 编辑:什么鱼 引用地址:用C语言写一个看门狗程序测试

上一篇:用汇编语言做一个看门狗测试
下一篇:用汇编语言写一个LCD1602驱动显示程序

推荐阅读

单片机自动复位原因_单片机复位电路为什么不能复位
  单片机自动复位原因  单片机自动复位常见的原因有:  1.掉电或电压过低(我用STC单片机的时候遇到过因为电源电压过低而导致自动复位的情况)  2.程序跑飞或者死机后,由看门狗引发的复位  3.复位引脚接收到复位信号(人工产生或者外部看门狗等电路产生)  4.STC89C52RC单片机在使用汇编语言编程时,出现类似C语言中函数递归的语句时,可以自动复位。这个我在实验时看到过这个现象,但具体原因不明,我没有使用看门狗。  5.有些单片机可以在程序控制下自动复位。  单片机复位电路不能复位的原因  STM32f0按键模块电路经常遇到上电不复位的情况,芯片采用的是stm32f030,按键模块采用ZLG7290芯片、4X4按键LED矩阵
发表于 2023-01-31
单片机自动<font color='red'>复位</font>原因_单片机<font color='red'>复位</font>电路为什么不能<font color='red'>复位</font>
使用单片机实现复位电路的资料详细说明
单片机现了“死机”、“程序跑飞”等现象,这主要是单片机复位电路设计不可靠引起的。图1是一个单片机与大功率LED八段显示器共享一个电源,并采用微分复位电路的实例。在这种情况下,系统有时会出现一些不可预料的现象,如无规律可循的“死机”、“程序走飞”等。而用仿真器调试时却无此现象发生或极少发生此现象。又如图2所示,在此图中单片机复位采用另外一种复位电路。在此电路的应用中,用户有时会发现在关闭电源后的短时间内再次开启电源,单片机可能会工作不正常。这些现象,都可认为是由于单片机复位电路的设计不当影响单片机系统运行稳定性的因素可大体分为外因和内因两部分:1、外因射频干扰,它是以空间电磁场的形式传递 在机器内部的导体(引线或零件引脚)感生出相应的
发表于 2023-01-31
使用单片机实现<font color='red'>复位</font>电路的资料详细说明
单片机欠压复位问题的解决
  欠压复位(以下称为BOR)是单片机可靠性的一项重要功能,通常用于解决电源问题,下面将介绍欠压复位的另一个问题。  单片机的“电量不足”是电源电压不足或暂时降低,低于可靠运行所需的水平。许多单片机具有保护电路,该电路可检测电源电压何时低于此水平,并将设备置于复位状态,以确保在电源恢复时正确启动。此操作也称为“欠压复位”,英文缩写为“BOR”。类似的功能称为低电压检测(LVD),它更复杂,增加了对多个电压电平的检测,可以在触发复位之前产生中断。  BOR通常由控制寄存器中的某个位使能。通常,当BOR引起复位时,状态位会置1。该状态位在复位后仍然有效,并允许程序检测到问题并执行其他恢复或记录事件。  如果BOR被禁用会怎样?一般情况下
发表于 2023-01-31
单片机欠压<font color='red'>复位</font>问题的解决
几个小妙找教你解决单片机复位层出不穷的问题
在单片机的使用中,经常会接触到复位电路,它是单片机最小系统重要的一个构成部分。同样它也是非常重要的一部分。复位就是让单片机从初始化状态开始重新运行,即程序从头开始执行。复位电路设计的好坏,直接影响整个系统是否稳定可靠。复位电路与单片机的RESET/NRST引脚相连,拿STM32系列单片机举例,当系统正常工作时,如果RESET引脚电压低于某一阈值,则单片机进入复位状态。单片机的复位可分为低电平复位和高电平复位,这是由厂家决定的,区分的方式可以看数据手册,手册中的复位章节会写清楚是什么电平复位。单片机的复位可以分为:上电复位、掉电复位、软件复位、外部手动复位等。上电复位:单片机每次上电都会给RESET脚一个复位信号,让单片机从一个固定的
发表于 2023-01-31
几个小妙找教你解决单片机<font color='red'>复位</font>层出不穷的问题
详解单片机复位电路的作用及设计
什么是复位单片机复位电路的作用是:使单片机恢复到起始状态,让单片机的程序从头开始执行,运行时钟处于稳定状态、各种寄存器、端口处于初始化状态等等。目的是让单片机能够稳定、正确的从头开始执行程序。为什么要加复位?数字电路中寄存器和RAM在上电之后默认的状态和数据是不确定的,如果有复位,我们可以把寄存器复位到初始状态,RAM 的数据可以通过复位来触发 RAM 初始化程序逻辑如果进入了错误的状态,通过复位可以把所有的逻辑状态恢复到初始值,如果没有复位,那么逻辑可能永远运行在错误的状态。(一些简单的IC芯片没有看门狗电路,就需要外部复位)好的,通过上面两段话,你了解了复位电路的作用以及为什么要加复位电路正常单片机和IC芯片复位都是有一个Res
发表于 2023-01-31
详解单片机<font color='red'>复位</font>电路的作用及设计
单片机的高电平复位和低电平复位
单片机复位电路分为两种类型:低电平复位和高电平复位。1、高电平复位:原理图原理:上电瞬间,电容未充电被视为短路,此时Reset端口为5V电压。电容充电到0.7倍的电源电压。电容充电过程中,Reset端口电压由5V变为1.5V,1.5V视为低电平此时单片机复位。电容充电过程极快,充电完成后电容被视为断路,此时Reset被电阻下拉为低电平。按键按下时,电容通过形成的回路放电,放完电后电容被视为短路,Reset端口电压变为5V,充电过程中Reset端口电压下降,完成复位。高电平复位,Reset端口复位完成后为低电平。2、低电平复位原理图原理:上电瞬间电容没电可视为短路,电源通过电阻向电容充电。Reset端口在上电瞬间与地相连,此时端口为低
发表于 2023-01-31
单片机的高电平<font color='red'>复位</font>和低电平<font color='red'>复位</font>
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved