📄 mine.lst
字号:
C51 COMPILER V7.06 MINE 07/10/2006 19:16:23 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MINE
OBJECT MODULE PLACED IN mine.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE mine.c OPTIMIZE(2,SPEED) BROWSE NOINTVECTOR DEBUG OBJECTEXTEND SRC(.\mine.S
-RC)
stmt level source
1 #include <reg52.h>
2
3
4 #define OSC_FREQ (12000000ul)
5 #define OSC_PER_INST 12
6 #define INT_0 0 //计数中断
7 #define TIMER_0 1 //暂停时,控制闪烁时间
8 #define INT_1 2 //暂停中断
9 #define TIMER_2 5 //系统时钟
10 #define DIS 22 //edit it if necessary
11
12 #define SELECT_4 P1 //位选
13 #define OUT_3 P0 //段选
14
15 sbit int_0=P3^2;
16 sbit int_1=P3^3;
17 sbit Flash=P3^4; //控制CD4514B INHIBIT位以使LED在暂停时闪烁
18
19 typedef unsigned char tbyte;
20 typedef unsigned int tword;
21 typedef unsigned long tlong;
22 typedef enum{WORK,TIMEOUT}Sys_state;
23
24
25 tbyte min;
26 tbyte sec;
27 tbyte speed;
28 tword dis;
29 //tbyte num[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
30 tlong Add_one; //对中断0计数
31 tbyte time_G; //现在时间
32 tbyte time_temp_G; //与现在时间求时间间隔以计算速度
33 Sys_state Sys_flag;
34
35 tbyte flash_t=50;
36
37
38 void show_init(void);
39 void sEOS_init(const char);
40 void show(tbyte,tbyte);
41 void display(void);
42
43
44 void main(void)
45 {
46 1 show_init();
47 1 sEOS_init(10);//setup interrupt &&timer2
48 1
49 1 while(1)
50 1 {
51 2 display();
52 2 }
53 1 }
54
C51 COMPILER V7.06 MINE 07/10/2006 19:16:23 PAGE 2
55
56 void show_init(void)
57 {
58 1 min=0;
59 1 sec=0;
60 1 speed=0;
61 1 dis=0;
62 1 Flash=0;
63 1 Sys_flag=WORK;
64 1 }
65
66 //**************************
67
68 void display(void)
69 {
70 1 show(0,sec%10);
71 1 show(1,sec/10);
72 1 show(2,min%10);
73 1 show(3,min/10);
74 1 show(4,dis%10);
75 1 show(5,dis/10%10);
76 1 show(6,dis/100%10);
77 1 show(7,dis/1000%10);
78 1 show(8,speed%10);
79 1 show(9,speed/10);
80 1 }
81
82 void show(tbyte addr,tbyte dat)
83 {
84 1 tword k=50;
85 1
86 1 OUT_3 =dat;
87 1 SELECT_4 =addr;
88 1
89 1 while(--k);
90 1 }
91
92
93
94 void sEOS_init(const tbyte TICK)
95 {
96 1 //setup timer2
97 1 tlong Inc;
98 1 tword Reload_16;
99 1 tbyte Reload_08H, Reload_08L;
100 1
101 1 Add_one=0;
102 1 time_G=0;
103 1 time_temp_G=0;
104 1
105 1 // Timer 2 is configured as a 16-bit timer,
106 1 // which is automatically reloaded when it overflows
107 1 T2CON = 0x04; // Load Timer 2 control register
108 1
109 1 // Number of timer increments required (max 65536)
110 1 Inc = ((tlong)TICK*(OSC_FREQ/1000))/OSC_PER_INST;
111 1
112 1 // 16-bit reload value
113 1 Reload_16 = (tword) (65536UL - Inc);
114 1
115 1 // 8-bit reload values (High & Low)
116 1 Reload_08H = (tbyte)(Reload_16 / 256);
C51 COMPILER V7.06 MINE 07/10/2006 19:16:23 PAGE 3
117 1 Reload_08L = (tbyte)(Reload_16 % 256);
118 1
119 1 // Used for manually checking timing (in simulator)
120 1 //P2 = Reload_08H;
121 1 //P3 = Reload_08L;
122 1
123 1 TH2 = Reload_08H; // Load T2 high byte
124 1 RCAP2H = Reload_08H; // Load T2 reload capt. reg. high byte
125 1 TL2 = Reload_08L; // Load T2 low byte
126 1 RCAP2L = Reload_08L; // Load T2 reload capt. reg. low byte
127 1
128 1 // Timer 2 interrupt is enabled, and ISR will be called
129 1 // whenever the timer overflows.
130 1 ET2 = 1;
131 1 //setup int0
132 1 IT0 = 1;
133 1 EX0 = 1;
134 1 //setup int1
135 1 IT1 = 1;
136 1 EX1 = 1;
137 1 //setup time0
138 1 TMOD= 0x01;
139 1 TH0 = 0xB1;
140 1 TL0 = 0xE0;
141 1 // Start Timer 2 running
142 1 TR2 = 1;
143 1
144 1 EA = 1; // Globally enable interrupts
145 1 }
146
147 //************************************
148 //中断0,计算路程和根据时间计算速度
149
150 void intp0(void) interrupt INT_0
151 {
152 1 Add_one++;
153 1
154 1 if(time_G<time_temp_G)
155 1 speed=DIS*10/(time_G+100-time_temp_G);
156 1 speed=DIS*10/(time_G-time_temp_G);
157 1
158 1 dis=Add_one*DIS;
159 1 time_temp_G=time_G;
160 1 }
161
162 //************************************
163 //系统时钟,计算时间
164
165 void timer2(void) interrupt TIMER_2
166 {
167 1 if(++time_G==100)
168 1 {
169 2 time_G=0;
170 2 if(++sec==60)
171 2 {
172 3 sec=0;
173 3 ++min;
174 3 }
175 2 }
176 1 }
177
178 //*************************************
C51 COMPILER V7.06 MINE 07/10/2006 19:16:23 PAGE 4
179 //中断1,系统暂停
180 void intp1(void) interrupt INT_1
181 {
182 1 flash_t=50;
183 1
184 1 if(Sys_flag==WORK)
185 1 {
186 2 Sys_flag=TIMEOUT;
187 2 TR2 =0; //禁止系统时钟&计数中断
188 2 EX0 =0;
189 2 TR0 =1; //开放暂停时钟计时
190 2 ET0 =1;
191 2 }
192 1 else
193 1 {
194 2 Sys_flag=WORK;
195 2 TR2 =1;
196 2 EX0 =1;
197 2 TR0 =0;
198 2 ET0 =0;
199 2 Flash=0;
200 2 }
201 1 }
202
203
204 //*************************************
205 //时钟中断0,计算LED闪烁时间
206
207 void timer0(void) interrupt TIMER_0
208 {
209 1 while(--flash_t==0)
210 1 {
211 2 #pragma asm
212 2 CPL Flash
213 2 #pragma endasm
214 2 }
215 1
216 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 607 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 13
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -