📄 isr.lst
字号:
C51 COMPILER V7.09 ISR 11/19/2006 16:03:09 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN isr.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE isr.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "includes.h"
3 #include "uart.h"
4
5 sbit MPH1 = P1^2;
6 sbit MPM1 = P1^3;
7
8 uchar idata SendBuf[64];
9 uchar idata SendCoun, SendLen;
10
11 uchar data Clock0, Clock1;
12
13 void CPUInit(void)
14 {
15 1 // 定时器1作为串行口的波特率发生器
16 1 // 定时器0分成两个独立的计数器
17 1 TMOD = 0x27;
18 1 //TMOD = 0x21;
19 1 TH0 = 0x00;
20 1 ET1 = 1; // 使能TH0中断
21 1 TR1 = 1; // 启动计数器
22 1 TL0 = 0x00;
23 1 ET0 = 1;
24 1 TR0 = 0;
25 1 TH1 = 0xfd;
26 1 TL1 = 0xfd;
27 1 //T2CON = 0x00;
28 1 RCLK = 1;
29 1 //TCLK = 1;
30 1 RCAP2H = (65536 - OSC / 32 / BAUD_RXD) / 256;
31 1 RCAP2L = (65536 - OSC / 32 / BAUD_RXD) % 256;
32 1 TR2 = 1;
33 1 //PCON = 0x80;
34 1 SM0 = 0; SM1 = 1; // 串行通信方式1
35 1 IT0 = 1; IT1 = 1; // 外部中断下降沿触发
36 1 PX1 = 1; // 外部中断1高优先级
37 1 EX0 = 1; EX1 = 1;
38 1 ES = 1; REN = 1;
39 1 EA = 1;
40 1 }
41
42 //
43 // 测量周波
44 //
45 void ext_int0(void) interrupt 0 using 3
46 {
47 1 if (!FlagAC) {
48 2 TR0 = !TR0;
49 2 if (TR0 == 0) {
50 3 ACData[ACCoun] = Timer_20;
51 3 Timer_20 = 0;
52 3 ACCoun++;
53 3 if (ACCoun >= 5)
54 3 FlagAC=1;
55 3 }
C51 COMPILER V7.09 ISR 11/19/2006 16:03:09 PAGE 2
56 2 }
57 1 }
58
59 void timer0(void) interrupt 1 using 3
60 {
61 1 TL0 = 255;
62 1 Timer_20++;
63 1 MS20++;
64 1 if (MS20 >= 0) {
65 2 SecAC += 1;
66 2 MS20 = 0;
67 2 }
68 1 }
69
70 void ext_int1(void) interrupt 2 using 2
71 {
72 1 }
73
74 //
75 // 定时器1的中断被TH0借用
76 // 计数周期为主频的1/12
77 //
78 void timer1(void) interrupt 3 using 2
79 {
80 1 Clock0++;
81 1 Clock1++;
82 1 }
83
84 /*串行接收子函数 中断方式*/
85 void uart0(void) interrupt 4 using 1
86 {
87 1 uchar temp;
88 1 if (TI == 1) {
89 2 TI = 0;
90 2 SendCoun++;
91 2 if (SendCoun < SendLen)
92 2 SBUF = SendBuf[SendCoun];
93 2 }
94 1 if (RI == 1) {
95 2 temp = SBUF;
96 2 RI = 0;
97 2 if (FlagStart == 0 && FlagStop == 0) {
98 3 switch(GetCoun) {
99 4 case 0:
100 4 if (temp == '$') //$GPRMC 数据包的头,用来判断是否
101 4 GetCoun++; //是你要收的数据
102 4 else
103 4 GetCoun = 0;
104 4 break;
105 4 case 1:
106 4 if (temp == 'G')
107 4 GetCoun++;
108 4 else
109 4 GetCoun = 0;
110 4 break;
111 4 case 2:
112 4 if (temp == 'P') {
113 5 FlagType = 0;
114 5 GetCoun++;
115 5 }
116 4 else if (temp == 'G') {
117 5 FlagType = 1;
C51 COMPILER V7.09 ISR 11/19/2006 16:03:09 PAGE 3
118 5 GetCoun++;
119 5 }
120 4 else
121 4 GetCoun = 0;
122 4 break;
123 4 case 3:
124 4 if (FlagType == 0) {
125 5 if (temp == 'R')
126 5 GetCoun++;
127 5 else
128 5 GetCoun = 0;
129 5 }
130 4 else {
131 5 if (temp == 'G')
132 5 GetCoun++;
133 5 else
134 5 GetCoun = 0;
135 5 }
136 4 break;
137 4 case 4:
138 4 if (FlagType == 0) {
139 5 if (temp == 'M')
140 5 GetCoun++;
141 5 else
142 5 GetCoun = 0;
143 5 }
144 4 else {
145 5 if (temp == 'A')
146 5 GetCoun++;
147 5 else
148 5 GetCoun = 0;
149 5 }
150 4 break;
151 4 case 5:
152 4 if (FlagType == 0) {
153 5 if (temp == 'C') {
154 6 GetCoun++;
155 6 FlagStart = 1;
156 6 }
157 5 else
158 5 GetCoun = 0;
159 5 }
160 4 else {
161 5 if (temp == 'A') {
162 6 GetCoun++;
163 6 FlagStart = 1;
164 6 }
165 5 else
166 5 GetCoun = 0;
167 5 }
168 4 break;
169 4 default:
170 4 break;
171 4 }
172 3 }
173 2 else if (FlagStart == 1 && FlagStop == 0) {
174 3 if (FlagType == 0) {
175 4 if (GetCoun >= 7 && GetCoun <= 12) { //时间:时分秒
176 5 Time[GetCoun - 7] = temp;
177 5 GetCoun++;
178 5 }
179 4 else if (GetCoun == 14) { //是否同步,‘A’同步,‘V’
C51 COMPILER V7.09 ISR 11/19/2006 16:03:09 PAGE 4
180 5 if (temp == 'A')
181 5 FlagSYN=1;
182 5 else
183 5 FlagSYN=0;
184 5 GetCoun++;
185 5 }
186 4 else if (GetCoun >= 16 && GetCoun <= 24) { //纬度
187 5 Latitude[GetCoun - 16] = temp;
188 5 GetCoun++;
189 5 }
190 4 else if (GetCoun >= 28 && GetCoun <= 37) { //经度
191 5 Longitude[GetCoun - 28] = temp;
192 5 GetCoun++;
193 5 }
194 4 else if (GetCoun >= 53 && GetCoun <= 58) { //日期:日月年
195 5 Date[GetCoun - 53] = temp;
196 5 GetCoun++;
197 5 }
198 4 else if(GetCoun > 58) {
199 5 FlagStop = 1;
200 5 GetCoun = 0;
201 5 }
202 4 else {
203 5 GetCoun++;
204 5 }
205 4 }
206 3 else {
207 4 if (GetCoun >= 12 && GetCoun <= GetCoun <= 13) {
208 5 Planet[GetCoun - 12] = temp;
209 5 GetCoun++;
210 5 }
211 4 else if (GetCoun > 13) {
212 5 FlagStop = 1;
213 5 GetCoun = 0;
214 5 }
215 4 else {
216 5 GetCoun++;
217 5 }
218 4 }
219 3 }
220 2 }
221 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 563 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = 66 ----
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 + -