Rev 410 | Blame | Compare with Previous | Last modification | View Log | Download
CCS PCW C Compiler, Version 3.110, 15448Filename: d:\@kaklik\programy\pic_c\ps2mys\main.LSTROM used: 273 (27%)Largest free fragment is 751RAM used: 9 (13%) at main() level12 (18%) worst caseStack: 1 locations*0000: MOVLW 000001: MOVWF 0A0002: GOTO 0D10003: NOP.................... #include "D:\@Kaklik\programy\PIC_C\PS2mys\main.h".................... #include <16F84.h>.................... //////// Standard Header file for the PIC16F84 device ////////////////.................... #device PIC16F84.................... #list........................................ #use delay(clock=4000000)0004: MOVLW 160005: MOVWF 040006: MOVF 00,W0007: BTFSC 03.20008: GOTO 0180009: MOVLW 01000A: MOVWF 0D000B: CLRF 0C000C: DECFSZ 0C,F000D: GOTO 00C000E: DECFSZ 0D,F000F: GOTO 00B0010: MOVLW 4A0011: MOVWF 0C0012: DECFSZ 0C,F0013: GOTO 0120014: NOP0015: NOP0016: DECFSZ 00,F0017: GOTO 0090018: GOTO 0DB (RETURN).................... #fuses XT,NOWDT........................................ #DEFINE DATA PIN_B0 // musi byt definovan kanal DATA.................... #DEFINE CLK PIN_B1 // a taky hodiny CLK........................................ #define PRVNI 1000 // nastaveni prodlevy pred zacatkem vysilani bajtu.................... #define DRUHY 2.................... #define TRETI DRUHY........................................ // prikazy.................... #define RESET 0xFF.................... #define ENABLE_DATA_REPORTING 0xF4.................... #define READ_DATA 0xEB.................... #define STATUS_REQUEST 0xE9.................... #define SET_REMOTE_MODE 0xF0.................... #define SET_STREAM_MODE 0xEA.................... #define GET_DEVICE_ID 0xF2........................................ #DEFINE LED_yellow PIN_A3.................... #DEFINE LED_red PIN_A2........................................ #DEFINE BLIK 120 // doba rozsviceni led........................................ #include "PS2.c".................... // Modul pro komunikaci s Mysi........................................ void send(byte command).................... {.................... int n;0019: CLRF 17.................... int parity=0;........................................ //Request-to-send.................... output_float(DATA);001A: BSF 03.5001B: BSF 06.0.................... output_low(CLK);001C: BCF 06.1001D: BCF 03.5001E: BCF 06.1.................... delay_us(100);001F: MOVLW 210020: MOVWF 0C0021: DECFSZ 0C,F0022: GOTO 021.................... // start bit.................... output_low(DATA);0023: BSF 03.50024: BCF 06.00025: BCF 03.50026: BCF 06.0.................... delay_us(20);0027: MOVLW 060028: MOVWF 0C0029: DECFSZ 0C,F002A: GOTO 029002B: NOP.................... while(!input(CLK));002C: BSF 03.5002D: BSF 06.1002E: BCF 03.5002F: BTFSS 06.10030: GOTO 02C.................... // 8 bitu.................... for(n=0; n<8; n++)0031: CLRF 160032: MOVF 16,W0033: SUBLW 070034: BTFSS 03.00035: GOTO 052.................... {.................... while(input(CLK));0036: BSF 03.50037: BSF 06.10038: BCF 03.50039: BTFSC 06.1003A: GOTO 036.................... output_bit(DATA, command & 1);003B: MOVF 15,W003C: ANDLW 01003D: XORLW 00003E: BTFSS 03.2003F: GOTO 0420040: BCF 06.00041: GOTO 0430042: BSF 06.00043: BSF 03.50044: BCF 06.0.................... parity += command & 1;0045: BCF 03.50046: MOVF 15,W0047: ANDLW 010048: ADDWF 17,F.................... command>>=1;0049: BCF 03.0004A: RRF 15,F.................... while(!input(CLK));004B: BSF 03.5004C: BSF 06.1004D: BCF 03.5004E: BTFSS 06.1004F: GOTO 04B.................... };0050: INCF 16,F0051: GOTO 032.................... // parita.................... while(input(CLK));0052: BSF 03.50053: BSF 06.10054: BCF 03.50055: BTFSC 06.10056: GOTO 052.................... output_bit(DATA, ~parity & 1);0057: MOVF 17,W0058: XORLW FF0059: ANDLW 01005A: XORLW 00005B: BTFSS 03.2005C: GOTO 05F005D: BCF 06.0005E: GOTO 060005F: BSF 06.00060: BSF 03.50061: BCF 06.0.................... while(!input(CLK));0062: BSF 06.10063: BCF 03.50064: BTFSC 06.10065: GOTO 0680066: BSF 03.50067: GOTO 0620068: GOTO 069.................... // stop bit.................... while(input(CLK));0069: BSF 03.5006A: BSF 06.1006B: BCF 03.5006C: BTFSC 06.1006D: GOTO 069.................... output_bit(DATA, 1);006E: BSF 06.0006F: BSF 03.50070: BCF 06.0.................... while(!input(CLK));0071: BSF 06.10072: BCF 03.50073: BTFSC 06.10074: GOTO 0770075: BSF 03.50076: GOTO 0710077: GOTO 078.................... output_float(DATA);0078: BSF 03.50079: BSF 06.0007A: BCF 03.5007B: GOTO 0E0 (RETURN).................... }............................................................ int8 read_byte(int8 const poradi).................... {.................... int8 bajt;.................... int8 i;........................................ // cekani na komunikacni klid.................... for (i=0; i<poradi; i++)007C: CLRF 16007D: SUBWF 16,W007E: BTFSC 03.0007F: GOTO 08D.................... {.................... if (!input(CLK) || !input(DATA)) i=0;0080: BSF 03.50081: BSF 06.10082: BCF 03.50083: BTFSS 06.10084: GOTO 08A0085: BSF 03.50086: BSF 06.00087: BCF 03.50088: BTFSC 06.00089: GOTO 08B008A: CLRF 16.................... };008B: INCF 16,F008C: GOTO 07D........................................ // cekani na startbit.................... while(input(CLK) || input(DATA));008D: BSF 03.5008E: BSF 06.1008F: BCF 03.50090: BTFSC 06.10091: GOTO 08D0092: BSF 03.50093: BSF 06.00094: BCF 03.50095: BTFSC 06.00096: GOTO 08D.................... while(!input(CLK));0097: BSF 03.50098: BSF 06.10099: BCF 03.5009A: BTFSS 06.1009B: GOTO 097........................................ bajt = 0;009C: CLRF 15.................... for(i=0; i<8; i++)009D: CLRF 16009E: MOVF 16,W009F: SUBLW 0700A0: BTFSS 03.000A1: GOTO 0BD.................... {.................... while(input(CLK)); // ceka na nulu hodin00A2: BSF 03.500A3: BSF 06.100A4: BCF 03.500A5: BTFSC 06.100A6: GOTO 0A2........................................ bajt >>= 1;00A7: BCF 03.000A8: RRF 15,F.................... bajt |= input(DATA) << 7;00A9: BSF 03.500AA: BSF 06.000AB: MOVLW 0000AC: BCF 03.500AD: BTFSC 06.000AE: MOVLW 0100AF: MOVWF 0C00B0: RRF 0C,W00B1: CLRF 0C00B2: BTFSC 03.000B3: BSF 0C.700B4: MOVF 0C,W00B5: IORWF 15,F........................................ while(!input(CLK)); // ceka na jednicku hodin00B6: BSF 03.500B7: BSF 06.100B8: BCF 03.500B9: BTFSS 06.100BA: GOTO 0B6.................... };00BB: INCF 16,F00BC: GOTO 09E.................... return (bajt);00BD: MOVF 15,W00BE: MOVWF 0D00BF: RETLW 00.................... }............................................................ /*void read_all_byte(int8*st,*nd,*rd) // precte 3 bajty.................... {.................... int8 i;........................................ // *st=read_byte(1st);........................................ // cekani na startbit.................... while(input(CLK) || input(DATA));.................... while(!input(CLK));.................... *nd = 0;.................... for(i=0; i<8; i++).................... {.................... while(input(CLK)); // ceka na nulu hodin........................................ *nd |= input(DATA) << 7;.................... *nd >>= 1;........................................ while(!input(CLK)); // ceka na jednicku hodin.................... };........................................ // cekani na startbit.................... while(input(CLK) || input(DATA));.................... while(!input(CLK));.................... *rd = 0;.................... for(i=0; i<8; i++).................... {.................... while(input(CLK)); // ceka na nulu hodin........................................ *rd |= input(DATA) << 7;.................... *rd >>= 1;........................................ while(!input(CLK)); // ceka na jednicku hodin.................... };.................... }*/............................................................ #define SIGN_X 4........................................ void trigger().................... {.................... output_high(PIN_A0);00C0: BSF 03.500C1: BCF 05.000C2: BCF 03.500C3: BSF 05.0.................... output_low(PIN_A0);00C4: BSF 03.500C5: BCF 05.000C6: BCF 03.500C7: BCF 05.0.................... delay_us(100);00C8: MOVLW 2100C9: MOVWF 0C00CA: DECFSZ 0C,F00CB: GOTO 0CA.................... output_high(PIN_A0);00CC: BSF 03.500CD: BCF 05.000CE: BCF 03.500CF: BSF 05.000D0: GOTO 0FC (RETURN).................... }........................................ void flash_red() // blikne ledkou.................... {.................... output_high(LED_red);.................... Delay_ms(BLIK);.................... output_low(LED_red);.................... }........................................ void flash_yellow() // blikne ledkou.................... {.................... output_high(LED_yellow);.................... Delay_ms(BLIK);.................... output_low(LED_yellow);.................... }........................................ void main().................... {.................... int8 X,y,tl=0;*00D4: CLRF 1100D5: CLRF 14.................... int8 X_old,y_old,tl_old=0;*00D1: CLRF 0400D2: MOVLW 1F00D3: ANDWF 03,F........................................ Delay_ms(500);*00D6: MOVLW 0200D7: MOVWF 1500D8: MOVLW FA00D9: MOVWF 1600DA: GOTO 00400DB: DECFSZ 15,F00DC: GOTO 0D8.................... send(ENABLE_DATA_REPORTING);00DD: MOVLW F400DE: MOVWF 1500DF: GOTO 019........................................ while(true).................... {.................... tl = read_byte(PRVNI);00E0: MOVLW E800E1: BSF 03.500E2: BSF 03.600E3: MOVWF 7F00E4: BCF 03.500E5: BCF 03.600E6: CALL 07C00E7: MOVF 0D,W00E8: MOVWF 11.................... x = read_byte(DRUHY);00E9: MOVLW 0200EA: BSF 03.500EB: BSF 03.600EC: MOVWF 7F00ED: BCF 03.500EE: BCF 03.600EF: CALL 07C00F0: MOVF 0D,W00F1: MOVWF 0F.................... y = read_byte(TRETI);00F2: MOVLW 0200F3: BSF 03.500F4: BSF 03.600F5: MOVWF 7F00F6: BCF 03.500F7: BCF 03.600F8: CALL 07C00F9: MOVF 0D,W00FA: MOVWF 10.................... trigger();00FB: GOTO 0C0............................................................ if (bit_test(tl, SIGN_X))00FC: BTFSS 11.400FD: GOTO 107.................... {.................... output_high(LED_red);00FE: BSF 03.500FF: BCF 05.20100: BCF 03.50101: BSF 05.2.................... output_low(LED_yellow);0102: BSF 03.50103: BCF 05.30104: BCF 03.50105: BCF 05.3.................... }.................... else0106: GOTO 10F.................... {.................... output_high(LED_yellow);0107: BSF 03.50108: BCF 05.30109: BCF 03.5010A: BSF 05.3.................... output_low(LED_red);010B: BSF 03.5010C: BCF 05.2010D: BCF 03.5010E: BCF 05.2.................... }.................... }010F: GOTO 0E0.................... }....................0110: SLEEP........................................