str.lst
来自「本程序是一个RS232转网口的。是一个透明传输的模块」· LST 代码 · 共 313 行
LST
313 行
C51 COMPILER V7.06 STR 09/26/2008 13:36:18 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE STR
OBJECT MODULE PLACED IN ..\OUT\str.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Source\str.c BROWSE DEBUG OBJECTEXTEND PRINT(..\OUT\str.lst) OBJECT(..\O
-UT\str.obj)
stmt level source
1 /*
2 *****************************************************************************************************
3 *
4 * File name: string.c
5 *****************************************************************************************************
6 */
7 #include "..\head\includes.h"
8
9 /*
10 *****************************************************************************************************
11 *Func: N位的ASCII码化为HEX
12 *Note:
13 * 1: count = 5 *data++ (12345)
14 * 2: x=1*10000/1 x=x+2*10000/10 x=x+3*10000/100 ...
15 *****************************************************************************************************
16 */
17 unsigned long DecToHex(unsigned char xdata *data_ptr, unsigned char count)
18 {
19 1 unsigned char i;
20 1 unsigned long xdata count_value_temp=0;
21 1 unsigned long xdata count_value=0;
22 1 unsigned long xdata mod=1;
23 1
24 1 switch(count) {
25 2 case 5:
26 2 for (i=0; i<count; i++) {
27 3 count_value_temp = (*(data_ptr + i)-0x30) ;
28 3 count_value = count_value + count_value_temp * (10000 / mod );
29 3 mod *= 10;
30 3 }
31 2 break;
32 2 case 4:
33 2 for (i=0; i<count; i++) {
34 3 count_value_temp = (*(data_ptr + i)-0x30) ;
35 3 count_value = count_value + count_value_temp * (1000 / mod );
36 3 mod *= 10;
37 3 }
38 2 break;
39 2 case 3:
40 2 for (i=0; i<count; i++) {
41 3 count_value_temp = (*(data_ptr + i)-0x30) ;
42 3 count_value = count_value + count_value_temp * (100 / mod );
43 3 mod *= 10;
44 3 }
45 2 break;
46 2 case 2:
47 2 for (i=0; i<count; i++) {
48 3 count_value_temp = (*(data_ptr + i)-0x30) ;
49 3 count_value = count_value + count_value_temp * (10 / mod );
50 3 mod *= 10;
51 3 }
52 2 break;
53 2 case 1:
54 2 count_value = *data_ptr - 0x30;
C51 COMPILER V7.06 STR 09/26/2008 13:36:18 PAGE 2
55 2 break;
56 2 default :
57 2 count_value = 0;
58 2 break;
59 2 }
60 1 return (count_value);
61 1 }
62
63
64 /*
65 *****************************************************************************************************
66 *FUNC:
67 *NOTE:
68 *****************************************************************************************************
69 */
70 #if 1
71 unsigned char xdata Data_Length[6];
72 void HexToDec(unsigned int H_value )
73 {
74 1 if ((H_value >= 10000) && (H_value <= 65535)) {
75 2 Data_Length[0] = H_value / 10000 + 0x30;
76 2 Data_Length[1] = (H_value % 10000) / 1000 + 0x30;
77 2 Data_Length[2] = (H_value % 1000) / 100 + 0x30;
78 2 Data_Length[3] = (H_value % 100) / 10 + 0x30;
79 2 Data_Length[4] = H_value % 10 + 0x30;
80 2 }
81 1
82 1 if ((H_value >= 1000) && (H_value <= 9999)) {
83 2 Data_Length[0] = 0x30;
84 2 Data_Length[1] = H_value / 1000 + 0x30;
85 2 Data_Length[2] = (H_value % 1000) / 100 + 0x30;
86 2 Data_Length[3] = (H_value % 100) / 10 + 0x30;
87 2 Data_Length[4] = H_value % 10 + 0x30;
88 2 } else if ((H_value >= 100) && (H_value <= 999)) {
89 2 Data_Length[0] = 0x30;
90 2 Data_Length[1] = 0x30;
91 2 Data_Length[2] = H_value / 100 + 0x30;
92 2 Data_Length[3] = (H_value % 100) / 10 + 0x30;
93 2 Data_Length[4] = H_value % 10 + 0x30;
94 2 } else if ((H_value >= 10) && (H_value <= 99)) {
95 2 Data_Length[0] = 0x30;
96 2 Data_Length[1] = 0x30;
97 2 Data_Length[2] = 0x30;
98 2 Data_Length[3] = H_value / 10 + 0x30;
99 2 Data_Length[4] = H_value % 10 + 0x30;
100 2 } else if ((H_value >= 0) && (H_value <= 9)) {
101 2 Data_Length[0] = 0x30;
102 2 Data_Length[1] = 0x30;
103 2 Data_Length[2] = 0x30;
104 2 Data_Length[3] = 0x30;
105 2 Data_Length[4] = H_value + 0x30;
106 2 }
107 1
108 1 Data_Length[5] = '\0';
109 1 }
110
111 /*
112 *****************************************************************************************************
113 *FUNC:
114 *NOTE: "1235455555555555555555555555555555 AT OK" "AT OK"
115 *****************************************************************************************************
116 */
C51 COMPILER V7.06 STR 09/26/2008 13:36:18 PAGE 3
117 unsigned char *StrCompare(unsigned char *mother, unsigned char *son, unsigned int len)
118 {
119 1 unsigned int i;
120 1 unsigned char *son_temp;
121 1 unsigned char *mother_temp;
122 1 unsigned char *return_ptr=0;
123 1
124 1 for (i=0; i<len; i++) {
125 2 return_ptr = mother_temp = mother+i;
126 2 son_temp = son;
127 2 if (*mother_temp == *son_temp) { // 查找母串第一个与字串匹配
128 3 while (*son_temp) { //从第一个位置开始,查找子串所有匹配
129 4 if (*son_temp++ == *mother_temp) {
130 5 if (mother_temp < (mother+len)) {
131 6 mother_temp++;
132 6 } else {
133 6 return 0;
134 6 }
135 5 } else {
136 5 goto loop;
137 5 }
138 4 }
139 3 return return_ptr;
140 3 }
141 2 loop:
142 2 ;
143 2 }
144 1 return 0;
145 1 }
146
147 /*
148 *****************************************************************************************************
149 *FUNC:
150 *NOTE:
151 *****************************************************************************************************
152 */
153 #if 1
154 void ReplaceTag(unsigned char xdata *start, char *replace, unsigned char replace_len)
155 {
156 1 unsigned char idata i=0;
157 1
158 1 if (start == NULL) return;
159 1
160 1 while(*replace) {
161 2 *start++ = *replace++;
162 2 if (i < replace_len) {
163 3 i++;
164 3 } else {
165 3 return;
166 3 }
167 2 }
168 1
169 1 for (; i<replace_len; i++) { //
170 2 *start++ = 0x20; // 空格
171 2 }
172 1
173 1 /*
174 1 for (i=0; i < 8; i++) {
175 1 if (i < 5) {
176 1 ptr[i] = sub[i];
177 1 } else {
178 1 ptr[i] = 0x20; // 空格
C51 COMPILER V7.06 STR 09/26/2008 13:36:18 PAGE 4
179 1 }
180 1 }
181 1 */
182 1 }
183 #endif
184
185
186 /*
187 *****************************************************************************************************
188 *FUNC:
189 *NOTE: 192.168.0.100 00192 5位
190 *****************************************************************************************************
191 */
192 unsigned char xdata IpString[16];
193 void IpToStr(union IP_address sourceip)
194 {
195 1 unsigned char i,j,count,start,bit_num;
196 1
197 1 j = 0;
198 1 count=0;
199 1 start=0;
200 1 bit_num=0;
201 1
202 1 for (i=0; i<4; i++) {
203 2 if (sourceip.bytes[i] >= 100) {
204 3 bit_num = 3;
205 3 } else if (sourceip.bytes[i] >= 10){
206 3 bit_num = 2;
207 3 } else {
208 3 bit_num = 1;
209 3 }
210 2 start = 5-bit_num;
211 2 HexToDec(sourceip.bytes[i]); //将IP化为字符串后存在Data_Length里
212 2
213 2 for (j=0; j<bit_num; j++) {
214 3 IpString[count++] = Data_Length[start+j];
215 3 }
216 2 if (i == 3) {
217 3 IpString[count] = 0; //结束符
218 3 } else {
219 3 IpString[count++] = '.';
220 3 }
221 2 }
222 1 }
223
224
225 /*
226 *****************************************************************************************************
227 *FUNC:
228 *NOTE: 7200秒 24小时50分钟50秒
229 *****************************************************************************************************
230 */
231 char xdata TimeString[20];
232 void TimeToStr(unsigned long seconds)
233 {
234 1 unsigned char time[3]={0,0,0};
235 1 unsigned char i,j,count,start,bit_num;
236 1
237 1 j = 0;
238 1 count=0;
239 1 start=0;
240 1 bit_num=0;
C51 COMPILER V7.06 STR 09/26/2008 13:36:18 PAGE 5
241 1
242 1
243 1 time[0] = seconds/3600; // hours
244 1 time[1] = (seconds%3600)/60; // mins
245 1 time[2] = seconds%60; // secs
246 1
247 1 for (i=0; i<3; i++) {
248 2 if (time[i] >= 100) {
249 3 bit_num = 3;
250 3 } else if (time[i] >= 10){
251 3 bit_num = 2;
252 3 } else {
253 3 bit_num = 1;
254 3 }
255 2 start = 5-bit_num;
256 2 HexToDec(time[i]); //将IP化为字符串后存在Data_Length里
257 2
258 2 for (j=0; j<bit_num; j++) {
259 3 TimeString[count++] = Data_Length[start+j];
260 3 }
261 2 if (i == 0) {
262 3 TimeString[count++] = 0xd0; //"小"
263 3 TimeString[count++] = 0xa1;
264 3 TimeString[count++] = 0xca;
265 3 TimeString[count++] = 0xb1; //"时"
266 3 } else if (i == 1) {
267 3 TimeString[count++] = 0xb7; //"分"
268 3 TimeString[count++] = 0xd6;
269 3 TimeString[count++] = 0xd6;
270 3 TimeString[count++] = 0xd3; //"钟"
271 3 } else {
272 3 TimeString[count++] = 0xc3; //"秒"
273 3 TimeString[count++] = 0xeb;
274 3 TimeString[count++] = 0; // 结束符
275 3 }
276 2 }
277 1 }
278
279
280 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2010 ----
CONSTANT SIZE = 3 ----
XDATA SIZE = 42 12
PDATA SIZE = ---- ----
DATA SIZE = ---- 49
IDATA SIZE = ---- 1
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?