📄 main.lst
字号:
C51 COMPILER V7.04 MAIN 12/25/2007 13:24:01 PAGE 1
C51 COMPILER V7.04, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 // Remote Host Control program
2 // 2007.8.1 by Ericosn
3
4 #include <REG51.h>
5 #define uchar unsigned char
6 #define uint unsigned int
7 #define DevAddr 0x00 //1号设备为0x00,2号设备为0x01
8
9 uchar idata Buffer[6];
10 uint idata Timer[16];
11 uint PortFlag;
12 uchar rlength;
13 uchar PF;
14
15 sbit P15 = P1^5;
16 sbit P17 = P1^7;
17 sbit P07 = P0^7;
18 bit RcvFlag = 0;
19 uchar HandonFlag = 0;
20 uchar HandonTimer = 0;
21
22 void init(void);
23 void Delay(uint);
24 void ProcMsg(void);
25
26 void main(void)
27 {
28 1 uchar i;
29 1
30 1 init();
31 1 for(i=0;i<16;i++)
32 1 Timer[i] = 0;
33 1 while(1){
34 2 if(RcvFlag==1){
35 3 ProcMsg();
36 3 RcvFlag = 0;
37 3 ES = 1;
38 3 }
39 2 if (HandonFlag==1){
40 3 HandonFlag = 2;
41 3 P0 = 0x00;
42 3 P2 = 0x00;
43 3 Delay(100);
44 3 P0 = 0xFF;
45 3 P2 = 0xFF;
46 3 }
47 2 }
48 1 }
49
50 ///////////////////////////////////////////////////////////////
51 void init(void)
52 {
53 1 rlength = 0;
54 1 PF = 0;
55 1 RcvFlag = 0;
C51 COMPILER V7.04 MAIN 12/25/2007 13:24:01 PAGE 2
56 1 PortFlag = 0;
57 1
58 1 P0 = 0xFF;
59 1 P2 = 0xFF;
60 1 TMOD = 0x21;
61 1 TH1 = 0xFD;
62 1 TL1 = 0xFD;
63 1 TH0 = 0xDC;
64 1 TL0 = 0x00;
65 1 SCON = 0x50;
66 1 IE |= 0x92;
67 1 IP |= 0x10;
68 1 TR0 = 1;
69 1 TR1 = 1;
70 1 P17 = 0;
71 1 }
72
73 ///////////////////////////////////////////////////////////////
74 void ProcMsg(void)
75 {
76 1 uchar i,temp;
77 1 uint j;
78 1 uchar comid;
79 1 uchar TNum1 = Buffer[2];
80 1 uchar TNum2 = Buffer[3];
81 1
82 1 for(i=0,temp=0;i<8;i++)
83 1 temp += (((TNum2>>i)&0x01)<<(7-i));
84 1 TNum2 = temp;
85 1 TNum1=(uchar)((~PortFlag)&TNum1); //Mask the inefficent command
86 1 TNum2=(uchar)(((~PortFlag)>>8)&TNum2); //Mask the inefficent command
87 1 comid = ((Buffer[1]<<2)>>6);
88 1 switch(comid){
89 2 case 1:
90 2 P0 = ~TNum1;
91 2 P2 = ~TNum2;
92 2 Delay(100);
93 2 P0 = 0xFF;
94 2 P2 = 0xFF;
95 2 break;
96 2 case 2:
97 2 //the shutdown processing code
98 2 break;
99 2 default:
100 2 break;
101 2 }
102 1 j = 1;
103 1 for(i=0;i<8;i++){
104 2 if(((TNum1>>i)&0x01)==1){
105 3 PortFlag |= (j<<i);
106 3 Timer[i] = 500;
107 3 }
108 2 }
109 1 for(i=0;i<8;i++){
110 2 if(((TNum2>>i)&0x01)==1){
111 3 i += 8;
112 3 PortFlag |= (j<<i);
113 3 Timer[i] = 500;
114 3 i -= 8;
115 3 }
116 2 }
117 1 }
C51 COMPILER V7.04 MAIN 12/25/2007 13:24:01 PAGE 3
118
119 ///////////////////////////////////////////////////////////////
120 //delay 1ms procedure
121 void Delay(uint n)
122 {
123 1 uchar i;
124 1 while(n--){
125 2 for(i=0;i<99;i++)
126 2 {;}
127 2 }
128 1 }
129
130 ///////////////////////////////////////////////////////////////
131 //Timer0 10ms interrupt
132 void timer0(void) interrupt 1 using 1
133 {
134 1 bit Sample;
135 1 uchar i;
136 1 uint j = 1;
137 1
138 1 TH0 = 0xDC;
139 1 TL0 = 0x00;
140 1
141 1 if(HandonFlag==0)
142 1 {
143 2 Sample = P15;
144 2 if(Sample==0)
145 2 {
146 3 HandonTimer++;
147 3 if(HandonTimer>10)
148 3 {
149 4 HandonFlag = 1;
150 4 HandonTimer = 0;
151 4 }
152 3 }
153 2 else HandonTimer=0;
154 2 }
155 1 if(HandonFlag==2)
156 1 {
157 2 Sample = P15;
158 2 if(Sample==1)
159 2 {
160 3 HandonTimer++;
161 3 if(HandonTimer>10)
162 3 {
163 4 HandonFlag = 0;
164 4 HandonTimer = 0;
165 4 for(i=0;i<16;i++)
166 4 Timer[i] = 0;
167 4 PortFlag = 0;
168 4 }
169 3 }
170 2 else HandonTimer=0;
171 2 }
172 1 for(i=0;i<16;i++){
173 2 if(((PortFlag>>i)&0x01)==1){
174 3 Timer[i]--;
175 3 if(Timer[i]==0) PortFlag&=~(j<<i);
176 3 }
177 2 }
178 1 }
179
C51 COMPILER V7.04 MAIN 12/25/2007 13:24:01 PAGE 4
180 ///////////////////////////////////////////////////////////////
181 //Serial port receive interrupt
182 void serial(void) interrupt 4 using 2
183 {
184 1 uchar temp;
185 1 if(RI&(!RcvFlag)){
186 2 temp = SBUF;
187 2 RI = 0;
188 2 if(rlength == 0)
189 2 {
190 3 if(temp == 0xA1)
191 3 {
192 4 Buffer[rlength] = temp;
193 4 rlength ++;
194 4 PF = temp;
195 4 }
196 3 else
197 3 {
198 4 rlength = 0;
199 4 }
200 3 }
201 2 else if(rlength == 5)
202 2 {
203 3 Buffer[rlength] = temp;
204 3 if(((PF^temp)==0)&&(Buffer[4]==0xAF)&&((Buffer[1]&0x0F)==DevAddr))
205 3 {
206 4 RcvFlag = 1;
207 4 ES = 0;
208 4 }
209 3 rlength = 0;
210 3 PF = 0;
211 3 }
212 2 else
213 2 {
214 3 Buffer[rlength] = temp;
215 3 PF += temp;
216 3 rlength ++;
217 3 }
218 2 }
219 1 if(TI){
220 2 TI=0;
221 2 //the Tx interrupt processing code
222 2 }
223 1 }
224
225 //END
226
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 645 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 3
IDATA SIZE = 38 ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -