Blame | Last modification | View Log | Download
CCS PCW C Compiler, Version 3.110, 15448Filename: d:\@kaklik\programy\pic_c\prenos\letadlo\prijimac\ostra_bez_ladicich_impulsu\main.LSTROM used: 309 (30%)Largest free fragment is 715RAM used: 18 (26%) at main() level20 (29%) worst caseStack: 3 worst case (1 in main + 2 for interrupts)*0000: MOVLW 000001: MOVWF 0A0002: GOTO 0830003: NOP0004: BTFSC 03.50005: GOTO 00A0006: MOVWF 0E0007: SWAPF 03,W0008: MOVWF 0F0009: GOTO 00F000A: BCF 03.5000B: MOVWF 0E000C: SWAPF 03,W000D: MOVWF 0F000E: BSF 0F.1000F: MOVF 0A,W0010: MOVWF 130011: CLRF 0A0012: BCF 03.70013: SWAPF 0E,F0014: MOVF 04,W0015: MOVWF 100016: MOVF 0C,W0017: MOVWF 110018: MOVF 0D,W0019: MOVWF 12001A: BCF 03.5001B: BTFSS 0B.5001C: GOTO 01F001D: BTFSC 0B.2001E: GOTO 043001F: MOVF 10,W0020: MOVWF 040021: MOVF 11,W0022: MOVWF 0C0023: MOVF 12,W0024: MOVWF 0D0025: MOVF 13,W0026: MOVWF 0A0027: SWAPF 0F,W0028: MOVWF 030029: BCF 03.5002A: SWAPF 0E,W002B: BTFSC 0F.1002C: BSF 03.5002D: RETFIE.................... // Prijimac.................... #include "main.h".................... #include <16F84.h>.................... //////// Standard Header file for the PIC16F84 device ////////////////.................... #device PIC16F84.................... #list........................................ #use delay(clock=4000000)002E: MOVLW 1F002F: MOVWF 040030: MOVF 00,W0031: BTFSC 03.20032: GOTO 0420033: MOVLW 010034: MOVWF 0D0035: CLRF 0C0036: DECFSZ 0C,F0037: GOTO 0360038: DECFSZ 0D,F0039: GOTO 035003A: MOVLW 4A003B: MOVWF 0C003C: DECFSZ 0C,F003D: GOTO 03C003E: NOP003F: NOP0040: DECFSZ 00,F0041: GOTO 0330042: 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 prijmu0043: BSF 18.0.................... // x = 15;.................... // y = 15;........................................ output_high(SERVO_X); // uvodni impuls 1ms0044: BSF 03.50045: BCF 05.20046: BCF 03.50047: BSF 05.2.................... delay_ms(1);0048: MOVLW 010049: MOVWF 1F004A: CALL 02E.................... for (n=trim_x; n>0; n--);004B: MOVF 16,W004C: MOVWF 1E004D: MOVF 1E,F004E: BTFSC 03.2004F: GOTO 0520050: DECF 1E,F0051: GOTO 04D.................... for (n=x; n>0; n--) Delay_us(DILEK);0052: MOVF 14,W0053: MOVWF 1E0054: MOVF 1E,F0055: BTFSC 03.20056: GOTO 05E0057: MOVLW 060058: MOVWF 0C0059: DECFSZ 0C,F005A: GOTO 059005B: NOP005C: DECF 1E,F005D: GOTO 054.................... output_low(SERVO_X);005E: BSF 03.5005F: BCF 05.20060: BCF 03.50061: BCF 05.2........................................ output_high(SERVO_Y);0062: BSF 03.50063: BCF 06.00064: BCF 03.50065: BSF 06.0.................... delay_ms(1);0066: MOVLW 010067: MOVWF 1F0068: CALL 02E.................... for (n=trim_y; n>0; n--);0069: MOVF 17,W006A: MOVWF 1E006B: MOVF 1E,F006C: BTFSC 03.2006D: GOTO 070006E: DECF 1E,F006F: GOTO 06B.................... for (n=y; n>0; n--) Delay_us(DILEK);0070: MOVF 15,W0071: MOVWF 1E0072: MOVF 1E,F0073: BTFSC 03.20074: GOTO 07C0075: MOVLW 060076: MOVWF 0C0077: DECFSZ 0C,F0078: GOTO 0770079: NOP007A: DECF 1E,F007B: GOTO 072.................... output_low(SERVO_Y);007C: BSF 03.5007D: BCF 06.0007E: BCF 03.5007F: BCF 06.00080: BCF 0B.20081: BCF 0A.30082: GOTO 01F.................... }........................................ // output_high(PIN_B1); // debug pin........................................ void main().................... {.................... int i;.................... int8 osa, data, check, suma;0083: CLRF 040084: MOVLW 1F0085: ANDWF 03,F0086: MOVLW 100087: MOVWF 140088: MOVWF 150089: MOVLW 02008A: MOVWF 16008B: MOVWF 17........................................ setup_counters(RTCC_INTERNAL,RTCC_DIV_64); // Preruseni po 16,3ms008C: MOVLW 05008D: MOVWF 0C008E: BTFSS 0C.3008F: GOTO 0980090: MOVLW 070091: CLRF 010092: MOVLW 810093: MOVWF 040094: MOVF 00,W0095: ANDLW C00096: IORLW 0F0097: MOVWF 000098: CLRWDT0099: MOVLW 81009A: MOVWF 04009B: MOVF 00,W009C: ANDLW C0009D: IORWF 0C,W009E: 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 0F00A3: MOVWF 1900A4: MOVF 19,F00A5: BTFSC 03.200A6: GOTO 0B8.................... {.................... delay_us(IMPULS/4);00A7: MOVLW 1400A8: MOVWF 0C00A9: DECFSZ 0C,F00AA: GOTO 0A900AB: NOP.................... if (flag) goto loop;00AC: BTFSS 18.000AD: GOTO 0AF00AE: GOTO 0A1.................... if (!input(PRIJIMAC)) i=SYNC;00AF: BSF 03.500B0: BSF 05.300B1: BCF 03.500B2: BTFSC 05.300B3: GOTO 0B600B4: MOVLW 0F00B5: MOVWF 19.................... }00B6: DECF 19,F00B7: GOTO 0A4........................................ // Cekej na startovaci 1.................... while (input(PRIJIMAC)) if (flag) goto loop;00B8: BSF 03.500B9: BSF 05.300BA: BCF 03.500BB: BTFSS 05.300BC: GOTO 0C100BD: BTFSS 18.000BE: GOTO 0C000BF: GOTO 0A100C0: GOTO 0B8........................................ if (flag) goto loop;00C1: BTFSS 18.000C2: GOTO 0C400C3: GOTO 0A1........................................ // Posun na cteni prvniho datoveho bitu.................... delay_us(2*IMPULS+2*IMPULS/3);00C4: MOVLW DD00C5: MOVWF 0C00C6: DECFSZ 0C,F00C7: GOTO 0C600C8: NOP00C9: NOP........................................ // Cteme bity.................... for (i=8; i>0; i--)00CA: MOVLW 0800CB: MOVWF 1900CC: MOVF 19,F00CD: BTFSC 03.200CE: GOTO 0E9.................... {.................... data <<= 1;00CF: BCF 03.000D0: RLF 1B,F.................... if (input(PRIJIMAC)) data |= 1;00D1: BSF 03.500D2: BSF 05.300D3: BCF 03.500D4: BTFSS 05.300D5: GOTO 0D700D6: BSF 1B.0.................... if (flag) goto loop;00D7: BTFSS 18.000D8: GOTO 0DA00D9: GOTO 0A1.................... output_high(PIN_B1); // debug pin00DA: BSF 03.500DB: BCF 06.100DC: BCF 03.500DD: BSF 06.1.................... delay_us(2*IMPULS+15);00DE: MOVLW AB00DF: MOVWF 0C00E0: DECFSZ 0C,F00E1: GOTO 0E000E2: NOP.................... output_low(PIN_B1); // debug pin00E3: BSF 03.500E4: BCF 06.100E5: BCF 03.500E6: BCF 06.1.................... }00E7: DECF 19,F00E8: GOTO 0CC........................................ // Cteme checksum.................... check = 0;00E9: CLRF 1C.................... for (i=4; i>0; i--)00EA: MOVLW 0400EB: MOVWF 1900EC: MOVF 19,F00ED: BTFSC 03.200EE: GOTO 109.................... {.................... check <<= 1;00EF: BCF 03.000F0: RLF 1C,F.................... if (input(PRIJIMAC)) check |= 1;00F1: BSF 03.500F2: BSF 05.300F3: BCF 03.500F4: BTFSS 05.300F5: GOTO 0F700F6: BSF 1C.0.................... if (flag) goto loop;00F7: BTFSS 18.000F8: GOTO 0FA00F9: GOTO 0A1.................... output_high(PIN_B1); // debug pin00FA: BSF 03.500FB: BCF 06.100FC: BCF 03.500FD: BSF 06.1.................... delay_us(2*IMPULS+15);00FE: MOVLW AB00FF: MOVWF 0C0100: DECFSZ 0C,F0101: GOTO 1000102: NOP.................... output_low(PIN_B1); // debug pin0103: BSF 03.50104: BCF 06.10105: BCF 03.50106: BCF 06.1.................... }0107: DECF 19,F0108: GOTO 0EC........................................ swap(data); // kontrola kontrolniho souctu0109: SWAPF 1B,F.................... suma = data & 0xF;010A: MOVF 1B,W010B: ANDLW 0F010C: MOVWF 1D.................... swap(data);010D: SWAPF 1B,F.................... suma += data & 0xF;010E: MOVF 1B,W010F: ANDLW 0F0110: ADDWF 1D,F.................... suma++;0111: INCF 1D,F.................... suma &= 0xF;0112: MOVLW 0F0113: ANDWF 1D,F.................... if (suma != check) goto loop;0114: MOVF 1C,W0115: SUBWF 1D,W0116: BTFSC 03.20117: GOTO 1190118: GOTO 0A1........................................ osa = data >> 5; // extrahuj z ramce cislo osy a hodnotu0119: SWAPF 1B,W011A: MOVWF 1A011B: RRF 1A,F011C: MOVLW 07011D: ANDWF 1A,F.................... data &= 0x1F;011E: MOVLW 1F011F: ANDWF 1B,F.................... switch(osa)0120: MOVLW 010121: SUBWF 1A,W0122: ADDLW FE0123: BTFSC 03.00124: GOTO 12D0125: ADDLW 020126: GOTO 12F.................... {.................... case OSA_X:.................... x=data;0127: MOVF 1B,W0128: MOVWF 14.................... break;0129: GOTO 12D.................... case OSA_y:.................... y=data;012A: MOVF 1B,W012B: MOVWF 15.................... break;012C: GOTO 12D.................... }*012F: BSF 0A.00130: BCF 0A.10131: BCF 0A.20132: ADDWF 02,F0133: GOTO 1270134: GOTO 12A........................................ goto loop;*012D: GOTO 0A1.................... }....................012E: SLEEP