📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 06/07/2008 15:27:35 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<REG51.H>
2 #include<stdio.h>
3
4 sbit P3_3 = 0xB3;
5
6 void delay(unsigned char n);
7
8 /*接收语句: $GPRMC,062321,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0C */
9 unsigned char data sentence[64]="GPRMC,062321,V,1234.5678,N,87654.3210,E,000.0,000.0,030222,,*0C";
10 unsigned char data latitude[11];//="(244)6.5211N";
11 unsigned char data longitude[12];//="(1210)0.1536E";
12
13 unsigned char acs2hex(unsigned char *string)
14 {
15 1 unsigned char a1,a2,rec_chs;
16 1 if(*string < 0x30 || *string > 0x46 || *(string + 1) < 0x30 || *(string + 1) > 0x46)
17 1 {
18 2 rec_chs = 0xff;
19 2 goto next;
20 2 }
21 1
22 1 if(*string < 0x40)
23 1 a1 = *string - 0x30;
24 1 else
25 1 a1 = *string - 0x37;
26 1 string ++;
27 1 if(*string < 0x40)
28 1 a2 = *string - 0x30;
29 1 else
30 1 a2 = *string - 0x37;
31 1 rec_chs = (a1 << 4) + a2;
32 1 next:
33 1 return rec_chs;
34 1 }
35
36 bit checksum(unsigned char *string)
37 {
38 1 unsigned char rec_chs,chs = 0,rchs[2];
39 1 bit ans;
40 1 for(;*string != '*';string ++)
41 1 {
42 2 chs = chs ^ *string;
43 2 }
44 1 rchs[0] = *(string + 1);
45 1 rchs[1] = *(string + 2);
46 1 rec_chs = acs2hex(rchs);
47 1 if(chs != rec_chs || rec_chs == 0xff)
48 1 ans = 0;
49 1 else
50 1 ans = 1;
51 1 return ans;
52 1 }
53
54 void port_init(void)
55 {
C51 COMPILER V7.06 MAIN 06/07/2008 15:27:35 PAGE 2
56 1 TMOD=0x20;
57 1 PCON=0; // SMOD=0
58 1 SCON=0x50; // MODE 1
59 1 TH1=0xCC; //600baud 12MHz oscillator frequence,SMOD=0
60 1 TL1=0xCC;
61 1 TR1=1; //Start timer 1
62 1 }
63
64
65
66 void main()
67 {
68 1
69 1 unsigned char dflag,send_code;
70 1 unsigned int mod;
71 1 unsigned char i = 0,j = 0,k = 0;
72 1 start:
73 1 port_init();
74 1 /* dflag = 0;
75 1 // PWD = 0;
76 1 /* while(1)
77 1 {
78 1 while(!RI)
79 1 {}
80 1 if(SBUF == 'A')
81 1 break;
82 1 RI = 0;
83 1 }
84 1 RI = 0;
85 1
86 1 while(1)
87 1 {
88 1 while(!RI)
89 1 {}
90 1 if(SBUF == '$')
91 1 break;
92 1 RI = 0;
93 1 }
94 1 RI = 0;
95 1
96 1 // 接收数据 $GPRMC,062321,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0C
97 1 for(i = 0;i < 63;i ++)
98 1 {
99 1 while(!RI)
100 1 {}
101 1 sentence[i] = SBUF;
102 1 RI = 0;
103 1 }
104 1 REN = 0; // forbid recieve
105 1 // PWD = 1;
106 1
107 1 // if(~checksum(sentence))
108 1 // goto start; // checksum wrong ! restart
109 1 */
110 1 for(i = 0;dflag < 7;i ++)
111 1 {
112 2 if(sentence[i] == ',')
113 2 dflag ++;
114 2 if(dflag == 3 && sentence[i] != ',')
115 2 {
116 3 latitude[k] = sentence[i];
117 3 k ++;
C51 COMPILER V7.06 MAIN 06/07/2008 15:27:35 PAGE 3
118 3 }
119 2 if(dflag == 4 && sentence[i] != ',')
120 2 {
121 3 latitude[k] = sentence[i];
122 3 latitude[k + 1] = '\0'; //以字符串的方式结束
123 3 }
124 2 if(dflag == 5 && sentence[i] != ',')
125 2 {
126 3 longitude[j] = sentence[i];
127 3 j ++;
128 3 }
129 2 if(dflag == 6 && sentence[i] != ',')
130 2 {
131 3 longitude[j] = sentence[i];
132 3 longitude[j+1] = '\0'; //以字符串的方式结束
133 3 }
134 2 } // latitude[11]: (244)6.5211N longitude[12]: (1210)0.1536E
135 1
136 1 // TR1 = 1; //握手信号
137 1 for(i = 0;i < 3;i ++)
138 1 {
139 2 P3_3 = 1;
140 2 SBUF = 0x5A;
141 2 while(!TI)
142 2 {}
143 2 TI = 0;
144 2 P3_3 = 0;
145 2 delay(20);
146 2 }
147 1 // TR1 = 0;
148 1
149 1 for(i = 0;i < 14;i ++)
150 1 {
151 2 if(i < 7)
152 2 send_code = latitude[i + 3];
153 2 else
154 2 send_code = longitude[i - 3];
155 2 switch(send_code)
156 2 {
157 3 case '0': mod = 0xD4;break; // 0b11010100 last bit odd check
158 3 case '1': mod = 0xA5;break; // 0b10100101
159 3 case '2': mod = 0x2B;break; // 0b00101011
160 3 case '3': mod = 0x3C;break; // 0b00111100
161 3 case '4': mod = 0x4D;break; // 0b01001101
162 3 case '5': mod = 0xB2;break; // 0b10110010
163 3 case '6': mod = 0x66;break; // 0b01100110
164 3 case '7': mod = 0x71;break; // 0b01110001
165 3 case '8': mod = 0x8E;break; // 0b10001110
166 3 case '9': mod = 0x99;break; // 0b10011001
167 3 case '.': mod = 0x17;break; // 0b00010111
168 3 case 'N': mod = 0xE8;break; // 0b11101000
169 3 case 'E': mod = 0xC3;break; // 0b11000011
170 3 case 'W': mod = 0x00;break; // 0b00000000
171 3 case 'S': mod = 0xFF;break; // 0b11111111
172 3 default: break; // wrong coded , noted
173 3 }
174 2 // TR1 = 1;
175 2 P3_3 = 1;
176 2 SBUF = mod;
177 2 while(!TI)
178 2 {}
179 2 TI = 0;
C51 COMPILER V7.06 MAIN 06/07/2008 15:27:35 PAGE 4
180 2 P3_3 = 0;
181 2 delay(20);
182 2 }
183 1 // TR1 = 0;
184 1 goto start;
185 1 }
186
187 void delay(unsigned char n)
188 // delay 0.5 * n ms
189 {
190 1 unsigned char i,j;
191 1 for(i = 0;i < n;i ++)
192 1 {
193 2 for(j = 0;j < 100;j ++)
194 2 {}
195 2 }
196 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 577 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 87 10
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -