📄 serial.lst
字号:
C51 COMPILER V8.02 SERIAL 11/20/2007 19:40:01 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <at89x51.h>
2 #include "serial.h"
3 #include "function.h"
4 #define MAXCMDSIZE 20
5
6 typedef unsigned char uchar;
7 typedef unsigned int uint;
8
9 unsigned char SerialCmd[20],SerialRet[10];
10 bit SerialReq;
11
12 void Send(unsigned char * s,int len)
13 {
14 1 int i;
15 1 ES=0;
16 1 REN=0;
17 1 for(i=0;i<len;i++)
18 1 {
19 2 SBUF=s[i];
20 2 while(!TI){}
21 2 TI=0;
22 2 }
23 1 REN=1;
24 1 ES=1;
25 1 }
26 void SendAddr(bit success)
27 {
28 1 ES=0;
29 1 REN=0;
30 1 if(success)
31 1 SBUF=DEVICE_ID;
32 1 else
33 1 SBUF=0;
34 1 while(!TI){}
35 1 TI=0;
36 1 REN=1;
37 1 ES=1;
38 1 }
39 unsigned char CheckSum(unsigned char * c)
40 {
41 1 unsigned char len,checksum,i;
42 1 len=c[0];
43 1 checksum=0;
44 1 for(i=0;i<len;i++)
45 1 checksum=checksum^c[i];
46 1 if(checksum==0xff)
47 1 checksum=0xfe;
48 1 return checksum;
49 1 }
50
51 bit ProcessCmd()
52 {
53 1 bit success=1;
54 1 ES=0;
55 1 if(CheckSum(SerialCmd)!=SerialCmd[SerialCmd[0]])
C51 COMPILER V8.02 SERIAL 11/20/2007 19:40:01 PAGE 2
56 1 {
57 2 SendAddr(0);
58 2 SerialReq=0;
59 2 ES=1;
60 2 return 0;
61 2 }
62 1 switch (SerialCmd[1])
63 1 {
64 2 case CMD_PING:
65 2 SerialRet[0]=0;
66 2 break;
67 2 case CMD_ENABLE_MANUAL_CON:
68 2 if(!SetManCon(1)) success=0;
69 2 break;
70 2 case CMD_DISABLE_MANUAL_CON:
71 2 if(!SetManCon(0)) success=0;
72 2 break;
73 2 case CMD_QUERY_ROOM:
74 2 if(!GetRoom()) success=0;
75 2 break;
76 2 case CMD_QUERY_DATA:
77 2 if(!GetData()) success=0;
78 2 break;
79 2 case CMD_SET_MANUAL_CON_TIME:
80 2 if(!SetManTime()) success=0;
81 2 break;
82 2 case CMD_CON_LIGHT:
83 2 if(!SetLight()) success=0;
84 2 break;
85 2 case CMD_CON_AIRCON:
86 2 if(!SetAirCon()) success=0;
87 2 break;
88 2 case CMD_ADJ_TIMER:
89 2 if(!SetTime()) success=0;
90 2 break;
91 2 case CMD_SETTIMER_LIGHT: break;
92 2 case CMD_SETTIMER_AIRCON: break;
93 2 case CMD_SETTIMER_POWER: break;
94 2 }
95 1 if(success)
96 1 {
97 2 SendAddr(1);
98 2 if(SerialRet[0]>0)
99 2 {
100 3 Send(SerialRet,SerialRet[0]+1);
101 3 }
102 2 }
103 1 else
104 1 {
105 2 SendAddr(0);
106 2 SerialReq=0;
107 2 ES=1;
108 2 return 0;
109 2 }
110 1 SerialReq=0;
111 1 ES=1;
112 1 return 1;
113 1 }
114
115
116
117 void Serial_ISR () interrupt 4
C51 COMPILER V8.02 SERIAL 11/20/2007 19:40:01 PAGE 3
118 {
119 1 static unsigned char tlen,len,state;
120 1 if (!RI) {RI=0;TI=0;return;}
121 1 if(SBUF==0xff && SerialReq==0)
122 1 {
123 2 state=1;
124 2 tlen=0;
125 2 len=0;
126 2 RI=0;TI=0;
127 2 return;
128 2 }
129 1 switch (state)
130 1 {
131 2 case 0:
132 2 break;
133 2 case 1:
134 2 if(SBUF==DEVICE_ID)
135 2 state=2;
136 2 else
137 2 state=0;
138 2 break;
139 2 case 2:
140 2 len=0;
141 2 tlen=SBUF;
142 2 if(tlen>MAXCMDSIZE)
143 2 tlen=MAXCMDSIZE;
144 2 SerialCmd[0]=tlen;
145 2 state=3;
146 2 break;
147 2 case 3:
148 2 len++;
149 2 SerialCmd[len]=SBUF;
150 2 if(len>=tlen)
151 2 {
152 3 tlen=0;
153 3 len=0;
154 3 state=0;
155 3 SerialReq=1;
156 3 }
157 2 }
158 1 RI=0;TI=0;
159 1 }
160
161
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 448 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 8
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -