📄 scomm.lst
字号:
C51 COMPILER V7.50 SCOMM 05/18/2007 03:46:48 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SCOMM
OBJECT MODULE PLACED IN Scomm.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Scomm.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "Config.h"
2 #include "I2C.h"
3 #include "Scomm.h"
4 #include "ZI.h"
5
6 bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no);
7 bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no);
8 void Delay(uchar);
9
10 #define uchar unsigned char
11 #define uint unsigned int
12
13 sbit CTRL485 = P1^7;
14
15 #define N 32
16 uchar idata Serial_buf[N];
17 #define AT24c04 0x08
18 uchar data Command_status1 = 0x00;
19
20 uchar Receive_Data()
21 {
22 1 RI = 0;
23 1 while(!RI)
24 1 RI = 0;
25 1 ACC = SBUF;
26 1 if(P != RB8)
27 1 {
28 2 SP--;
29 2 SP--;
30 2 CY = 0;
31 2 return CY;
32 2 }
33 1 return(ACC);
34 1 }
35
36 bit Receive_One(uchar *s)
37 {
38 1 uchar CS = 0x00;
39 1 uchar Serial_data;
40 1 char i,j;
41 1 RI = 0;
42 1 Serial_data = SBUF;
43 1 while(Serial_data != 0xfe)
44 1 return 0;
45 1 do
46 1 Serial_data = Receive_Data();
47 1 while(Serial_data == 0xfe);
48 1 if(Serial_data != 0x68)
49 1 return 0;
50 1 CS += 0x68;
51 1 for(i=0;i<=5;i++)
52 1 {
53 2 *(s+i) = Receive_Data();
54 2 CS += *(s+i);
55 2 }
C51 COMPILER V7.50 SCOMM 05/18/2007 03:46:48 PAGE 2
56 1 if(Receive_Data() != 0x68)
57 1 return 0;
58 1 CS += 0x68;
59 1 CS +=(*(s+6) = Receive_Data());
60 1 j = *(s+7)=Receive_Data();
61 1 CS += j;
62 1 for(i=0;i<=(j-1);i++)
63 1 {
64 2 CS += (*(s+i+8) = Receive_Data());
65 2 *(s+i+8) -= 0x33;
66 2 }
67 1 if(CS != Receive_Data())
68 1 return 0;
69 1 if(Receive_Data() != 0x16)
70 1 return 0;
71 1 REN = 0;
72 1 return 1;
73 1 }
74
75 void RXD_Int(void) interrupt 4
76 {
77 1 CY = Receive_One(Serial_buf);
78 1 if(CY)
79 1 Command_status1 |= 0x04;
80 1 }
81
82 void Send_Data(uchar Serial_data)
83 {
84 1 ACC = Serial_data;
85 1 TB8 = P;
86 1 TI = 0;
87 1 SBUF = Serial_data;
88 1 while(!TI)
89 1 TI = 0;
90 1 }
91
92 void TXD_Int(uchar *s)
93 {
94 1 uchar CS = 0x68;
95 1 char i,j;
96 1
97 1 CTRL485 = 0;
98 1 Delay(1);
99 1 TI = 0;
100 1 Send_Data(0xfe);
101 1 Send_Data(0xfe);
102 1 Send_Data(0x68);
103 1 for(i=0;i<=5;i++)
104 1 {
105 2 CS += *(s+i);
106 2 Send_Data(*(s+i));
107 2 }
108 1 CS += 0x68;
109 1 Send_Data(0x68);
110 1 CS += *(s+6);
111 1 Send_Data(*(s+6));
112 1 CS += *(s+7);
113 1 j = *(s+7);
114 1 Send_Data(j);
115 1 for(i=0;i<=j-1;i++)
116 1 {
117 2 (*(s+i+8)) += 0x33;
C51 COMPILER V7.50 SCOMM 05/18/2007 03:46:48 PAGE 3
118 2 Send_Data(*(s+i+8));
119 2 CS += (*(s+i+8));
120 2 }
121 1 Send_Data(CS);
122 1 Send_Data(0x16);
123 1 RI = 0;
124 1 TI = 0;
125 1 Delay(1);
126 1 CTRL485 = 1;
127 1 }
128
129 uchar Serial_Addr(uchar *s1)
130 {
131 1 uchar i,a[6];
132 1 IRcvStr(AT24c04,0x00,a,6);
133 1 for(i=0;i<=5;i++)
134 1 {
135 2 if(*(s1+i) != 0x99)
136 2 break;
137 2 if(i == 5)
138 2 return(0x02);
139 2 }
140 1 for(i=0;i<=5;i++)
141 1 {
142 2 if(*(s1+i) != a[i])
143 2 return(0x00);
144 2 }
145 1 return(0x01);
146 1 }
147
148
149 bit Serial_Password(uchar *s)
150 {
151 1 uchar i,a[4];
152 1 IRcvStr(AT24c04,0x06,a,4);
153 1 for(i=0;i<=3;i++)
154 1 {
155 2 if(*(s+i) != a[i])
156 2 return 0;
157 2 }
158 1 return 1;
159 1 }
160
161 bit Serial_Command_Run(uchar *s)
162 {
163 1 switch(Serial_Addr(s))
164 1 {
165 2 case 0x02:
166 2 break;
167 2 case 0x01:
168 2 switch(*(s+6))
169 2 {
170 3 case 0x0f:
171 3 if(~Serial_Password(s+8))
172 3 return 0;
173 3
174 3 ISendStr(AT24c04,0x06,s+12,4);
175 3 Delay(5);
176 3 IRcvStr(AT24c04,0x00,s,6);
177 3 IRcvStr(AT24c04,0x06,s+8,4);
178 3 (*(s+6)) |= 0x80;
179 3 (*(s+7)) = 0x04;
C51 COMPILER V7.50 SCOMM 05/18/2007 03:46:48 PAGE 4
180 3 TXD_Int(s);
181 3 break;
182 3 case 0x01:
183 3 break;
184 3 case 0x04:
185 3 break;
186 3 default:
187 3 break;
188 3 }
189 2 break;
190 2 case 0x00:
191 2 return 0;
192 2 break;
193 2 }
194 1 return 1;
195 1 }
196
197
198 void Serial_Command()
199 {
200 1 if(Command_status1 & 0x04)
201 1 {
202 2 if(~Serial_Command_Run(Serial_buf))
203 2 {
204 3 REN = 1;
205 3 Command_status1 &= 0xfb;
206 3 return;
207 3 }
208 2 REN = 1;
209 2 Command_status1 &= 0xfb;
210 2 }
211 1 }
212
213
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1196 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 ----
IDATA SIZE = 32 ----
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 + -