?? main.lst
字號:
C51 COMPILER V8.02 MAIN 03/22/2008 11:45:38 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.C BROWSE DEBUG OBJECTEXTEND
line level source
1 ////////////
2 #include <reg52.h> ///52的庫
3 #include <intrins.h>
4 /////////////////////
5 //sfr isp_wdt = 0xe1;
6 sfr isp_data = 0xe2;
7 sfr isp_addrh = 0xe3;
8 sfr isp_addrl = 0xe4;
9 sfr isp_cmd = 0xe5;
10 sfr isp_trig = 0xe6;
11 sfr isp_contr = 0xe7;
12 /////////
13 #define uchar unsigned char
14 #define uint unsigned int
15 #define Dlen 8
16 uchar Data[Dlen+1]={1};//={1,2,3,4,5,6,7,8,9,0xA,0xB,0x0C,0x0D};
17 uchar Databak[Dlen+1];
18 uchar AckData[Dlen+1];
19 uchar number,flag;
20 uchar Eeprom_data[Dlen];
21 sfr WDT=0XE1;
22 /*sfr ISP_DATA=0XE2;
23 sfr ISP_ADDRH=0xE3;
24 sfr ISP_ADDRL=0xE4;
25 sfr ISP_CMD=0xE5;
26 sfr ISP_TRIG=0xE6;
27 sfr ISP_COUNT =0xE7;
28 sfr ENABLE_ISP=0x80;
29 uchar DEBUG_DATA =0x5A;
30 uint DFSA=0x2000; */
31
32 sbit LED=P1^7;
33 sbit LED1=P3^4;
34 sbit LED2=P3^5;
35 bit BeingEnd=1;
36 uint TimerCount=0,mTcount=0;
37 bit cansend=0,issend=0,whilerec=0,whilesend=0;
38
39 /////////
40 unsigned char iic_num;
41 ////寫入到從t_addr地址開始
42 /* 打開 ISP,IAP 功能 */
43 void EraseEeprom(unsigned char t_addr)
44 {
45 1 isp_addrh = t_addr;
46 1 isp_addrl = 0;
47 1 EA = 0; /* 關中斷 */
48 1 isp_contr = 0x81; /* 1000,0000 */
49 1 isp_cmd = 3;
50 1 isp_trig = 0x46;
51 1 isp_trig = 0xb9;
52 1 _nop_();
53 1 _nop_();
54 1 isp_contr = 0; /* 0111,1111 */
55 1 isp_cmd = 0;
C51 COMPILER V8.02 MAIN 03/22/2008 11:45:38 PAGE 2
56 1 isp_trig = 0;
57 1 isp_addrh = 0;
58 1 isp_addrl = 0;
59 1 EA = 1; /* 開中斷 */
60 1 }
61 ////一次最多256個,建議試用幾個,要存入的數據松在指針指向的緩沖區
62 void WriteEeprom(unsigned char t_addr, unsigned char num, unsigned char /*xdata*/ *ptr)
63 {
64 1 EraseEeprom(t_addr);
65 1 for (iic_num=0; iic_num<num; iic_num++)
66 1 {
67 2 isp_data = *(ptr+iic_num);
68 2 isp_addrh = t_addr;
69 2 isp_addrl = iic_num;
70 2 EA = 0; /* 關中斷 */
71 2 isp_contr = 0x81; /* 1000,0000 */
72 2 isp_cmd = 2;
73 2 isp_trig = 0x46;
74 2 isp_trig = 0xb9;
75 2 _nop_();
76 2 _nop_();
77 2 isp_contr = 0; /* 0111,1111 */
78 2 isp_cmd = 0;
79 2 isp_trig = 0;
80 2 isp_addrh = 0;
81 2 isp_addrl = 0;
82 2 EA = 1; /* 開中斷 */
83 2 }
84 1 }
85 ////從eeprom的t_addr地址開始讀出num個數據
86 ////存入以temp[0]開始的存儲單元
87 ////一次最多256個,讀數的數據存入指針指向的緩沖區
88 void ReadEeprom(unsigned char s_addr, unsigned char num, unsigned char /*xdata*/ *ptr)
89 {
90 1 for (iic_num=0; iic_num<num; iic_num++)
91 1 {
92 2 isp_addrh = s_addr;
93 2 isp_addrl = iic_num;
94 2 EA = 0; /* 關中斷 */
95 2 isp_contr = 0x81; /* 1000,0000 */
96 2 isp_cmd = 1;
97 2 isp_trig = 0x46;
98 2 isp_trig = 0xb9;
99 2 _nop_();
100 2 _nop_();
101 2 isp_contr = 0; /* 0111,1111 */
102 2 isp_cmd = 0;
103 2 isp_trig = 0;
104 2 isp_addrh = 0;
105 2 isp_addrl = 0;
106 2 EA = 1; /* 開中斷 */
107 2 *(ptr+iic_num) = isp_data;
108 2 }
109 1 }/***********串口發送一個字節****************/
110
111 void send(uchar S_Data)
112 {
113 1 SBUF = S_Data;
114 1 while(TI == 0);
115 1 TI =0;
116 1 }
117
C51 COMPILER V8.02 MAIN 03/22/2008 11:45:38 PAGE 3
118 /************生成校驗碼子程序***********/
119 char* XiaoYan(uchar *a)
120 {
121 1 uchar i, all=0;
122 1
123 1 for(i=0;i<Dlen;i++)
124 1 all=all+a[i];
125 1 all=~all;
126 1 all=all-1;
127 1 a[Dlen]=all;
128 1 return a;
129 1 }
130
131 /************接收數據校驗子程序***********/
132 unsigned int RXiaoYan(uchar *a)
133 {
134 1 uchar rets=0,i, all=0;
135 1
136 1 for(i=0;i<Dlen;i++)
137 1 all=all+a[i];
138 1 all=~all;
139 1 all=all-1;
140 1 if(a[Dlen]==all)
141 1 rets=1;
142 1 return rets;
143 1
144 1 }
145
146
147 /****************串口發送子程序****************/
148 void sends(uchar *b )
149 {
150 1
151 1 uchar count,i;
152 1 cansend=0;
153 1 count=Dlen+1;
154 1 LED1=0;
155 1 for(i=0;i<count;i++)
156 1 send(b[i]);
157 1 }
158 //-------------等待接收----------------------
159 void whilRec(void)
160 {
161 1 unsigned char Cmd=0;
162 1 while(whilerec)
163 1 {
164 2 //if(flag==12)
165 2 flag=0;
166 2 number=0;
167 2 Cmd=0;
168 2 Cmd=Data[0];
169 2 if(RXiaoYan(Data)) //crc ok
170 2 {
171 3 if(Cmd>0xA0)//接到的是命令偵
172 3 {
173 4 switch (Cmd)
174 4 {
175 5 case 0xA1:
176 5 break;
177 5 case 0xA2:
178 5 break;
179 5 case 0xAC://應答ok
C51 COMPILER V8.02 MAIN 03/22/2008 11:45:38 PAGE 4
180 5 cansend=1;
181 5 break;
182 5 case 0xAB://需要重發
183 5 sends(Databak);
184 5 whilerec=0;
185 5 cansend=1;
186 5 break;
187 5 case 0xCB://開始
188 5 BeingEnd=1;
189 5 break;
190 5 case 0xCE://暫停
191 5 BeingEnd=0;
192 5 break;
193 5 default:
194 5 break;
195 5 }
196 4 }
197 3 else //crc no
198 3 {
199 4 sends(XiaoYan(Data));
200 4 cansend=1;
201 4 whilerec=0;
202 4 }
203 3 }
204 2 else
205 2 {
206 3
207 3 AckData[0]=0xAB;//要求pc重發
208 3 sends(XiaoYan(AckData));
209 3 whilerec=0;
210 3 cansend=1;
211 3 }
212 2 whilerec=0;
213 2
214 2
215 2 }
216 1 }
217
218 /*********MCU初始化**************/
219 void MCU_Init(void)
220 {
221 1 TMOD = 0x22;
222 1 //TH1 = TL1 = 0xFA;//9600 T1 為波特率發生器
223 1 TH1 = TL1 = 0xFD;//19200 T1 為波特率發生器
224 1 TH0=TL0=0xa3;
225 1 SCON = 0x50;
226 1 PCON = 0x80;//SMOD=1;
227 1 TR1=1;
228 1 TR0=1;
229 1 ET0=1;
230 1 ES = 1;
231 1 EA = 1;
232 1 }
233 /*************T1中斷********************/
234 void T0_int() interrupt 1
235 {
236 1 TimerCount++;
237 1 if(TimerCount>200)
238 1 {
239 2 TimerCount=0;
240 2 WDT=0x34;
241 2 mTcount++;
C51 COMPILER V8.02 MAIN 03/22/2008 11:45:38 PAGE 5
242 2 }
243 1 }
244
245 /*************接收中斷********************/
246 void Serial() interrupt 4 using 2
247 {
248 1 uint num=0;
249 1 if(RI == 1)
250 1 {
251 2
252 2 LED2=0;
253 2 Data[number++]= SBUF;
254 2 num=number-1;
255 2 Databak[num]=Data[num];
256 2
257 2 RI = 0;
258 2 flag++;
259 2 if(flag==Dlen+1)
260 2 {
261 3 whilerec=1;
262 3
263 3 }
264 2 }
265 1 }
266 /**************主程序***********************/
267 void main(void)
268 {
269 1 unsigned int ld=0,san=0;
270 1 MCU_Init();
271 1 //send(0xAA);
272 1 //for(ld=0;ld<Dlen;ld++)
273 1 //Eeprom_data[ld]=0xA0+ld;
274 1 //WriteEeprom(0x82, Dlen, Eeprom_data);
275 1 _nop_();
276 1 _nop_();
277 1 send(0x01);
278 1 for(ld=0;ld<Dlen;ld++)
279 1 Eeprom_data[ld]=0;
280 1
281 1 while(1)
282 1 {
283 2 if(mTcount>350)
284 2 {
285 3 mTcount=0;
286 3 for(ld=0;ld<Dlen;ld++)
287 3 Eeprom_data[ld]=0;
288 3 LED2=LED1;
289 3 LED1=!LED1;
290 3 ReadEeprom(0x82, Dlen, Eeprom_data) ;
291 3 _nop_();
292 3 _nop_();
293 3 sends(XiaoYan(Eeprom_data));
294 3 /*ReadEeprom(0x83, Dlen, Eeprom_data) ;
295 3 _nop_();
296 3 _nop_();
297 3 sends(XiaoYan(Eeprom_data));
298 3 mTcount=0; */
299 3 mTcount=0;
300 3
301 3 }
302 2 //whilRec();
303 2 }
C51 COMPILER V8.02 MAIN 03/22/2008 11:45:38 PAGE 6
304 1 }
305
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 707 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 42 20
IDATA SIZE = ---- ----
BIT SIZE = 5 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -