📄 main.lst
字号:
C51 COMPILER V7.01 MAIN 06/13/2004 12:32:10 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //**********************************************************************
2 //功能 : 软件看门狗程序
3 //作者 : lihj
4 //创建日期 : 2004-06-13
5 //版本 : V1.0
6 //修改记录 :
7 //***********************************************************************
8 #include "REG51.h"
9
10 #ifndef TRUE
11 #define TRUE 0
12 #define FALSE 1
13 #endif
14
15 //系统宏定义
16 #define XTAL 12000000 //系统晶振
17 #define TIME_BASE 10 //时间基准, 以1ms为单位
18 #define WDT_TIME 50 //看门狗复位时间(50*TIME_BASE)
19
20 //全局变量声明
21 int g_WDTCounter; //10ms系统时钟基准
22 unsigned int g_wTimerIniValue; //定时器初值
23
24 //内部函数声明
25 char TimerIni(char); //初始化定时器函数
26 void FeedDog(void); //软件看门狗
27
28 //外部函数声明
29 extern void RESET(void);
30
31 //主循环
32 void main(void)
33 {
34 1 //初始化硬件资源
35 1 //初始化定时器,初值计算
36 1 g_wTimerIniValue = 65535 - ((XTAL/12)/1000)*TIME_BASE + 1;
37 1 //初值=65536 - 定时时间长度
38 1 TimerIni(0); //将定时器0初始化成10ms定时器
39 1
40 1 //初始化全局变量
41 1 g_WDTCounter = 0; //清软件看门狗计数
42 1
43 1 EA = 1; //总中断使能
44 1
45 1 while(1) //主循环体
46 1 {
47 2 //主循环体
48 2 //程序......
49 2
50 2 FeedDog(); //每一个周期去喂一次看门狗
51 2 }
52 1 }
53
54 //定时器初始化函数
55 //参数说明 : n, 定时器序号
C51 COMPILER V7.01 MAIN 06/13/2004 12:32:10 PAGE 2
56 // ini, 定时器初值, 单位是1ms
57 char TimerIni(char n)
58 {
59 1 if(n == 0) //使用定时器0
60 1 {
61 2 TMOD = 0X01; //定时器0工作方式1(16位定时器)
62 2 TH0 = g_wTimerIniValue >> 8; //定时器赋初始值
63 2 TL0 = g_wTimerIniValue;
64 2 ET0 = 1; //允许定时器中断
65 2 TR0 = 1; //启动计数
66 2 }
67 1 else if(n == 1) //使用定时器1
68 1 {
69 2 TMOD = 0x10; //工作方式1
70 2 TH1 = g_wTimerIniValue >> 8; //定时器赋初值
71 2 TL1 = g_wTimerIniValue;
72 2 ET1 = 1; //允许定时器中断
73 2 TR1 = 1; //启动计数
74 2 }
75 1 else
76 1 {
77 2 return FALSE;
78 2 }
79 1
80 1 return TRUE;
81 1 }
82
83 //喂软件看门狗
84 void FeedDog(void)
85 {
86 1 g_WDTCounter = 0; //清软件看门狗计数
87 1 }
88
89 //定时器0中断服务程序
90 //interrupt关键字后的数字指向中断向量号
91 //using关键字后的数字表示该中断函数使用第几组寄存器
92 void Timer0Int(void) interrupt 1 using 1
93 {
94 1 TL0 += g_wTimerIniValue;
95 1 TH0 += g_wTimerIniValue>>8; //恢复定时器初值
96 1
97 1 g_WDTCounter ++; //软件看门狗复位计数器累加
98 1 if(g_WDTCounter >= WDT_TIME)
99 1 {
100 2 RESET(); //复位
101 2 }
102 1 }
103
104
105
106
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 131 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILER V7.01 MAIN 06/13/2004 12:32:10 PAGE 3
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -