Subversion Repositories svnkaklik

Rev

Go to most recent revision | Details | Last modification | View Log

Rev Author Line No. Line
135 kakl 1
CCS PCM C Compiler, Version 3.245, 27853               22-I-07 23:13
2
 
3
               Filename: C:\PIC\laserus\laser.lst
4
 
5
               ROM used: 326 words (8%)
6
                         Largest free fragment is 2048
7
               RAM used: 19 (11%) at main() level
8
                         26 (15%) worst case
9
               Stack:    2 worst case (1 in main + 1 for interrupts)
10
 
11
*
12
0000:  MOVLW  00
13
0001:  MOVWF  0A
14
0002:  GOTO   0E7
15
0003:  NOP
16
0004:  MOVWF  7F
17
0005:  SWAPF  03,W
18
0006:  CLRF   03
19
0007:  MOVWF  21
20
0008:  MOVF   7F,W
21
0009:  MOVWF  20
22
000A:  MOVF   0A,W
23
000B:  MOVWF  28
24
000C:  CLRF   0A
25
000D:  SWAPF  20,F
26
000E:  MOVF   04,W
27
000F:  MOVWF  22
28
0010:  MOVF   77,W
29
0011:  MOVWF  23
30
0012:  MOVF   78,W
31
0013:  MOVWF  24
32
0014:  MOVF   79,W
33
0015:  MOVWF  25
34
0016:  MOVF   7A,W
35
0017:  MOVWF  26
36
0018:  MOVF   7B,W
37
0019:  MOVWF  27
38
001A:  BCF    03.7
39
001B:  BCF    03.5
40
001C:  BTFSS  0B.4
41
001D:  GOTO   020
42
001E:  BTFSC  0B.1
43
001F:  GOTO   033
44
0020:  MOVF   22,W
45
0021:  MOVWF  04
46
0022:  MOVF   23,W
47
0023:  MOVWF  77
48
0024:  MOVF   24,W
49
0025:  MOVWF  78
50
0026:  MOVF   25,W
51
0027:  MOVWF  79
52
0028:  MOVF   26,W
53
0029:  MOVWF  7A
54
002A:  MOVF   27,W
55
002B:  MOVWF  7B
56
002C:  MOVF   28,W
57
002D:  MOVWF  0A
58
002E:  SWAPF  21,W
59
002F:  MOVWF  03
60
0030:  SWAPF  7F,F
61
0031:  SWAPF  7F,W
62
0032:  RETFIE
63
0033:  BCF    0A.3
64
0034:  GOTO   035
65
.................... #include "laser.h" 
66
.................... #include <16F88.h> 
67
.................... //////// Standard Header file for the PIC16F88 device //////////////// 
68
.................... #device PIC16F88 
69
.................... #list 
70
....................  
71
.................... #device adc=8 
72
....................  
73
.................... #FUSES NOWDT                 	//No Watch Dog Timer 
74
.................... #FUSES XT                    	//Crystal osc <= 4mhz 
75
.................... #FUSES NOPUT                 	//No Power Up Timer 
76
.................... #FUSES MCLR                  	//Master Clear pin enabled 
77
.................... #FUSES NOBROWNOUT            	//No brownout reset 
78
.................... #FUSES NOLVP                 	//No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O 
79
.................... #FUSES NOCPD                 	//No EE protection 
80
.................... #FUSES NOWRT                 	//Program memory not write protected 
81
.................... #FUSES NODEBUG               	//No Debug mode for ICD 
82
.................... #FUSES NOPROTECT             	//Code not protected from reading 
83
.................... #FUSES NOFCMEN               	//Fail-safe clock monitor disabled 
84
.................... #FUSES NOIESO                	//Internal External Switch Over mode disabled 
85
....................  
86
.................... #use delay(clock=4000000) 
87
*
88
00D2:  MOVLW  2B
89
00D3:  MOVWF  04
90
00D4:  MOVF   00,W
91
00D5:  BTFSC  03.2
92
00D6:  GOTO   0E6
93
00D7:  MOVLW  01
94
00D8:  MOVWF  78
95
00D9:  CLRF   77
96
00DA:  DECFSZ 77,F
97
00DB:  GOTO   0DA
98
00DC:  DECFSZ 78,F
99
00DD:  GOTO   0D9
100
00DE:  MOVLW  4A
101
00DF:  MOVWF  77
102
00E0:  DECFSZ 77,F
103
00E1:  GOTO   0E0
104
00E2:  NOP
105
00E3:  NOP
106
00E4:  DECFSZ 00,F
107
00E5:  GOTO   0D7
108
00E6:  RETLW  00
109
....................  
110
....................  
111
.................... #include "16F88_Reg.H" 
112
.................... // Komplete definition of all Special Feature Registers 
113
.................... // of PIC16F87 and PIC16F88 
114
.................... // (c)miho 2005 
115
....................  
116
.................... #list 
117
....................  
118
....................  
119
.................... #define SERVO PIN_B5    // Vystup pro rizeni serva 
120
.................... #define LASER PIN_B4    // Vstup pro cteni laseru 
121
....................  
122
.................... // kroutitka 
123
.................... #define  CERVENA  0  // AN0 
124
.................... #define  CERNA    1  // AN1 
125
.................... //#define  ZELENA   3  // AN3 
126
.................... //#define  MODRA    4  // AN4 
127
....................  
128
.................... //#define OFFSET 100       // Predni kolecko vprostred pri care vprostred 
129
.................... //#define HYSTERESE 3      // Rozdil mezi behem tam a zpet 
130
....................  
131
.................... boolean edge; 
132
.................... int8 uhel; 
133
....................  
134
.................... #int_EXT 
135
.................... EXT_isr() 
136
.................... { 
137
....................    int n, t1, t2, t; 
138
....................  
139
....................    set_timer0(0);          // Vynulovani casovace pro 2ms 
140
*
141
0035:  CLRF   01
142
....................    output_high(SERVO); 
143
0036:  BSF    03.5
144
0037:  BCF    06.5
145
0038:  BCF    03.5
146
0039:  BSF    06.5
147
....................    while(get_timer0()<(1000/256));    // Ceka 1ms 
148
003A:  MOVF   01,W
149
003B:  SUBLW  02
150
003C:  BTFSC  03.0
151
003D:  GOTO   03A
152
....................    for(n=uhel; n>0; n--) delay_us(3); // Sirka impulzu podle uhlu 
153
003E:  MOVF   2A,W
154
003F:  MOVWF  2E
155
0040:  MOVF   2E,F
156
0041:  BTFSC  03.2
157
0042:  GOTO   048
158
0043:  NOP
159
0044:  NOP
160
0045:  NOP
161
0046:  DECF   2E,F
162
0047:  GOTO   040
163
....................    output_low(SERVO); 
164
0048:  BSF    03.5
165
0049:  BCF    06.5
166
004A:  BCF    03.5
167
004B:  BCF    06.5
168
....................    while(get_timer0()<(3000/256)); // Ceka do 3ms, nez zacne scanovat 
169
004C:  MOVF   01,W
170
004D:  SUBLW  0A
171
004E:  BTFSC  03.0
172
004F:  GOTO   04C
173
....................  
174
....................    set_timer0(0);          // Vynulovani casovace pro zjisteni polohy cary 
175
0050:  CLRF   01
176
....................    if(edge)                // Zrcatko prejizdelo tam nebo zpet? 
177
0051:  BTFSS  29.0
178
0052:  GOTO   092
179
....................    { 
180
....................      edge=false; 
181
0053:  BCF    29.0
182
....................      ext_int_edge(H_TO_L);    // Pristi inerrupt bude od opacne hrany 
183
0054:  BSF    03.5
184
0055:  BCF    01.6
185
....................      INT0IF_1=0;              // Povoleni dalsiho preruseni 
186
0056:  BCF    0B.1
187
....................      enable_interrupts(INT_EXT); 
188
0057:  BCF    03.5
189
0058:  BSF    0B.4
190
....................      enable_interrupts(GLOBAL); 
191
0059:  MOVLW  C0
192
005A:  IORWF  0B,F
193
.................... //     do 
194
....................      { 
195
....................        while(0==input(LASER));  // Ceka na detekci cary 
196
005B:  BSF    03.5
197
005C:  BSF    06.4
198
005D:  MOVLW  00
199
005E:  BCF    03.5
200
005F:  BTFSC  06.4
201
0060:  MOVLW  01
202
0061:  XORLW  00
203
0062:  BTFSC  03.2
204
0063:  GOTO   05B
205
.................... //   output_high(SERVO); 
206
....................        t1=get_timer0();         // Poznamena cas nabezne hrany 
207
0064:  MOVF   01,W
208
0065:  MOVWF  2F
209
....................        while(1==input(LASER));  // Ceka az zkonci cara 
210
0066:  BSF    03.5
211
0067:  BSF    06.4
212
0068:  MOVLW  00
213
0069:  BCF    03.5
214
006A:  BTFSC  06.4
215
006B:  MOVLW  01
216
006C:  SUBLW  01
217
006D:  BTFSC  03.2
218
006E:  GOTO   066
219
.................... //   output_low(SERVO); 
220
....................        t2=get_timer0();         // Poznamena cas sestupne hrany 
221
006F:  MOVF   01,W
222
0070:  MOVWF  30
223
....................        t=t2-t1; 
224
0071:  MOVF   2F,W
225
0072:  SUBWF  30,W
226
0073:  MOVWF  31
227
....................      } //while((t<5) || (t>7)); // Cara je detekovana, kdyz trva mezi xx ms 
228
....................      if ((t>3) && (t<8)) uhel=(160-(read_adc()>>2))-t1; 
229
0074:  MOVF   31,W
230
0075:  SUBLW  03
231
0076:  BTFSC  03.0
232
0077:  GOTO   08B
233
0078:  MOVF   31,W
234
0079:  SUBLW  07
235
007A:  BTFSS  03.0
236
007B:  GOTO   08B
237
007C:  BSF    1F.2
238
007D:  BTFSC  1F.2
239
007E:  GOTO   07D
240
007F:  MOVF   1E,W
241
0080:  MOVWF  77
242
0081:  RRF    77,F
243
0082:  RRF    77,F
244
0083:  MOVLW  3F
245
0084:  ANDWF  77,F
246
0085:  MOVF   77,W
247
0086:  SUBLW  A0
248
0087:  MOVWF  78
249
0088:  MOVF   2F,W
250
0089:  SUBWF  78,W
251
008A:  MOVWF  2A
252
....................      set_adc_channel(1); 
253
008B:  MOVLW  08
254
008C:  MOVWF  78
255
008D:  MOVF   1F,W
256
008E:  ANDLW  C7
257
008F:  IORWF  78,W
258
0090:  MOVWF  1F
259
....................    } 
260
....................    else 
261
0091:  GOTO   0CE
262
....................    { 
263
....................      edge=true; 
264
0092:  BSF    29.0
265
....................      ext_int_edge(L_TO_H); 
266
0093:  BSF    03.5
267
0094:  BSF    01.6
268
....................      INT0IF_1=0;              // Povoleni dalsiho preruseni 
269
0095:  BCF    0B.1
270
....................      enable_interrupts(INT_EXT); 
271
0096:  BCF    03.5
272
0097:  BSF    0B.4
273
....................      enable_interrupts(GLOBAL); 
274
0098:  MOVLW  C0
275
0099:  IORWF  0B,F
276
.................... //     do 
277
....................      { 
278
....................        while(0==input(LASER));  // Ceka na detekci cary 
279
009A:  BSF    03.5
280
009B:  BSF    06.4
281
009C:  MOVLW  00
282
009D:  BCF    03.5
283
009E:  BTFSC  06.4
284
009F:  MOVLW  01
285
00A0:  XORLW  00
286
00A1:  BTFSC  03.2
287
00A2:  GOTO   09A
288
....................        t1=get_timer0();         // Poznamena cas nabezne hrany 
289
00A3:  MOVF   01,W
290
00A4:  MOVWF  2F
291
....................        while(1==input(LASER));  // Ceka az zkonci cara 
292
00A5:  BSF    03.5
293
00A6:  BSF    06.4
294
00A7:  MOVLW  00
295
00A8:  BCF    03.5
296
00A9:  BTFSC  06.4
297
00AA:  MOVLW  01
298
00AB:  SUBLW  01
299
00AC:  BTFSC  03.2
300
00AD:  GOTO   0A5
301
....................        t2=get_timer0();         // Poznamena cas sestupne hrany 
302
00AE:  MOVF   01,W
303
00AF:  MOVWF  30
304
....................        t=t2-t1; 
305
00B0:  MOVF   2F,W
306
00B1:  SUBWF  30,W
307
00B2:  MOVWF  31
308
....................      } //while((t<5) || (t>7)); // Cara je detekovana, kdyz trva mezi xx ms 
309
....................      if ((t>3) && (t<8)) uhel=((read_adc()>>2)+32)+t1; 
310
00B3:  MOVF   31,W
311
00B4:  SUBLW  03
312
00B5:  BTFSC  03.0
313
00B6:  GOTO   0C8
314
00B7:  MOVF   31,W
315
00B8:  SUBLW  07
316
00B9:  BTFSS  03.0
317
00BA:  GOTO   0C8
318
00BB:  BSF    1F.2
319
00BC:  BTFSC  1F.2
320
00BD:  GOTO   0BC
321
00BE:  MOVF   1E,W
322
00BF:  MOVWF  77
323
00C0:  RRF    77,F
324
00C1:  RRF    77,F
325
00C2:  MOVLW  3F
326
00C3:  ANDWF  77,F
327
00C4:  MOVF   77,W
328
00C5:  ADDLW  20
329
00C6:  ADDWF  2F,W
330
00C7:  MOVWF  2A
331
....................      set_adc_channel(0); 
332
00C8:  MOVLW  00
333
00C9:  MOVWF  78
334
00CA:  MOVF   1F,W
335
00CB:  ANDLW  C7
336
00CC:  IORWF  78,W
337
00CD:  MOVWF  1F
338
....................    } 
339
....................    while(true); 
340
00CE:  GOTO   0CE
341
.................... } 
342
....................  
343
....................  
344
....................  
345
00CF:  BCF    0B.1
346
00D0:  BCF    0A.3
347
00D1:  GOTO   020
348
.................... void main() 
349
.................... { 
350
*
351
00E7:  CLRF   04
352
00E8:  MOVLW  1F
353
00E9:  ANDWF  03,F
354
00EA:  BSF    03.5
355
00EB:  BCF    1F.4
356
00EC:  BCF    1F.5
357
00ED:  MOVF   1B,W
358
00EE:  ANDLW  80
359
00EF:  MOVWF  1B
360
00F0:  MOVLW  07
361
00F1:  MOVWF  1C
362
....................    setup_adc_ports(sAN0|sAN1|VSS_VDD); // AD pro kroutitka 
363
00F2:  BCF    1F.4
364
00F3:  BCF    1F.5
365
00F4:  MOVF   1B,W
366
00F5:  ANDLW  80
367
00F6:  IORLW  03
368
00F7:  MOVWF  1B
369
....................    setup_adc(ADC_CLOCK_INTERNAL); 
370
00F8:  BCF    1F.6
371
00F9:  BCF    03.5
372
00FA:  BSF    1F.6
373
00FB:  BSF    1F.7
374
00FC:  BSF    03.5
375
00FD:  BCF    1F.7
376
00FE:  BCF    03.5
377
00FF:  BSF    1F.0
378
....................    setup_spi(FALSE); 
379
0100:  BCF    14.5
380
0101:  BSF    03.5
381
0102:  BCF    06.2
382
0103:  BSF    06.1
383
0104:  BCF    06.4
384
0105:  MOVLW  00
385
0106:  BCF    03.5
386
0107:  MOVWF  14
387
0108:  BSF    03.5
388
0109:  MOVWF  14
389
....................    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); 
390
010A:  MOVF   01,W
391
010B:  ANDLW  C0
392
010C:  IORLW  07
393
010D:  MOVWF  01
394
....................    setup_timer_1(T1_DISABLED); 
395
010E:  BCF    03.5
396
010F:  CLRF   10
397
....................    setup_timer_2(T2_DISABLED,0,1); 
398
0110:  MOVLW  00
399
0111:  MOVWF  78
400
0112:  MOVWF  12
401
0113:  MOVLW  00
402
0114:  BSF    03.5
403
0115:  MOVWF  12
404
....................    setup_comparator(NC_NC_NC_NC); 
405
0116:  MOVLW  07
406
0117:  MOVWF  1C
407
0118:  MOVF   05,W
408
0119:  MOVLW  03
409
011A:  MOVWF  77
410
011B:  DECFSZ 77,F
411
011C:  GOTO   11B
412
011D:  MOVF   1C,W
413
011E:  BCF    03.5
414
011F:  BCF    0D.6
415
....................    setup_vref(FALSE); 
416
0120:  BSF    03.5
417
0121:  CLRF   1D
418
....................    setup_oscillator(False); 
419
0122:  CLRF   0F
420
0123:  MOVF   0F,W
421
....................  
422
....................    delay_ms(100); 
423
0124:  MOVLW  64
424
0125:  BCF    03.5
425
0126:  MOVWF  2B
426
0127:  CALL   0D2
427
....................    set_adc_channel(0); 
428
0128:  MOVLW  00
429
0129:  MOVWF  78
430
012A:  MOVF   1F,W
431
012B:  ANDLW  C7
432
012C:  IORWF  78,W
433
012D:  MOVWF  1F
434
....................    Delay_ms(1); 
435
012E:  MOVLW  01
436
012F:  MOVWF  2B
437
0130:  CALL   0D2
438
....................  
439
....................    ext_int_edge(L_TO_H); 
440
0131:  BSF    03.5
441
0132:  BSF    01.6
442
....................    edge=true; 
443
0133:  BCF    03.5
444
0134:  BSF    29.0
445
....................    uhel=((read_adc()>>2)+32)+30;; 
446
0135:  BSF    1F.2
447
0136:  BTFSC  1F.2
448
0137:  GOTO   136
449
0138:  MOVF   1E,W
450
0139:  MOVWF  77
451
013A:  RRF    77,F
452
013B:  RRF    77,F
453
013C:  MOVLW  3F
454
013D:  ANDWF  77,F
455
013E:  MOVF   77,W
456
013F:  ADDLW  20
457
0140:  ADDLW  1E
458
0141:  MOVWF  2A
459
....................    enable_interrupts(INT_EXT); 
460
0142:  BSF    0B.4
461
....................    enable_interrupts(GLOBAL); 
462
0143:  MOVLW  C0
463
0144:  IORWF  0B,F
464
.................... } 
465
0145:  SLEEP
466
 
467
Configuration Fuses:
468
   Word  1: 3F29   XT NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT
469
   Word  2: 3FFC   NOFCMEN NOIESO