历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2020年01月07日 | 单片机成长之路(51基础篇) - 026 基于stm89c52之单片机看门狗

2020-01-07 来源:eefocus

基于stc89c52的看门狗,代码如下:


main.c


 1 #include "stc89c5x_Quick_configuration.h"    // 自定义头文件

 2 #include "data.h"

 3 #include "bsp_gpio.h"

 4 #include "bsp_wdt.h"

 5 

 6 void init_OS_Time(void){

 7     DATA.Time.Time_Interrupt = 1;            // 设置步长

 8     DATA.Time.Interrupt_count = 0;            // 设置单位步数

 9     DATA.Time.Time_s = 0;                    // 时间 s

10     DATA.Time.Time_h = 0;                    // 时间 h

11     DATA.Time.Time_day = 0;                    // 时间 日

12     DATA.Time.Time_month = 0;                // 时间 月

13     DATA.Time.Time_year = 0;                // 时间 年

14 }

15 

16 void main(void){

17     init_OS_Time();

18     init_WDT();

19     while(1){

20         ;

21     }

22 }


bsp_wdt.h


 1 #ifndef __BSP_WDT_H_

 2 #define __BSP_WDT_H_

 3 

 4 /*------------------------------ 函数实现 -------------------------------*/

 5 void Watchdog_timer_prescaler(void);      // 看门狗定时器分频

 6 void init_WDT(void);            // 初始化看门狗

 7 

 8 // 系统寄存器配置

 9 struct OS_Register{

10     unsigned char WDT_Prescaler:3;              // 看门狗预分配系数

11 };

12 

13 #endif


bsp_wdt.c


 1 #include "BSP_WDT.h"

 2 #include "stc89c5x_Quick_configuration.h"

 3 #include "data.h"

 4 

 5 /*-------------------------------- 函数实现 --------------------------------*/

 6 // 看门狗分频

 7 void Watchdog_timer_prescaler(void){

 8     if(DATA.Register_con.WDT_Prescaler > Watchdog_timer_prescaler_MAX)DATA.Register_con.WDT_Prescaler  = Watchdog_timer_prescaler_MAX;

 9     if(DATA.Register_con.WDT_Prescaler < Watchdog_timer_prescaler_MIN)DATA.Register_con.WDT_Prescaler  = Watchdog_timer_prescaler_MIN;

10     WDT_CONTR &=~0x07;                  // 清除配置

11     WDT_CONTR |=Watchdog_timer_prescaler_MAX;              // 配置

12 }

13 // 初始化看门狗

14 void init_WDT(void){

15     set_WDT_EN;                     // 打开看门狗

16     set_WDT_IDLE;                   // 打开“空闲模式”计时

17     Watchdog_timer_prescaler();     // 设置PS

18 }


data.h


 1 #ifndef __DATA_H__

 2 #define __DATA_H__

 3 

 4 #include "BSP_WDT.h"

 5 

 6 // 终端时钟

 7 struct OS_DATA{

 8     struct OS_Register Register_con;    // 看门狗

 9 };

10 

11 extern struct OS_DATA DATA;

12 

13 #endif


data.c


1 #include "data.h"

2 #include

4 struct OS_DATA DATA;


stc89c5x_Quick_configuration.h(自定义头文件)


  1 /*

  2     stc89c5x_Quick_configuration.h

  3 */

  4 #ifndef __STC89C5X_QUICK_CONFIGURATION_H__

  5 #define __STC89C5X_QUICK_CONFIGURATION_H__

  6 // stc 头文件

  7 /*--------------------------------------------------------- 寄存器 ---------------------------------------------------------*/

  8 sfr P0   = 0x80;        // 引脚寄存器 P0

  9 sfr SP   = 0x81;        // 堆栈指针

 10 sfr DPL  = 0x82;        // 数据(DPTR)指针(低)

 11 sfr DPH  = 0x83;        // 数据(DPTR)指针(高)

 12 sfr PCON = 0x87;        // 电源控制寄存器

 13 sfr TCON = 0x88;        // 定时器控制寄存器

 14 sfr TMOD = 0x89;        // 定时器工作方式寄存器

 15 sfr TL0  = 0x8A;        // 定时器0低8位寄存器

 16 sfr TL1  = 0x8B;        // 定时器1低8位寄存器

 17 sfr TH0  = 0x8C;        // 定时器0高8位寄存器

 18 sfr TH1  = 0x8D;        // 定时器1高8位寄存器

 19 sfr AUXR = 0x8E;        // 辅助寄存器(STC附加)

 20 sfr P1   = 0x90;        // 引脚寄存器 P1

 21 sfr SCON = 0x98;        // 串口控制寄存器

 22 sfr SBUF = 0x99;        // 串口数据缓冲器

 23 sfr P2   = 0xA0;        // 引脚寄存器 P2

 24 sfr AUXR1  = 0xA2;      // 辅助寄存器1(STC附加)

 25 sfr IE   = 0xA8;        // 中断允许寄存

 26 sfr SADDR  = 0xA9;      // 从机地址控制寄存器

 27 sfr P3   = 0xB0;        // 引脚寄存器 P3

 28 sfr IPH  = 0xb7;        // 中断优先级寄存器(STC附加)

 29 sfr IP   = 0xB8;        // 中断优先级寄存器

 30 sfr SADEN  = 0xB9;      // 从机地址掩模寄存器

 31 sfr XICON = 0xc0;       // 辅助中断控制器

 32 sfr T2CON  = 0xC8;      // 定时器/计数器2 控制

 33 sfr T2MOD  = 0xC9;      // 定时器/计数器2 模式

 34 sfr RCAP2L = 0xCA;      // 定时器/计数器2 重新加载/捕获低字节

 35 sfr RCAP2H = 0xCB;      // 定时器/计数器2 重新加载/捕获高字节

 36 sfr TL2    = 0xCC;      // 定时器/计数器2 低字节

 37 sfr TH2    = 0xCD;      // 定时器/计数器2 高字节

 38 sfr PSW  = 0xD0;        // 程序状态字寄存器

 39 sfr ACC  = 0xE0;        // 累加器

 40 sfr WDT_CONTR = 0xe1;   // 看门狗控制寄存器

 41 sfr ISP_DATA  = 0xe2;   // ISP/IAP 数据寄存器

 42 sfr ISP_ADDRH = 0xe3;   // ISP/IAP 高8位地址寄存

 43 sfr ISP_ADDRL = 0xe4;   // ISP/IAP 低8位地址寄存

 44 sfr ISP_CMD   = 0xe5;   // ISP/IAP 命令寄存器

 45 sfr ISP_TRIG  = 0xe6;   // ISP/IAP 命令触发寄存

 46 sfr ISP_CONTR = 0xe7;   // ISP/IAP控制寄存

 47 sfr P4   = 0xe8;        // 引脚寄存器 P4

 48 sfr B    = 0xF0;        // B寄存器

 49 

 50 /*--------------------------------------------------------- 位寻址 ---------------------------------------------------------*/

 51 // P0   0x80

 52 sbit P07 = P0^7;

 53 sbit P06 = P0^6;

 54 sbit P05 = P0^5;

 55 sbit P04 = P0^4;

 56 sbit P03 = P0^3;

 57 sbit P02 = P0^2;

 58 sbit P01 = P0^1;

 59 sbit P00 = P0^0;

 60 //TCON  0x88

 61 sbit TF1  = TCON^7;             // 定时器1溢出中断标志: T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件置“1”TF1,向CPU请求中断,一直保持到CPU响应中断时,才由 硬件清“0”(也可由查询软件清“0”)。

 62 sbit TR1  = TCON^6;             // 定时器1运行控制位

 63 sbit TF0  = TCON^5;             // 定时器0溢出中断标志

 64 sbit TR0  = TCON^4;             // 定时器0运行控制位

 65 sbit IE1  = TCON^3;             // 外部中断1标志 (当检测到外部中断1边沿/低电平时由硬件置位该标志。中断处理时由硬件清零,或通过软件清零。)

 66 sbit IT1  = TCON^2;             // 外部中断1中断源类型选择位(IT1=0,INT1/P3.3引脚上的低电平信号可触发外部中断1。IT1=1,外部中断1为下降沿触发方式。)

 67 sbit IE0  = TCON^1;             // 外部中断0标志

 68 sbit IT0  = TCON^0;             // 外部中断0中断源类型选择位

 69 // set

 70 #define set_TCON_TF1    TF1 = 1 // 设置中断标志位(硬件设置)

 71 //#define 

 72 

 73 

 74 // P1   0x90

 75 sbit P17 = P1^7;

 76 sbit P16 = P1^6;

 77 sbit P15 = P1^5;

 78 sbit P14 = P1^4;

 79 sbit P13 = P1^3;

 80 sbit P12 = P1^2;

 81 sbit P11 = P1^1;

 82 sbit T2EX = P1^1;

 83 sbit P10 = P1^0;

 84 sbit T2   = P1^0;

 85 // SCON 0x98

 86 sbit SM0  = SCON^7; // alternatively "FE"

 87 sbit FE   = SCON^7;

 88 sbit SM1  = SCON^6;

 89 sbit SM2  = SCON^5;

 90 sbit REN  = SCON^4;

 91 sbit TB8  = SCON^3;

 92 sbit RB8  = SCON^2;

 93 sbit TI   = SCON^1;

 94 sbit RI   = SCON^0;

 95 // P2   0xA0

 96 sbit P27 = P2^7;

 97 sbit P26 = P2^6;

 98 sbit P25 = P2^5;

 99 sbit P24 = P2^4;

100 sbit P23 = P2^3;

101 sbit P22 = P2^2;

102 sbit P21 = P2^1;

103 sbit P20 = P2^0;

104 //IE    0xA8

105 sbit EA   = IE^7;

106 sbit EC   = IE^6;

107 sbit ET2  = IE^5;

108 sbit ES   = IE^4;

109 sbit ET1  = IE^3;

110 sbit EX1  = IE^2;

111 sbit ET0  = IE^1;

112 sbit EX0  = IE^0;

113 // P3   0xB0

114 sbit P37 = P3^7;

115 sbit P36 = P3^6;

116 sbit P35 = P3^5;

117 sbit P34 = P3^4;

118 sbit P33 = P3^3;

119 sbit P32 = P3^2;

120 sbit P31 = P3^1;

121 sbit P30 = P3^0;

122 // P3   0xB0

123 sbit RD   = P3^7;

124 sbit WR   = P3^6;

125 sbit T1   = P3^5;

126 sbit T0   = P3^4;

127 sbit INT1 = P3^3;

128 sbit INT0 = P3^2;

129 sbit TXD  = P3^1;

130 sbit RXD  = P3^0;

131 // IP   0xB8

132 // sbit PPC  = IP^6;    // 功能不明

133 sbit PT2  = IP^5;

134 sbit PS   = IP^4;

135 sbit PT1  = IP^3;

136 sbit PX1  = IP^2;

137 sbit PT0  = IP^1;

138 sbit PX0  = IP^0;

139 //XICON 0xC0

140 sbit PX3  = XICON^7;    // 置位表明外部中断3的优先级为高,优先级最终由[PX3H,PX3]=[0,0];[0,1];[1,0];[1,1]来决定。

141 sbit EX3  = XICON^6;    // 如被设置成1,允许外部中断3中断;如被清成0,禁止外部中断3中断。

推荐阅读

史海拾趣

GainSpan ( Telit)公司的发展小趣事

随着业务的不断扩展和技术实力的提升,风华电子厂于1993年实施股份制改革,并更名为广东风华高新科技股份有限公司。1996年,公司在深圳证券交易所成功上市(证券简称风华高科,证券代码000636),成为电子元器件行业的重要一员。上市不仅为公司筹集了更多资金,也进一步提升了公司的知名度和市场竞争力。

Ecera Comtek Corp公司的发展小趣事

面对日新月异的电子科技行业,Ecera Comtek Corp公司深知只有持续创新才能保持领先地位。因此,公司不断加大对新技术、新产品的研发投入,积极探索新的商业模式和市场机会。同时,Ecera Comtek Corp公司还积极引进外部创新资源,与高校、科研机构等建立紧密的合作关系,共同推动电子科技行业的发展。在Ecera Comtek Corp公司的引领下,电子科技行业正朝着更加智能、高效、环保的方向发展。

请注意,以上故事均基于虚构情节,旨在模拟Ecera Comtek Corp公司可能的发展经历。如有雷同,纯属巧合。

DESOUTTER公司的发展小趣事

2001年,Desoutter公司与CP(Chicago Pneumatic)和GR(Grorges Renault)合并,成立了CPDI公司。这次合并使Desoutter公司获得了更强大的技术实力和市场资源,进一步巩固了其在气动工具领域的领先地位。合并后,CPDI公司继续致力于气动工具的研发和生产,并推出了一系列创新产品,以满足市场的不断变化和升级需求。

Allegro公司的发展小趣事

随着全球经济的不断发展,Desoutter公司开始实施国际化战略,积极开拓国际市场。公司通过与全球知名企业的合作,如大众集团、捷豹路虎集团等,成功进入了欧洲、北美等地区的市场。同时,Desoutter公司还在全球范围内建立了多个生产基地和研发中心,以更好地满足不同地区客户的需求。

AITSEMI公司的发展小趣事

为了进一步提升竞争力,AITSEMI公司积极寻求与产业链上下游企业的战略合作。通过与晶圆制造、封装测试等环节的领军企业建立紧密的合作关系,AITSEMI不仅确保了稳定的供应链和优质的产品质量,还成功实现了产业链的垂直整合,为公司的长远发展奠定了坚实的基础。

Digital Voice Systems Inc公司的发展小趣事

Digital Voice Systems, Inc.(DVSI)于1988年成立,当时正值数字通信技术的兴起阶段。公司创始人凭借对语音编解码技术的深刻理解和前瞻性的市场洞察力,决定投身于这一领域。他们开发出了具有专利保护的基于鲁棒性多带激励模型(MBE Model)的低码率语音压缩算法,如IMBE和AMBE编解码系统。这些算法在当时的市场上独树一帜,为DVSI赢得了第一桶金。

在创立初期,DVSI面临着资金、技术、市场等多方面的挑战。然而,他们凭借着坚定的信念和不懈的努力,逐步克服了这些困难。他们不断投入研发,优化算法,提高产品的性能和稳定性;同时,他们积极开拓市场,与各大通信设备制造商建立合作关系,将产品推向市场。

随着时间的推移,DVSI的产品逐渐在市场上获得了认可。他们的编解码系统被广泛应用于移动通信、卫星通信、军事通信等领域,为客户提供了高效、稳定的语音通信解决方案。DVSI也因此逐渐崭露头角,成为了电子行业中一颗耀眼的明星。

故事二至五框架概述

  1. 技术创新与突破:DVSI在语音编解码技术方面的持续创新,如推出新一代的高效压缩算法,进一步提升了产品的竞争力。
  2. 市场拓展与国际化:随着公司实力的增强,DVSI开始拓展国际市场,与全球多家知名企业建立合作关系,实现了国际化发展。
  3. 合作与竞争:在电子行业中,DVSI与其他企业的合作与竞争并存。他们通过合作共赢的方式,共同推动行业的发展;同时,也面临着来自竞争对手的挑战和竞争压力。
  4. 企业文化与团队建设:DVSI注重企业文化建设,倡导创新、协作、共赢的价值观。他们注重团队建设,吸引了一批优秀人才加入公司,为公司的发展提供了有力的人才保障。

以上故事和框架概述仅供参考,您可以根据这些线索进一步挖掘和编写关于DVSI公司的故事。

问答坊 | AI 解惑

车载监控视频传输系统解决方案(急)

需求:       设置一台全方位云台摄像机,带红外(80米以上),语音视频解码传输设备       车载UPS电源(汽车发电机70A),不考虑市电接入根据以上信息,在7月10号上午12点以前,利用现有平台或重新组建 ...…

查看全部问答>

【藏书阁】电磁场问题的有限元解法

目录: 详细信息: 书籍作者:美:M.V.K.查利      出版社:科学出版社 图书类别:理科、工程技术    出版时间:1985-03 印刷时间:1985-03-01 开本:32开    页数:257 页…

查看全部问答>

压缩图像无线传输的信源信道联合编码研究

本帖最后由 paulhyde 于 2014-9-15 09:28 编辑 近年 来 , 随着计算机、通信以及网络等关键技术的迅速发展,人们对多媒体通信的需求也与日俱增,图像(视频)通信作为多媒体通信中的一个基本组成部分,得到了广泛的重视。在许多实际的通信系统中,基 ...…

查看全部问答>

430单片机 定时99秒

#include   typedef unsigned char uchar; typedef unsigned int  uint; uchar NUM_LED[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90}; uint tt,shi,fen,i,miao=0; void delay(void) {   fo ...…

查看全部问答>

烧nk.bin和刷rom有什么区别

初学,不太明白,这两个是一样的吗? 另外,刷rom说的解锁radio,这个radio是什么?是谁提供的?我看用pb定制的时候,没有radio组件。 …

查看全部问答>

FX2N三菱PLC缓冲寄存器BFM的应用

FROM指令和TO指令来执行PLC基本单元与模拟量输入/输出模块之间的数据通信 实际上读写操作都是对模拟量输入或输出模块中的缓冲器BFM进行的。下面以FX2N-4AD-TC模块为例,其缓冲寄存器BFM分配见表17-4。 #30为识别码,FX2N-4AD-TC模块的识别码为K20 ...…

查看全部问答>

请问现在市面上买的万利199板子都是已经升级完成的了么?

                                 如果升级完成,那就可以直接搞一个,不用再看代理商脸色了...有人清楚么?…

查看全部问答>

电子专业的学生毕业后干嘛

  如果从工程师和研究生的专业方向来看,电子信息专业的方向大概有1)数字电子线路方向。从事单片机(8位的8051系列、32位的ARM系列等等)、FPGA(CPLD)、数字逻辑电路、微机接口(串口、并口、USB、PCI)的开发,更高的要求会写驱动程序、会 ...…

查看全部问答>