Blame | Last modification | View Log | Download
CCS PCW C Compiler, Version 3.110, 15448
Filename: d:\@kaklik\programy\pic_c\prenos\letadlo\prijimac\ostra_bez_ladicich_impulsu\main.LST
ROM used: 309 (30%)
Largest free fragment is 715
RAM used: 18 (26%) at main() level
20 (29%) worst case
Stack: 3 worst case (1 in main + 2 for interrupts)
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 083
0003: NOP
0004: BTFSC 03.5
0005: GOTO 00A
0006: MOVWF 0E
0007: SWAPF 03,W
0008: MOVWF 0F
0009: GOTO 00F
000A: BCF 03.5
000B: MOVWF 0E
000C: SWAPF 03,W
000D: MOVWF 0F
000E: BSF 0F.1
000F: MOVF 0A,W
0010: MOVWF 13
0011: CLRF 0A
0012: BCF 03.7
0013: SWAPF 0E,F
0014: MOVF 04,W
0015: MOVWF 10
0016: MOVF 0C,W
0017: MOVWF 11
0018: MOVF 0D,W
0019: MOVWF 12
001A: BCF 03.5
001B: BTFSS 0B.5
001C: GOTO 01F
001D: BTFSC 0B.2
001E: GOTO 043
001F: MOVF 10,W
0020: MOVWF 04
0021: MOVF 11,W
0022: MOVWF 0C
0023: MOVF 12,W
0024: MOVWF 0D
0025: MOVF 13,W
0026: MOVWF 0A
0027: SWAPF 0F,W
0028: MOVWF 03
0029: BCF 03.5
002A: SWAPF 0E,W
002B: BTFSC 0F.1
002C: BSF 03.5
002D: RETFIE
.................... // Prijimac
.................... #include "main.h"
.................... #include <16F84.h>
.................... //////// Standard Header file for the PIC16F84 device ////////////////
.................... #device PIC16F84
.................... #list
....................
.................... #use delay(clock=4000000)
002E: MOVLW 1F
002F: MOVWF 04
0030: MOVF 00,W
0031: BTFSC 03.2
0032: GOTO 042
0033: MOVLW 01
0034: MOVWF 0D
0035: CLRF 0C
0036: DECFSZ 0C,F
0037: GOTO 036
0038: DECFSZ 0D,F
0039: GOTO 035
003A: MOVLW 4A
003B: MOVWF 0C
003C: DECFSZ 0C,F
003D: GOTO 03C
003E: NOP
003F: NOP
0040: DECFSZ 00,F
0041: GOTO 033
0042: RETLW 00
.................... #fuses XT,PUT,NOWDT
....................
....................
.................... #include "..\..\common.h"
.................... #DEFINE OSA_X 1 // adresy os
.................... #DEFINE OSA_Y 2
.................... #DEFINE OSA_Z 3
.................... #DEFINE OSA_W 4
.................... #DEFINE TLs 5
.................... #DEFINE Trim 6 // ovladani prijimace
....................
.................... #DEFINE IMPULS 250 // sirka impulsu
.................... #DEFINE SYNC 15 // delka uvodniho ticha v IMPULS/4
....................
....................
.................... #DEFINE PRIJIMAC PIN_A3 // pin na ktery je pripojen prijimac
.................... #DEFINE SERVO_X PIN_A2 // piny na ktere jsou pripojena serva
.................... #DEFINE SERVO_Y PIN_B0
.................... #DEFINE DILEK 20 // jeden krok serva v mikrosekundach
....................
.................... #bit T0IF = 0xB.2 // int. flag od Timer0
....................
.................... static int8 x = 16; // poloha serv
.................... static int8 y = 16;
.................... int8 trim_x = 2;
.................... int8 trim_y = 2;
....................
.................... boolean flag; // priznak, ze doslo k preruseni prijmu ovladanim serv
....................
.................... #int_TIMER0
.................... TIMER0_isr()
.................... {
.................... int8 n;
....................
.................... flag = true; // doslo k preruseni prijmu
0043: BSF 18.0
.................... // x = 15;
.................... // y = 15;
....................
.................... output_high(SERVO_X); // uvodni impuls 1ms
0044: BSF 03.5
0045: BCF 05.2
0046: BCF 03.5
0047: BSF 05.2
.................... delay_ms(1);
0048: MOVLW 01
0049: MOVWF 1F
004A: CALL 02E
.................... for (n=trim_x; n>0; n--);
004B: MOVF 16,W
004C: MOVWF 1E
004D: MOVF 1E,F
004E: BTFSC 03.2
004F: GOTO 052
0050: DECF 1E,F
0051: GOTO 04D
.................... for (n=x; n>0; n--) Delay_us(DILEK);
0052: MOVF 14,W
0053: MOVWF 1E
0054: MOVF 1E,F
0055: BTFSC 03.2
0056: GOTO 05E
0057: MOVLW 06
0058: MOVWF 0C
0059: DECFSZ 0C,F
005A: GOTO 059
005B: NOP
005C: DECF 1E,F
005D: GOTO 054
.................... output_low(SERVO_X);
005E: BSF 03.5
005F: BCF 05.2
0060: BCF 03.5
0061: BCF 05.2
....................
.................... output_high(SERVO_Y);
0062: BSF 03.5
0063: BCF 06.0
0064: BCF 03.5
0065: BSF 06.0
.................... delay_ms(1);
0066: MOVLW 01
0067: MOVWF 1F
0068: CALL 02E
.................... for (n=trim_y; n>0; n--);
0069: MOVF 17,W
006A: MOVWF 1E
006B: MOVF 1E,F
006C: BTFSC 03.2
006D: GOTO 070
006E: DECF 1E,F
006F: GOTO 06B
.................... for (n=y; n>0; n--) Delay_us(DILEK);
0070: MOVF 15,W
0071: MOVWF 1E
0072: MOVF 1E,F
0073: BTFSC 03.2
0074: GOTO 07C
0075: MOVLW 06
0076: MOVWF 0C
0077: DECFSZ 0C,F
0078: GOTO 077
0079: NOP
007A: DECF 1E,F
007B: GOTO 072
.................... output_low(SERVO_Y);
007C: BSF 03.5
007D: BCF 06.0
007E: BCF 03.5
007F: BCF 06.0
0080: BCF 0B.2
0081: BCF 0A.3
0082: GOTO 01F
.................... }
....................
.................... // output_high(PIN_B1); // debug pin
....................
.................... void main()
.................... {
.................... int i;
.................... int8 osa, data, check, suma;
0083: CLRF 04
0084: MOVLW 1F
0085: ANDWF 03,F
0086: MOVLW 10
0087: MOVWF 14
0088: MOVWF 15
0089: MOVLW 02
008A: MOVWF 16
008B: MOVWF 17
....................
.................... setup_counters(RTCC_INTERNAL,RTCC_DIV_64); // Preruseni po 16,3ms
008C: MOVLW 05
008D: MOVWF 0C
008E: BTFSS 0C.3
008F: GOTO 098
0090: MOVLW 07
0091: CLRF 01
0092: MOVLW 81
0093: MOVWF 04
0094: MOVF 00,W
0095: ANDLW C0
0096: IORLW 0F
0097: MOVWF 00
0098: CLRWDT
0099: MOVLW 81
009A: MOVWF 04
009B: MOVF 00,W
009C: ANDLW C0
009D: IORWF 0C,W
009E: MOVWF 00
.................... enable_interrupts(INT_TIMER0);
009F: BSF 0B.5
.................... enable_interrupts(global);
00A0: BSF 0B.7
....................
.................... loop:
.................... flag = false;
00A1: BCF 18.0
....................
.................... // Cekej na uvodni ticho
.................... for (i=SYNC; i>0; i--)
00A2: MOVLW 0F
00A3: MOVWF 19
00A4: MOVF 19,F
00A5: BTFSC 03.2
00A6: GOTO 0B8
.................... {
.................... delay_us(IMPULS/4);
00A7: MOVLW 14
00A8: MOVWF 0C
00A9: DECFSZ 0C,F
00AA: GOTO 0A9
00AB: NOP
.................... if (flag) goto loop;
00AC: BTFSS 18.0
00AD: GOTO 0AF
00AE: GOTO 0A1
.................... if (!input(PRIJIMAC)) i=SYNC;
00AF: BSF 03.5
00B0: BSF 05.3
00B1: BCF 03.5
00B2: BTFSC 05.3
00B3: GOTO 0B6
00B4: MOVLW 0F
00B5: MOVWF 19
.................... }
00B6: DECF 19,F
00B7: GOTO 0A4
....................
.................... // Cekej na startovaci 1
.................... while (input(PRIJIMAC)) if (flag) goto loop;
00B8: BSF 03.5
00B9: BSF 05.3
00BA: BCF 03.5
00BB: BTFSS 05.3
00BC: GOTO 0C1
00BD: BTFSS 18.0
00BE: GOTO 0C0
00BF: GOTO 0A1
00C0: GOTO 0B8
....................
.................... if (flag) goto loop;
00C1: BTFSS 18.0
00C2: GOTO 0C4
00C3: GOTO 0A1
....................
.................... // Posun na cteni prvniho datoveho bitu
.................... delay_us(2*IMPULS+2*IMPULS/3);
00C4: MOVLW DD
00C5: MOVWF 0C
00C6: DECFSZ 0C,F
00C7: GOTO 0C6
00C8: NOP
00C9: NOP
....................
.................... // Cteme bity
.................... for (i=8; i>0; i--)
00CA: MOVLW 08
00CB: MOVWF 19
00CC: MOVF 19,F
00CD: BTFSC 03.2
00CE: GOTO 0E9
.................... {
.................... data <<= 1;
00CF: BCF 03.0
00D0: RLF 1B,F
.................... if (input(PRIJIMAC)) data |= 1;
00D1: BSF 03.5
00D2: BSF 05.3
00D3: BCF 03.5
00D4: BTFSS 05.3
00D5: GOTO 0D7
00D6: BSF 1B.0
.................... if (flag) goto loop;
00D7: BTFSS 18.0
00D8: GOTO 0DA
00D9: GOTO 0A1
.................... output_high(PIN_B1); // debug pin
00DA: BSF 03.5
00DB: BCF 06.1
00DC: BCF 03.5
00DD: BSF 06.1
.................... delay_us(2*IMPULS+15);
00DE: MOVLW AB
00DF: MOVWF 0C
00E0: DECFSZ 0C,F
00E1: GOTO 0E0
00E2: NOP
.................... output_low(PIN_B1); // debug pin
00E3: BSF 03.5
00E4: BCF 06.1
00E5: BCF 03.5
00E6: BCF 06.1
.................... }
00E7: DECF 19,F
00E8: GOTO 0CC
....................
.................... // Cteme checksum
.................... check = 0;
00E9: CLRF 1C
.................... for (i=4; i>0; i--)
00EA: MOVLW 04
00EB: MOVWF 19
00EC: MOVF 19,F
00ED: BTFSC 03.2
00EE: GOTO 109
.................... {
.................... check <<= 1;
00EF: BCF 03.0
00F0: RLF 1C,F
.................... if (input(PRIJIMAC)) check |= 1;
00F1: BSF 03.5
00F2: BSF 05.3
00F3: BCF 03.5
00F4: BTFSS 05.3
00F5: GOTO 0F7
00F6: BSF 1C.0
.................... if (flag) goto loop;
00F7: BTFSS 18.0
00F8: GOTO 0FA
00F9: GOTO 0A1
.................... output_high(PIN_B1); // debug pin
00FA: BSF 03.5
00FB: BCF 06.1
00FC: BCF 03.5
00FD: BSF 06.1
.................... delay_us(2*IMPULS+15);
00FE: MOVLW AB
00FF: MOVWF 0C
0100: DECFSZ 0C,F
0101: GOTO 100
0102: NOP
.................... output_low(PIN_B1); // debug pin
0103: BSF 03.5
0104: BCF 06.1
0105: BCF 03.5
0106: BCF 06.1
.................... }
0107: DECF 19,F
0108: GOTO 0EC
....................
.................... swap(data); // kontrola kontrolniho souctu
0109: SWAPF 1B,F
.................... suma = data & 0xF;
010A: MOVF 1B,W
010B: ANDLW 0F
010C: MOVWF 1D
.................... swap(data);
010D: SWAPF 1B,F
.................... suma += data & 0xF;
010E: MOVF 1B,W
010F: ANDLW 0F
0110: ADDWF 1D,F
.................... suma++;
0111: INCF 1D,F
.................... suma &= 0xF;
0112: MOVLW 0F
0113: ANDWF 1D,F
.................... if (suma != check) goto loop;
0114: MOVF 1C,W
0115: SUBWF 1D,W
0116: BTFSC 03.2
0117: GOTO 119
0118: GOTO 0A1
....................
.................... osa = data >> 5; // extrahuj z ramce cislo osy a hodnotu
0119: SWAPF 1B,W
011A: MOVWF 1A
011B: RRF 1A,F
011C: MOVLW 07
011D: ANDWF 1A,F
.................... data &= 0x1F;
011E: MOVLW 1F
011F: ANDWF 1B,F
.................... switch(osa)
0120: MOVLW 01
0121: SUBWF 1A,W
0122: ADDLW FE
0123: BTFSC 03.0
0124: GOTO 12D
0125: ADDLW 02
0126: GOTO 12F
.................... {
.................... case OSA_X:
.................... x=data;
0127: MOVF 1B,W
0128: MOVWF 14
.................... break;
0129: GOTO 12D
.................... case OSA_y:
.................... y=data;
012A: MOVF 1B,W
012B: MOVWF 15
.................... break;
012C: GOTO 12D
.................... }
*
012F: BSF 0A.0
0130: BCF 0A.1
0131: BCF 0A.2
0132: ADDWF 02,F
0133: GOTO 127
0134: GOTO 12A
....................
.................... goto loop;
*
012D: GOTO 0A1
.................... }
....................
012E: SLEEP