📄 sart.lst
字号:
181 1 } */
182 1 else if (amr_stat == STAT_SYNC1) {//3
183 2 amr_frame[amr_count++] = c; //收数据
184 2 if (amr_count == 6) {
185 3 amr_len = c + 1; //收取长度值
186 3 amr_count = 0;
187 3 amr_stat = STAT_DATA; // uart_sendchar(c);
188 3 }
189 2 }
190 1 else if (amr_stat == STAT_DATA) { //5
191 2 amr_frame[6+amr_count++] = c;
192 2 if (amr_count == amr_len) {
193 3 amr_count = 0;
194 3 amr_stat = STAT_PREAMBLE; //1
195 3 if (c == FRAME_END){ //16h uart_sendchar(c);
196 4 // uart_sendblock(amr_frame,amr_len+6);
197 4 return 1;
198 4 }
199 3 }
200 2 }
201 1
202 1 return 0;
203 1
204 1 }
205
206 /*=============================================================================*/
207
208 // Transmit a single byte
209 void uart_sendchar(uchar chr)
210 {
211 1
212 1 // unsigned char i , a;
213 1 /* Disable serial interrupts for a while */
214 1 ES = 0;
215 1 /*
216 1 * Clear the Transmit Interrupt flag to prepare the serial port
217 1 * to send a new character.
218 1 */
219 1
220 1 TI = 0;
221 1 ACC=chr; /*从缓冲中发送串行口数据*/
222 1 TB8=P; /*--------------------- *偶校验位设置*/
223 1 SBUF=ACC;
224 1
225 1 /* Wait until tx buffer is empty */
226 1 while (TI != 1) {;}
227 1
228 1 // Clear it
229 1 TI = 0;
230 1
231 1 /* Enable serial interrupts*/
232 1 ES = 1;
233 1
234 1 }
235 /*=============================================================================*/
236
237
238 void uart_sendblock(uchar buf[], int len)
239 {
240 1 uchar i;
C51 COMPILER V7.09 SART 01/12/2007 09:29:49 PAGE 5
241 1
242 1 for (i = 0; i < len; i++) uart_sendchar(buf[i]);
243 1
244 1 }
245 /*=============================================================================*/
246
247 // Sync transmit/receiving
248 /*=============================================================================*/
249
250 void sync_sendchar(uchar c)
251 {
252 1 int i;
253 1 EA = 0;
254 1 SDATA = 1;
255 1 while (D_RDY == 0); // wait for D_RDY to become high
256 1 D_SYNC = 0;
257 1
258 1 for (i = 0; i < 8; i++) {
259 2 SDATA=(c & 0x01) ? 1:0 ; // put data bit
260 2 SCLK=0;
261 2 SCLK=0;
262 2 SCLK=0;
263 2 SCLK=0;
264 2
265 2 c >>= 1; // next bit
266 2 SCLK=1;
267 2 SCLK=1;
268 2 SCLK=1;
269 2 SCLK=1;
270 2 }
271 1
272 1 D_SYNC = 1;
273 1
274 1 SDATA=1;
275 1 EA = 1;
276 1 }
277
278 /*=============================================================================*/
279
280 int sync_recved()
281 {
282 1 return (RX_RDY == 0) ? 1 : 0;
283 1 }
284
285 /*=============================================================================*/
286
287 int sync_data_ready()
288 {
289 1 return (D_RDY == 0) ? 1 : 0;
290 1 }
291
292 /*=============================================================================*/
293
294 // Call this function only when sync_recved() returns 1
295 int sync_getchar(void)
296 {
297 1
298 1 uchar l;
299 1 int c;
300 1 EA = 0;
301 1 D_SYNC = 1;
302 1
C51 COMPILER V7.09 SART 01/12/2007 09:29:49 PAGE 6
303 1 // while(D_RDY!=0);
304 1
305 1 for (l = 0; l < 8; l++) {
306 2 SCLK = 0;
307 2 SCLK = 0;
308 2 SCLK = 0;
309 2 SCLK = 0;
310 2 SCLK = 0;
311 2 SCLK = 0;
312 2 SCLK = 0;
313 2 SCLK = 0;
314 2 SCLK = 0;
315 2 SCLK = 0;
316 2 c >>= 1;
317 2 if (SDATA) c |= 0x80;
318 2 else c &= 0x7f;
319 2 SCLK = 1;
320 2 SCLK = 1;
321 2 SCLK = 1;
322 2 SCLK = 1;
323 2 }
324 1 D_SYNC = 1;
325 1 EA = 1;
326 1 return c;
327 1
328 1 }
329 /*=============================================================================*/
330
331
332 int sync_getblock(uchar buf[], int len)
333 {
334 1 unsigned char i;
335 1
336 1 for (i = 0; i < len; i++) {
337 2 if (sync_data_ready()) buf[i] = sync_getchar();
338 2 else return -1;
339 2 }
340 1
341 1 return len;
342 1
343 1 }
344
345
346 /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$* /
347
348
349 !!!!!!重复特别注意:写表的地址必须从串口写入才有效!!!!!
350 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
351
352 /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
353
354
355
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 522 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 11
IDATA SIZE = 49 ----
C51 COMPILER V7.09 SART 01/12/2007 09:29:49 PAGE 7
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 + -