历史上的今天
今天是: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 3 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中断。
史海拾趣
|
需求: 设置一台全方位云台摄像机,带红外(80米以上),语音视频解码传输设备 车载UPS电源(汽车发电机70A),不考虑市电接入根据以上信息,在7月10号上午12点以前,利用现有平台或重新组建 ...… 查看全部问答> |
|
目录: 详细信息: 书籍作者:美:M.V.K.查利 出版社:科学出版社 图书类别:理科、工程技术 出版时间:1985-03 印刷时间:1985-03-01 开本:32开 页数:257 页… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:28 编辑 近年 来 , 随着计算机、通信以及网络等关键技术的迅速发展,人们对多媒体通信的需求也与日俱增,图像(视频)通信作为多媒体通信中的一个基本组成部分,得到了广泛的重视。在许多实际的通信系统中,基 ...… 查看全部问答> |
|
#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 ...… 查看全部问答> |
|
初学,不太明白,这两个是一样的吗? 另外,刷rom说的解锁radio,这个radio是什么?是谁提供的?我看用pb定制的时候,没有radio组件。 … 查看全部问答> |
|
FROM指令和TO指令来执行PLC基本单元与模拟量输入/输出模块之间的数据通信 实际上读写操作都是对模拟量输入或输出模块中的缓冲器BFM进行的。下面以FX2N-4AD-TC模块为例,其缓冲寄存器BFM分配见表17-4。 #30为识别码,FX2N-4AD-TC模块的识别码为K20 ...… 查看全部问答> |
|
如果从工程师和研究生的专业方向来看,电子信息专业的方向大概有1)数字电子线路方向。从事单片机(8位的8051系列、32位的ARM系列等等)、FPGA(CPLD)、数字逻辑电路、微机接口(串口、并口、USB、PCI)的开发,更高的要求会写驱动程序、会 ...… 查看全部问答> |




