0,0 → 1,457 |
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 |