📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 11/12/2006 10:31:33 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Main.c BROWSE DEBUG OBJECTEXTEND CODE
line level source
1 #include "Global.H"
2 #include "KeyTestTask.H"
3 #include "HelloTask.H"
4 #include "ClockTask.H"
5
6 void Delay(int time);//延时程序
7 void SystemInitialize(void);//系统初始始化
8
9 main()
10 {
11 1 //系统启动延时
12 1 //===========
13 1 Delay(100);
14 1
15 1 //系统初始化
16 1 //==========
17 1 SystemInitialize();
18 1
19 1 //主循环
20 1 //======
21 1 while(1)
22 1 {
23 2 //将系统按键值转换成自定义的按键值
24 2 //================================
25 2 KeyConvert();
26 2
27 2 //时钟参数加1秒。
28 2 //==============
29 2 ClockIncreaseProcess();
30 2
31 2 //处理任务切换请求
32 2 //================
33 2 if(TaskChangeFlag)
34 2 {
35 3 TaskChangeFlag = 0;
36 3
37 3 TaskMode++;
38 3 if(TaskMode>3) TaskMode=1;
39 3
40 3 Menu1 = 1;
41 3 Menu2 = 1;
42 3 Menu3 = 1;
43 3 }
44 2
45 2 //任务执行体
46 2 //==========
47 2 switch(TaskMode)
48 2 {
49 3 case 1: KeyTestTask();break;
50 3 case 2: HelloTask();break;
51 3 case 3: ClockTask();break;
52 3 }
53 2 }
54 1 }
55
C51 COMPILER V7.50 MAIN 11/12/2006 10:31:33 PAGE 2
56 //延时程序
57 void Delay(int time)
58 {
59 1 while(time) time--;
60 1 }
61
62 //系统初始化
63 void SystemInitialize(void)
64 {
65 1 //资源设置(初始化)
66 1 //================
67 1 //定时器0工作在方式1 作16位定时器用(允许中断)
68 1 //定时器1工作在方式2 作波特率发生器用(禁止中断)
69 1 //定时器2工作在自动重装方式 作时间定时用(2.5ms产生一次溢出中断)
70 1 //外部中断设置 INT0及INT1均为边沿触发(允许中断)
71 1 //串行口设置为方式1 8位UART(允许中断)
72 1
73 1 TMOD = 0x21;//7(GATE),6(C/~T),5(M1),4(M0),3(GATE),2(C/~T),1(M1),0(M0)
74 1
75 1 TH0 = 0x00;//设置定时器0计数初值
76 1 TL0 = 0x00;
77 1
78 1 TH1 = 0xF4;//Serial Port Baud Rate 2400 bps, when the main frequence is 11.0592MHz
79 1 TL1 = 0xF4;
80 1
81 1 TCON = 0x55;//TCON: 7(TF1),6(TR1),5(TF0),4(TR0),3(IE1),2(IT1),1(IE0),0(IT0)
82 1
83 1 T2CON = 0x04;//T2CON:7(TF2),6(EXF2),5(RCLK),4(TCLK),3(EXEN2),2(TR2),1(C/~T2),0(CP/~RL2)
84 1 TH2 = 0xF7;//2.5ms产生一次溢出中断(晶振为11.0592MHz)
85 1 TL2 = 0x00;
86 1 RCAP2H = 0xF7;
87 1 RCAP2L = 0x00;
88 1
89 1 SCON = 0x78;//SCON: 7(SM0),6(SM1),5(SM2),4(REN),3(TB8),2(RB8),1(TI),0(RI)
90 1 PCON = 0x00;//PCON: 7(SMOD),6(null),5(null),4(null),3(GF1),2(GF0),1(PD),0(IDL)
91 1
92 1 IE = 0x37;//中断允许:7(EA),6(null),5(ET2),4(ES),3(ET1),2(EX1),1(ET0),0(EX0)
93 1 IP = 0x30;//中断优先级:7(null),6(null),5(PT2),4(PS),3(PT1),2(PX1),1(PT0),0(PX0)
94 1 //==============================================================================
95 1
96 1 //开启中断,允许中断响应
97 1 //======================
98 1 EA = 1;
99 1 }
100
101 /*
102 ==============================================================================
103 |/ 定时器0和定时器1控制
104
105 方式0: 1.计数方式: 13位计数器,高8位在THx,低5位在TLx的低5位.
106 2.计数脉冲输入: C/~Tx = 0 内部时钟12分频信号
107 C/~Tx = 1 Tx引脚信号
108 3.计数允许控制: (~GATEx | ~INTx) & TRx = 1 允许计数
109 (~GATEx | ~INTx) & TRx = 0 停止计数
110 4.中断允许: ETx = 1 允许中断响应
111 ETx = 0 禁止中断响应
112 5.计数溢出: 计数溢出时置TFx为1,进入中断服务程序时由硬件自动清0.
113 计数溢出时需由软件重装计数初值到THx和TLx中.
114
115 方式1: 1.计数方式: 16位计数器,高8位在THx,低8位在TLx.
116 2.计数脉冲输入: C/~Tx = 0 内部时钟12分频信号
117 C/~Tx = 1 Tx引脚信号
C51 COMPILER V7.50 MAIN 11/12/2006 10:31:33 PAGE 3
118 3.计数允许控制: (~GATEx | ~INTx) & TRx = 1 允许计数
119 (~GATEx | ~INTx) & TRx = 0 停止计数
120 4.中断允许: ETx = 1 允许中断响应
121 ETx = 0 禁止中断响应
122 5.计数溢出: 计数溢出时置TFx为1,进入中断服务程序时由硬件自动清0.
123 计数溢出时需由软件重装计数初值到THx和TLx中.
124
125 方式2: 1.计数方式: 8位重装计数器,8位计数值在TLx中,THx存放重装初值.
126 2.计数脉冲输入: C/~Tx = 0 内部时钟12分频信号
127 C/~Tx = 1 Tx引脚信号
128 3.计数允许控制: (~GATEx | ~INTx) & TRx = 1 允许计数
129 (~GATEx | ~INTx) & TRx = 0 停止计数
130 4.中断允许: ETx = 1 允许中断响应
131 ETx = 0 禁止中断响应
132 5.计数溢出: 计数溢出时置TFx为1,进入中断服务程序时由硬件自动清0.
133 计数溢出时由硬件重装THx计数初值到TLx中.
134
135 方式3: *定时器0专有的定时方式
136 定时器0的子定时器一
137 1.计数方式: 8位计数器,8位计数值在TL0中.
138 2.计数脉冲输入: C/~T0 = 0 内部时钟12分频信号
139 C/~T0 = 1 T0引脚信号
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -