📄 serial.lst
字号:
C51 COMPILER V6.23a SERIAL 07/14/2005 11:03:35 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN D:\Work\Mini\serial.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\c51.exe D:\Work\Mini\serial.c
stmt level source
1 #include "config.h"
2 #include <stdio.h>
3 #include "io.h"
4 #include "global.h"
5 #include "event.h"
6 #include "78e516.h"
7
8
9 U8 lrc;
10
11 /*
12 函数 设定波特率
13 波特率 = 震荡频率(18.432M)/(32*(65536-[RCAP2H,RCAP2L]))
14 */
15 void SetBaudRate(U8 baudrate)
16 {
17 1 U16 code baudtbl[] = {-60,-30,-15,-10,-5};
18 1
19 1 THL2 = RCAP2 = baudtbl[baudrate];
20 1 }
21
22 /*
23 函数 往串口发送一个字符
24 输入 value 要发送的字符
25 */
26 void put_buf(U8 value)
27 {
28 1 // 等待缓冲区有空间
29 1 while (((TxWrite + 1) & 0x0f) == TxRead)
30 1 {
31 2 }
32 1 TxBuffer[TxWrite] = value;
33 1 TxWrite = (TxWrite + 1) & 0x0f;
34 1 lrc = lrc ^ value;
35 1 if (TxEmpty == 1)
36 1 {
37 2 TxEmpty = 0;
38 2 TI = 1;
39 2 }
40 1 // TxEmpty = 0;
41 1 // SBUF = value;
42 1 // lrc = lrc ^ value;
43 1 // while(TxEmpty == 0);
44 1 }
45
46 /*
47 函数 串口通讯的处理程序
48 */
49 void CheckSerial(void)
50 {
51 1 U8 i,checkl;
52 1
53 1 if (RxBusy == 0) return;
54 1 // 接收到通讯数据包
55 1 if (RxCount == 0)
C51 COMPILER V6.23a SERIAL 07/14/2005 11:03:35 PAGE 2
56 1 {
57 2 RxBusy = 0;
58 2 return;
59 2 }
60 1 if (RxBuffer[0] == 3)
61 1 {
62 2 checkl = 0;
63 2 for (i=0; i<RxCount; i++)
64 2 {
65 3 checkl = checkl ^ RxBuffer[i];
66 3 }
67 2 if (checkl == 0)
68 2 {
69 3 // 接收到正确的数据包
70 3 switch(RxBuffer[1])
71 3 {
72 4 case '0': // 设定波特率
73 4 put_buf(2);
74 4 put_buf(0);
75 4 SetBaudRate(RxBuffer[2]);
76 4 break;
77 4 case '4': // 通讯测试
78 4 checkl = 0x01;
79 4 for (i=0; i<8; i++)
80 4 {
81 5 if (RxBuffer[6+i] != checkl) break;
82 5 checkl *= 2;
83 5 }
84 4 if (checkl == 0)
85 4 {
86 5 RxBuffer[0] = 3;
87 5 RxBuffer[1] = '4';
88 5 checkl = 0x80;
89 5 for (i=0; i<8; i++)
90 5 {
91 6 RxBuffer[6+i] = checkl;
92 6 checkl /= 2;
93 6 }
94 5 lrc = 0;
95 5 for (i=0; i<14; i++)
96 5 {
97 6 put_buf(RxBuffer[i]);
98 6 }
99 5 put_buf(lrc);
100 5 }
101 4 break;
102 4 case 0x3f:
103 4 put_buf(2);
104 4 put_buf(0);
105 4 while(TxEmpty == 0);
106 4 EnterISP();
107 4 break;
108 4 }
109 3 }
110 2 }
111 1 RxCount = 0;
112 1 RxBusy = 0;
113 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 221 ----
C51 COMPILER V6.23a SERIAL 07/14/2005 11:03:35 PAGE 3
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -