;-------------------------------------------------------- ; File Created by SDCC : free open source ANSI-C Compiler ; Version 2.8.3 #5235 (Sep 15 2008) (UNIX) ; This file was generated Fri Sep 19 15:32:03 2008 ;-------------------------------------------------------- ; PIC16 port for the Microchip 16-bit core micros ;-------------------------------------------------------- list p=18f2520 radix dec ;-------------------------------------------------------- ; public variables in this module ;-------------------------------------------------------- global _stack global _stack_end global _timerHigh global _delayMs global _i2cReset global _i2cInit global _i2cWaitForIdle1 global _i2cWaitForIdle global _i2cStart global _i2cRepStart global _i2cStop global _i2cPutByte global _i2cGetByte global _i2cWrite global _i2cRead global _lcdInit global _lcdPutChar global _lcdWriteStr global _lcdPutHexByte global _strByte global _strWordDec global _usartInit global _usartRxRdy global _usartGetc global _usartPutc global _usartPuts global _usartWrite global _eepromRead8 global _eepromWrite8 global _eepromRead16 global _eepromWrite16 global _eepromRead32 global _eepromWrite32 global _timerInit global _timerClear global _timerTick global _timerGetMicroSec global _timerGetMilliSec global _timerGetSec global _adcInit global _adcRead global _isr global _main ;-------------------------------------------------------- ; extern variables in this module ;-------------------------------------------------------- extern __gptrget1 extern __gptrput1 extern __divuchar extern __moduchar extern _PORTAbits extern _PORTBbits extern _PORTCbits extern _PORTDbits extern _PORTEbits extern _LATAbits extern _LATBbits extern _LATCbits extern _LATDbits extern _LATEbits extern _DDRAbits extern _TRISAbits extern _DDRBbits extern _TRISBbits extern _DDRCbits extern _TRISCbits extern _DDRDbits extern _TRISDbits extern _DDREbits extern _TRISEbits extern _OSCTUNEbits extern _PIE1bits extern _PIR1bits extern _IPR1bits extern _PIE2bits extern _PIR2bits extern _IPR2bits extern _EECON1bits extern _RCSTAbits extern _TXSTAbits extern _T3CONbits extern _CMCONbits extern _CVRCONbits extern _ECCP1ASbits extern _PWM1CONbits extern _BAUDCONbits extern _BAUDCTLbits extern _CCP2CONbits extern _CCP1CONbits extern _ADCON2bits extern _ADCON1bits extern _ADCON0bits extern _SSPCON2bits extern _SSPCON1bits extern _SSPSTATbits extern _T2CONbits extern _T1CONbits extern _RCONbits extern _WDTCONbits extern _HLVDCONbits extern _LVDCONbits extern _OSCCONbits extern _T0CONbits extern _STATUSbits extern _INTCON3bits extern _INTCON2bits extern _INTCONbits extern _STKPTRbits extern _PORTA extern _PORTB extern _PORTC extern _PORTD extern _PORTE extern _LATA extern _LATB extern _LATC extern _LATD extern _LATE extern _DDRA extern _TRISA extern _DDRB extern _TRISB extern _DDRC extern _TRISC extern _DDRD extern _TRISD extern _DDRE extern _TRISE extern _OSCTUNE extern _PIE1 extern _PIR1 extern _IPR1 extern _PIE2 extern _PIR2 extern _IPR2 extern _EECON1 extern _EECON2 extern _EEDATA extern _EEADR extern _RCSTA extern _TXSTA extern _TXREG extern _RCREG extern _SPBRG extern _SPBRGH extern _T3CON extern _TMR3L extern _TMR3H extern _CMCON extern _CVRCON extern _ECCP1AS extern _PWM1CON extern _BAUDCON extern _BAUDCTL extern _CCP2CON extern _CCPR2 extern _CCPR2L extern _CCPR2H extern _CCP1CON extern _CCPR1 extern _CCPR1L extern _CCPR1H extern _ADCON2 extern _ADCON1 extern _ADCON0 extern _ADRES extern _ADRESL extern _ADRESH extern _SSPCON2 extern _SSPCON1 extern _SSPSTAT extern _SSPADD extern _SSPBUF extern _T2CON extern _PR2 extern _TMR2 extern _T1CON extern _TMR1L extern _TMR1H extern _RCON extern _WDTCON extern _HLVDCON extern _LVDCON extern _OSCCON extern _T0CON extern _TMR0L extern _TMR0H extern _STATUS extern _FSR2L extern _FSR2H extern _PLUSW2 extern _PREINC2 extern _POSTDEC2 extern _POSTINC2 extern _INDF2 extern _BSR extern _FSR1L extern _FSR1H extern _PLUSW1 extern _PREINC1 extern _POSTDEC1 extern _POSTINC1 extern _INDF1 extern _WREG extern _FSR0L extern _FSR0H extern _PLUSW0 extern _PREINC0 extern _POSTDEC0 extern _POSTINC0 extern _INDF0 extern _INTCON3 extern _INTCON2 extern _INTCON extern _PROD extern _PRODL extern _PRODH extern _TABLAT extern _TBLPTR extern _TBLPTRL extern _TBLPTRH extern _TBLPTRU extern _PC extern _PCL extern _PCLATH extern _PCLATU extern _STKPTR extern _TOS extern _TOSL extern _TOSH extern _TOSU extern __divuint extern __moduint extern __divulong ;-------------------------------------------------------- ; Equates to used internal registers ;-------------------------------------------------------- STATUS equ 0xfd8 PCLATH equ 0xffa PCLATU equ 0xffb WREG equ 0xfe8 BSR equ 0xfe0 FSR0L equ 0xfe9 FSR0H equ 0xfea FSR1L equ 0xfe1 FSR2L equ 0xfd9 POSTDEC1 equ 0xfe5 PREINC1 equ 0xfe4 PLUSW2 equ 0xfdb PRODL equ 0xff3 PRODH equ 0xff4 ; Internal registers .registers udata_ovr 0x0000 r0x00 res 1 r0x01 res 1 r0x02 res 1 r0x03 res 1 r0x04 res 1 r0x05 res 1 r0x06 res 1 r0x07 res 1 r0x08 res 1 r0x09 res 1 r0x0a res 1 r0x0b res 1 udata_testSwitches_0 udata _lcdInit_dat_1_1 res 3 udata_testSwitches_1 udata _lcdPutChar_dat_1_1 res 2 udata_testSwitches_2 udata _lcdPutHexByte_dat_1_1 res 3 udata_testSwitches_3 udata _timerHigh res 2 udata_testSwitches_4 udata _main_str_1_1 res 16 ustat_testSwitches_00 udata 0X0200 _stack res 255 _stack_end res 1 ;-------------------------------------------------------- ; interrupt vector ;-------------------------------------------------------- ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- ; ; Starting pCode block for absolute section ; ;----------------------------------------- S_testSwitches_ivec_0x1_isr code 0X000008 ivec_0x1_isr: GOTO _isr ; I code from now on! ; ; Starting pCode block S_testSwitches__main code _main: ; .line 32; testSwitches.c OSCCON = 0x62; // Internal 4MHZ MOVLW 0x62 MOVWF _OSCCON ; .line 35; testSwitches.c TRISA = 0xFF; // PORTA Input MOVLW 0xff MOVWF _TRISA ; .line 36; testSwitches.c TRISB = 0x0F; // PORTB top 4 bits Output MOVLW 0x0f MOVWF _TRISB ; .line 37; testSwitches.c TRISC = 0xFF; // PORTC Input MOVLW 0xff MOVWF _TRISC ; .line 39; testSwitches.c PORTB = 0; // LED's off CLRF _PORTB ; .line 42; testSwitches.c i2cInit(); CALL _i2cInit ; .line 43; testSwitches.c lcdInit(); CALL _lcdInit ; .line 44; testSwitches.c usartInit(); CALL _usartInit ; .line 45; testSwitches.c timerInit(); CALL _timerInit ; .line 46; testSwitches.c adcInit(); CALL _adcInit ; .line 48; testSwitches.c PORTB = 0x00; CLRF _PORTB ; .line 51; testSwitches.c INTCON = 0; // Clear interrupt flag bits CLRF _INTCON ; .line 52; testSwitches.c INTCONbits.PEIE = 1; // Enable peripheral interrupts BSF _INTCONbits, 6 ; .line 53; testSwitches.c PIE1bits.CCP1IE = 1; // TMR1 overflow interrupt enable BSF _PIE1bits, 2 ; .line 54; testSwitches.c INTCON2bits.INTEDG0 = 1; // INT0 Interrupt on +ve edge BSF _INTCON2bits, 6 ; .line 55; testSwitches.c INTCONbits.INT0IE = 1; // Enable INT0 Speed interrupt BSF _INTCONbits, 4 ; .line 56; testSwitches.c INTCONbits.GIE = 1; // Global interrupt enable BSF _INTCONbits, 7 _00467_DS_: ; .line 59; testSwitches.c v = adcRead(9); MOVLW 0x09 MOVWF POSTDEC1 CALL _adcRead MOVWF r0x00 MOVFF PRODL, r0x01 INCF FSR1L, F ; .line 60; testSwitches.c strWordDec(str, 0, v); MOVLW HIGH(_main_str_1_1) MOVWF r0x03 MOVLW LOW(_main_str_1_1) MOVWF r0x02 MOVLW 0x80 MOVWF r0x04 MOVF r0x01, W MOVWF POSTDEC1 MOVF r0x00, W MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 MOVF r0x02, W MOVWF POSTDEC1 CALL _strWordDec MOVLW 0x06 ADDWF FSR1L, F BANKSEL (_main_str_1_1 + 6) ; .line 61; testSwitches.c str[6] = 0; CLRF (_main_str_1_1 + 6), B ; .line 62; testSwitches.c lcdWriteStr(0, 0, str); MOVLW HIGH(_main_str_1_1) MOVWF r0x03 MOVLW LOW(_main_str_1_1) MOVWF r0x02 MOVLW 0x80 ; # MOVWF r0x04 ; # MOVF r0x04, W MOVWF r0x04 MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 MOVF r0x02, W MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 CALL _lcdWriteStr MOVLW 0x05 ADDWF FSR1L, F ; .line 64; testSwitches.c v = (v + 32) / 64; MOVF r0x00, W ADDLW 0x20 MOVWF r0x02 MOVLW 0x00 ADDWFC r0x01, W MOVWF r0x03 RLCF r0x02, W MOVWF r0x01 RLCF r0x03, W MOVWF r0x00 RLCF r0x01, F RLCF r0x00, F RLCF r0x01, W ANDLW 0x03 MOVWF r0x01 ; .line 65; testSwitches.c strWordDec(str, 0, v); MOVLW HIGH(_main_str_1_1) MOVWF r0x03 MOVLW LOW(_main_str_1_1) MOVWF r0x02 MOVLW 0x80 MOVWF r0x04 MOVF r0x01, W MOVWF POSTDEC1 MOVF r0x00, W MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 MOVF r0x02, W MOVWF POSTDEC1 CALL _strWordDec MOVLW 0x06 ADDWF FSR1L, F BANKSEL (_main_str_1_1 + 6) ; .line 66; testSwitches.c str[6] = 0; CLRF (_main_str_1_1 + 6), B ; .line 67; testSwitches.c lcdWriteStr(0, 1, str); MOVLW HIGH(_main_str_1_1) MOVWF r0x03 MOVLW LOW(_main_str_1_1) MOVWF r0x02 MOVLW 0x80 ; # MOVWF r0x04 ; # MOVF r0x04, W MOVWF r0x04 MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 MOVF r0x02, W MOVWF POSTDEC1 MOVLW 0x01 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 CALL _lcdWriteStr MOVLW 0x05 ADDWF FSR1L, F ; .line 69; testSwitches.c PORTB = v << 4; SWAPF r0x00, W ANDLW 0xf0 MOVWF _PORTB BRA _00467_DS_ RETURN ; ; Starting pCode block S_testSwitches__isr code _isr: ; .line 17; testSwitches.c void isr(void) interrupt 1 { MOVFF WREG, POSTDEC1 MOVFF STATUS, POSTDEC1 MOVFF BSR, POSTDEC1 MOVFF PRODL, POSTDEC1 MOVFF PRODH, POSTDEC1 MOVFF FSR0L, POSTDEC1 MOVFF FSR0H, POSTDEC1 MOVFF PCLATH, POSTDEC1 MOVFF PCLATU, POSTDEC1 ; .line 19; testSwitches.c if(PIR1bits.CCP1IF){ BTFSS _PIR1bits, 2 BRA _00461_DS_ ; .line 20; testSwitches.c timerTick(); CALL _timerTick ; .line 23; testSwitches.c PIR1bits.CCP1IF = 0; // Clear timer interrupt flag BCF _PIR1bits, 2 _00461_DS_: MOVFF PREINC1, PCLATU MOVFF PREINC1, PCLATH MOVFF PREINC1, FSR0H MOVFF PREINC1, FSR0L MOVFF PREINC1, PRODH MOVFF PREINC1, PRODL MOVFF PREINC1, BSR MOVFF PREINC1, STATUS MOVFF PREINC1, WREG RETFIE ; ; Starting pCode block S_testSwitches__adcRead code _adcRead: ; .line 660; ./picLib3.c UInt16 adcRead(UInt8 channel){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 ; .line 662; ./picLib3.c ADCON0 = (channel << 2) | 0x03; RLNCF r0x00, W RLNCF WREG, W ANDLW 0xfc MOVWF r0x01 MOVLW 0x03 IORWF r0x01, W MOVWF _ADCON0 _00451_DS_: ; .line 664; ./picLib3.c while(ADCON0bits.NOT_DONE){ BTFSC _ADCON0bits, 1 BRA _00451_DS_ ; .line 668; ./picLib3.c return (ADRESH << 8) + ADRESL; MOVFF _ADRESH, r0x00 CLRF r0x01 MOVF r0x00, W MOVWF r0x03 CLRF r0x02 MOVFF _ADRESL, r0x00 CLRF r0x01 MOVF r0x00, W ADDWF r0x02, F MOVF r0x01, W ADDWFC r0x03, F MOVFF r0x03, PRODL MOVF r0x02, W MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__adcInit code _adcInit: ; .line 655; ./picLib3.c ADCON0 = 0x01; // Enable ADC MOVLW 0x01 MOVWF _ADCON0 ; .line 656; ./picLib3.c ADCON1 = 0x05; // Enable first 9 ADC inputs and use internal voltage reference MOVLW 0x05 MOVWF _ADCON1 ; .line 657; ./picLib3.c ADCON2 = 0x94; // Setup Aquisition times for 4MHz Clock MOVLW 0x94 MOVWF _ADCON2 RETURN ; ; Starting pCode block S_testSwitches__timerGetSec code _timerGetSec: ; .line 644; ./picLib3.c UInt16 timerGetSec(){ MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 ; .line 645; ./picLib3.c return timerGetMicroSec() / 1000000; CALL _timerGetMicroSec MOVWF r0x00 MOVFF PRODL, r0x01 MOVFF PRODH, r0x02 MOVFF FSR0L, r0x03 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x0f MOVWF POSTDEC1 MOVLW 0x42 MOVWF POSTDEC1 MOVLW 0x40 MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 MOVF r0x02, W MOVWF POSTDEC1 MOVF r0x01, W MOVWF POSTDEC1 MOVF r0x00, W MOVWF POSTDEC1 CALL __divulong MOVWF r0x00 MOVFF PRODL, r0x01 MOVFF PRODH, r0x02 MOVFF FSR0L, r0x03 MOVLW 0x08 ADDWF FSR1L, F MOVFF r0x01, PRODL MOVF r0x00, W MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 RETURN ; ; Starting pCode block S_testSwitches__timerGetMilliSec code _timerGetMilliSec: ; .line 640; ./picLib3.c UInt16 timerGetMilliSec(){ MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 ; .line 641; ./picLib3.c return timerGetMicroSec() / 1000; CALL _timerGetMicroSec MOVWF r0x00 MOVFF PRODL, r0x01 MOVFF PRODH, r0x02 MOVFF FSR0L, r0x03 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x03 MOVWF POSTDEC1 MOVLW 0xe8 MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 MOVF r0x02, W MOVWF POSTDEC1 MOVF r0x01, W MOVWF POSTDEC1 MOVF r0x00, W MOVWF POSTDEC1 CALL __divulong MOVWF r0x00 MOVFF PRODL, r0x01 MOVFF PRODH, r0x02 MOVFF FSR0L, r0x03 MOVLW 0x08 ADDWF FSR1L, F MOVFF r0x01, PRODL MOVF r0x00, W MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 RETURN ; ; Starting pCode block S_testSwitches__timerGetMicroSec code _timerGetMicroSec: MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 ; t1 = (TMR3H << 8) | TMR3L; MOVFF _TMR3L, r0x00 MOVFF _TMR3H, r0x01 MOVFF _timerHigh, r0x02 MOVFF (_timerHigh + 1), r0x03 ; t3 = (TMR3H << 8) | TMR3L; MOVFF _TMR3L, r0x04 MOVFF _TMR3H, r0x05 ; if(t3 < t1){ MOVF r0x01, W SUBWF r0x05, W BNZ _00001 MOVF r0x00, W SUBWF r0x04, W _00001: BC _00002 MOVFF _timerHigh, r0x02 MOVFF (_timerHigh + 1), r0x03 _00002: ; return ((UInt32)timerHigh << 16) | t3; MOVFF r0x03, FSR0L MOVFF r0x02, PRODH MOVFF r0x05, PRODL MOVF r0x04, W MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 RETURN ; ; Starting pCode block S_testSwitches__timerTick code _timerTick: BANKSEL _timerHigh ; .line 575; ./picLib3.c timerHigh++; INCF _timerHigh, F, B BNC _10466_DS_ ; removed redundant BANKSEL INCF (_timerHigh + 1), F, B _10466_DS_: RETURN ; ; Starting pCode block S_testSwitches__timerClear code _timerClear: ; .line 568; ./picLib3.c TMR3H = 0; CLRF _TMR3H ; .line 569; ./picLib3.c TMR3L = 0; CLRF _TMR3L BANKSEL _timerHigh ; .line 571; ./picLib3.c timerHigh = 0; CLRF _timerHigh, B ; removed redundant BANKSEL CLRF (_timerHigh + 1), B RETURN ; ; Starting pCode block S_testSwitches__timerInit code _timerInit: ; .line 560; ./picLib3.c T3CON = 0x81; MOVLW 0x81 MOVWF _T3CON ; .line 561; ./picLib3.c TMR3H = 0; CLRF _TMR3H ; .line 562; ./picLib3.c TMR3L = 0; CLRF _TMR3L BANKSEL _timerHigh ; .line 564; ./picLib3.c timerHigh = 0; CLRF _timerHigh, B ; removed redundant BANKSEL CLRF (_timerHigh + 1), B RETURN ; ; Starting pCode block S_testSwitches__eepromWrite32 code _eepromWrite32: ; .line 483; ./picLib3.c void eepromWrite32(UInt8 address, UInt32 value){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 MOVFF r0x06, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 MOVLW 0x05 MOVFF PLUSW2, r0x03 MOVLW 0x06 MOVFF PLUSW2, r0x04 ; .line 484; ./picLib3.c eepromWrite16(address, value); MOVF r0x01, W MOVWF r0x05 ; # MOVF r0x02, W ; # MOVWF r0x06 ; # MOVF r0x06, W MOVF r0x02, W MOVWF r0x06 MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x00, W MOVWF POSTDEC1 CALL _eepromWrite16 MOVLW 0x03 ADDWF FSR1L, F ; .line 485; ./picLib3.c eepromWrite16(address + 2, value >> 16); INCF r0x00, F INCF r0x00, F MOVF r0x03, W MOVWF r0x01 MOVF r0x04, W MOVWF r0x02 CLRF r0x03 CLRF r0x04 MOVF r0x02, W MOVWF POSTDEC1 MOVF r0x01, W MOVWF POSTDEC1 MOVF r0x00, W MOVWF POSTDEC1 CALL _eepromWrite16 MOVLW 0x03 ADDWF FSR1L, F MOVFF PREINC1, r0x06 MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__eepromRead32 code _eepromRead32: ; .line 475; ./picLib3.c UInt32 eepromRead32(UInt8 address){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 MOVFF r0x06, POSTDEC1 MOVFF r0x07, POSTDEC1 MOVFF r0x08, POSTDEC1 MOVFF r0x09, POSTDEC1 MOVFF r0x0a, POSTDEC1 MOVFF r0x0b, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 ; .line 478; ./picLib3.c v = eepromRead16(address); MOVF r0x00, W MOVWF POSTDEC1 CALL _eepromRead16 MOVWF r0x01 MOVFF PRODL, r0x02 INCF FSR1L, F CLRF r0x03 CLRF r0x04 ; .line 479; ./picLib3.c v |= ((UInt32)eepromRead16(address + 2) << 16); INCF r0x00, F INCF r0x00, F MOVF r0x00, W MOVWF POSTDEC1 CALL _eepromRead16 MOVWF r0x00 MOVFF PRODL, r0x05 INCF FSR1L, F CLRF r0x06 CLRF r0x07 MOVF r0x05, W MOVWF r0x0b MOVF r0x00, W MOVWF r0x0a CLRF r0x08 CLRF r0x09 MOVF r0x08, W IORWF r0x01, F MOVF r0x09, W IORWF r0x02, F MOVF r0x0a, W IORWF r0x03, F MOVF r0x0b, W IORWF r0x04, F ; .line 480; ./picLib3.c return v; MOVFF r0x04, FSR0L MOVFF r0x03, PRODH MOVFF r0x02, PRODL MOVF r0x01, W MOVFF PREINC1, r0x0b MOVFF PREINC1, r0x0a MOVFF PREINC1, r0x09 MOVFF PREINC1, r0x08 MOVFF PREINC1, r0x07 MOVFF PREINC1, r0x06 MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__eepromWrite16 code _eepromWrite16: ; .line 445; ./picLib3.c void eepromWrite16(UInt8 address, UInt16 value){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 ; .line 447; ./picLib3.c EECON1bits.EEPGD = 0; BCF _EECON1bits, 7 ; .line 448; ./picLib3.c EECON1bits.CFGS = 0; BCF _EECON1bits, 6 ; .line 449; ./picLib3.c EECON1bits.WREN = 1; // Enable writes to data EEPROM BSF _EECON1bits, 2 ; .line 450; ./picLib3.c INTCONbits.GIE = 0; // Disable interrupts BCF _INTCONbits, 7 ; .line 452; ./picLib3.c EEADR = address; MOVFF r0x00, _EEADR ; .line 453; ./picLib3.c EEDATA = value; MOVF r0x01, W MOVWF _EEDATA ; .line 454; ./picLib3.c EECON2 = 0x55; MOVLW 0x55 MOVWF _EECON2 ; .line 455; ./picLib3.c EECON2 = 0x0AA; MOVLW 0xaa MOVWF _EECON2 ; .line 456; ./picLib3.c EECON1bits.WR = 1; // Start writing BSF _EECON1bits, 1 _00395_DS_: ; .line 457; ./picLib3.c while(EECON1bits.WR); BTFSC _EECON1bits, 1 BRA _00395_DS_ ; .line 459; ./picLib3.c EEADR = address + 1; INCF r0x00, W MOVWF _EEADR ; .line 460; ./picLib3.c EEDATA = value >> 8; MOVF r0x02, W MOVWF r0x01 CLRF r0x02 MOVF r0x01, W MOVWF _EEDATA ; .line 461; ./picLib3.c EECON2 = 0x55; MOVLW 0x55 MOVWF _EECON2 ; .line 462; ./picLib3.c EECON2 = 0x0AA; MOVLW 0xaa MOVWF _EECON2 ; .line 463; ./picLib3.c EECON1bits.WR = 1; // Start writing BSF _EECON1bits, 1 _00398_DS_: ; .line 464; ./picLib3.c while(EECON1bits.WR); BTFSC _EECON1bits, 1 BRA _00398_DS_ ; .line 471; ./picLib3.c EECON1bits.WREN = 0; BCF _EECON1bits, 2 ; .line 472; ./picLib3.c INTCONbits.GIE = 1; // enable interrupts BSF _INTCONbits, 7 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__eepromRead16 code _eepromRead16: ; .line 431; ./picLib3.c UInt16 eepromRead16(UInt8 address){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 ; .line 434; ./picLib3.c EECON1bits.CFGS = 0; BCF _EECON1bits, 6 ; .line 435; ./picLib3.c EECON1bits.EEPGD = 0; BCF _EECON1bits, 7 ; .line 436; ./picLib3.c EEADR = address; MOVFF r0x00, _EEADR ; .line 437; ./picLib3.c EECON1bits.RD = 1; BSF _EECON1bits, 0 ; .line 438; ./picLib3.c v = EEDATA; MOVFF _EEDATA, r0x01 CLRF r0x02 ; .line 439; ./picLib3.c EEADR = address + 1; INCF r0x00, W MOVWF _EEADR ; .line 440; ./picLib3.c EECON1bits.RD = 1; BSF _EECON1bits, 0 ; .line 441; ./picLib3.c v |= (EEDATA << 8); MOVFF _EEDATA, r0x00 CLRF r0x03 MOVF r0x00, W MOVWF r0x05 CLRF r0x04 MOVF r0x04, W IORWF r0x01, F MOVF r0x05, W IORWF r0x02, F ; .line 442; ./picLib3.c return v; MOVFF r0x02, PRODL MOVF r0x01, W MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__eepromWrite8 code _eepromWrite8: ; .line 409; ./picLib3.c void eepromWrite8(UInt8 address, UInt8 value){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 ; .line 411; ./picLib3.c EECON1bits.EEPGD = 0; BCF _EECON1bits, 7 ; .line 412; ./picLib3.c EECON1bits.CFGS = 0; BCF _EECON1bits, 6 ; .line 413; ./picLib3.c EECON1bits.WREN = 1; // Enable writes to data EEPROM BSF _EECON1bits, 2 ; .line 414; ./picLib3.c INTCONbits.GIE = 0; // Disable interrupts BCF _INTCONbits, 7 ; .line 416; ./picLib3.c EEDATA = value; MOVFF r0x01, _EEDATA ; .line 417; ./picLib3.c EEADR = address; MOVFF r0x00, _EEADR ; .line 418; ./picLib3.c EECON2 = 0x55; MOVLW 0x55 MOVWF _EECON2 ; .line 419; ./picLib3.c EECON2 = 0x0AA; MOVLW 0xaa MOVWF _EECON2 ; .line 420; ./picLib3.c EECON1bits.WR = 1; // Start writing BSF _EECON1bits, 1 _00382_DS_: ; .line 421; ./picLib3.c while(EECON1bits.WR); BTFSC _EECON1bits, 1 BRA _00382_DS_ ; .line 427; ./picLib3.c EECON1bits.WREN = 0; BCF _EECON1bits, 2 ; .line 428; ./picLib3.c INTCONbits.GIE = 1; // enable interrupts BSF _INTCONbits, 7 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__eepromRead8 code _eepromRead8: ; .line 401; ./picLib3.c UInt8 eepromRead8(UInt8 address){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 ; .line 402; ./picLib3.c EECON1bits.CFGS = 0; BCF _EECON1bits, 6 ; .line 403; ./picLib3.c EECON1bits.EEPGD = 0; BCF _EECON1bits, 7 ; .line 404; ./picLib3.c EEADR = address; MOVFF r0x00, _EEADR ; .line 405; ./picLib3.c EECON1bits.RD = 1; BSF _EECON1bits, 0 ; .line 406; ./picLib3.c return EEDATA; MOVF _EEDATA, W MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__usartWrite code _usartWrite: ; .line 389; ./picLib3.c void usartWrite(char* buffer, UInt8 len){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 MOVLW 0x05 MOVFF PLUSW2, r0x03 ; .line 392; ./picLib3.c for(i = 0; i < len; i++){ CLRF r0x04 _00363_DS_: MOVF r0x03, W SUBWF r0x04, W BC _00367_DS_ ; .line 393; ./picLib3.c usartPutc(*buffer++); MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrget1 MOVWF r0x05 INCF r0x00, F BTFSC STATUS, 0 INCF r0x01, F BTFSC STATUS, 0 INCF r0x02, F MOVF r0x05, W MOVWF POSTDEC1 CALL _usartPutc INCF FSR1L, F ; .line 392; ./picLib3.c for(i = 0; i < len; i++){ INCF r0x04, F BRA _00363_DS_ _00367_DS_: MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__usartPuts code _usartPuts: ; .line 356; ./picLib3.c void usartPuts(char* p){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 _00355_DS_: ; .line 357; ./picLib3.c while(*p){ MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrget1 MOVWF r0x03 MOVF r0x03, W BZ _00358_DS_ _00352_DS_: ; .line 358; ./picLib3.c while(!TXSTAbits.TRMT); BTFSS _TXSTAbits, 1 BRA _00352_DS_ ; .line 359; ./picLib3.c TXREG = *p++; MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrget1 MOVWF _TXREG INCF r0x00, F BTFSC STATUS, 0 INCF r0x01, F BTFSC STATUS, 0 INCF r0x02, F BRA _00355_DS_ _00358_DS_: MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__usartPutc code _usartPutc: ; .line 351; ./picLib3.c void usartPutc(UInt8 c){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 _00344_DS_: ; .line 352; ./picLib3.c while(!TXSTAbits.TRMT); BTFSS _TXSTAbits, 1 BRA _00344_DS_ ; .line 353; ./picLib3.c TXREG = c; MOVFF r0x00, _TXREG MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__usartGetc code _usartGetc: _00336_DS_: ; .line 347; ./picLib3.c while(PIR1bits.RCIF == 0); BTFSS _PIR1bits, 5 BRA _00336_DS_ ; .line 348; ./picLib3.c return RCREG; MOVF _RCREG, W RETURN ; ; Starting pCode block S_testSwitches__usartRxRdy code _usartRxRdy: ; .line 342; ./picLib3.c unsigned char usartRxRdy(void){ MOVFF r0x00, POSTDEC1 ; .line 343; ./picLib3.c return PIR1bits.RCIF; CLRF r0x00 BTFSC _PIR1bits, 5 INCF r0x00, F MOVF r0x00, W MOVFF PREINC1, r0x00 RETURN ; ; Starting pCode block S_testSwitches__usartInit code _usartInit: ; .line 329; ./picLib3.c TXSTA = 0x20; MOVLW 0x20 MOVWF _TXSTA ; .line 330; ./picLib3.c RCSTA = 0x90; MOVLW 0x90 MOVWF _RCSTA ; .line 336; ./picLib3.c SPBRG = 12; // 4800 Baud 4MHz Clock MOVLW 0x0c MOVWF _SPBRG ; .line 339; ./picLib3.c delayMs(1); MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x01 MOVWF POSTDEC1 CALL _delayMs MOVLW 0x02 ADDWF FSR1L, F RETURN ; ; Starting pCode block S_testSwitches__strWordDec code _strWordDec: ; .line 297; ./picLib3.c void strWordDec(char* str, UInt8 decPlace, UInt16 v){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 MOVFF r0x06, POSTDEC1 MOVFF r0x07, POSTDEC1 MOVFF r0x08, POSTDEC1 MOVFF r0x09, POSTDEC1 MOVFF r0x0a, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 MOVLW 0x05 MOVFF PLUSW2, r0x03 MOVLW 0x06 MOVFF PLUSW2, r0x04 MOVLW 0x07 MOVFF PLUSW2, r0x05 ; .line 298; ./picLib3.c char* p = str; MOVFF r0x00, r0x06 MOVFF r0x01, r0x07 MOVFF r0x02, r0x08 ; .line 300; ./picLib3.c if(decPlace) MOVF r0x03, W BZ _00289_DS_ ; .line 301; ./picLib3.c decPlace = 5 - decPlace; MOVF r0x03, W SUBLW 0x05 MOVWF r0x03 _00289_DS_: ; .line 303; ./picLib3.c *p++ = (v / 10000) + '0'; MOVLW 0x27 MOVWF POSTDEC1 MOVLW 0x10 MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 CALL __divuint MOVWF r0x09 MOVFF PRODL, r0x0a MOVLW 0x04 ADDWF FSR1L, F MOVLW 0x30 ADDWF r0x09, F MOVFF r0x09, POSTDEC1 MOVFF r0x06, FSR0L MOVFF r0x07, PRODL MOVF r0x08, W CALL __gptrput1 INCF r0x06, F BTFSC STATUS, 0 INCF r0x07, F BTFSC STATUS, 0 INCF r0x08, F ; .line 304; ./picLib3.c if(!--decPlace) *p++ = '.'; DECF r0x03, F MOVF r0x03, W BNZ _00291_DS_ MOVLW 0x2e MOVWF POSTDEC1 MOVFF r0x06, FSR0L MOVFF r0x07, PRODL MOVF r0x08, W CALL __gptrput1 INCF r0x06, F BTFSC STATUS, 0 INCF r0x07, F BTFSC STATUS, 0 INCF r0x08, F _00291_DS_: ; .line 305; ./picLib3.c v = v % 10000; MOVLW 0x27 MOVWF POSTDEC1 MOVLW 0x10 MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 CALL __moduint MOVWF r0x04 MOVFF PRODL, r0x05 MOVLW 0x04 ADDWF FSR1L, F ; .line 306; ./picLib3.c *p++ = (v / 1000) + '0'; MOVLW 0x03 MOVWF POSTDEC1 MOVLW 0xe8 MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 CALL __divuint MOVWF r0x09 MOVFF PRODL, r0x0a MOVLW 0x04 ADDWF FSR1L, F MOVLW 0x30 ADDWF r0x09, F MOVFF r0x09, POSTDEC1 MOVFF r0x06, FSR0L MOVFF r0x07, PRODL MOVF r0x08, W CALL __gptrput1 INCF r0x06, F BTFSC STATUS, 0 INCF r0x07, F BTFSC STATUS, 0 INCF r0x08, F ; .line 307; ./picLib3.c if(!--decPlace) *p++ = '.'; DECF r0x03, F MOVF r0x03, W BNZ _00293_DS_ MOVLW 0x2e MOVWF POSTDEC1 MOVFF r0x06, FSR0L MOVFF r0x07, PRODL MOVF r0x08, W CALL __gptrput1 INCF r0x06, F BTFSC STATUS, 0 INCF r0x07, F BTFSC STATUS, 0 INCF r0x08, F _00293_DS_: ; .line 308; ./picLib3.c v = v % 1000; MOVLW 0x03 MOVWF POSTDEC1 MOVLW 0xe8 MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 CALL __moduint MOVWF r0x04 MOVFF PRODL, r0x05 MOVLW 0x04 ADDWF FSR1L, F ; .line 309; ./picLib3.c *p++ = (v / 100) + '0'; MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x64 MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 CALL __divuint MOVWF r0x09 MOVFF PRODL, r0x0a MOVLW 0x04 ADDWF FSR1L, F MOVLW 0x30 ADDWF r0x09, F MOVFF r0x09, POSTDEC1 MOVFF r0x06, FSR0L MOVFF r0x07, PRODL MOVF r0x08, W CALL __gptrput1 INCF r0x06, F BTFSC STATUS, 0 INCF r0x07, F BTFSC STATUS, 0 INCF r0x08, F ; .line 310; ./picLib3.c if(!--decPlace) *p++ = '.'; DECF r0x03, F MOVF r0x03, W BNZ _00295_DS_ MOVLW 0x2e MOVWF POSTDEC1 MOVFF r0x06, FSR0L MOVFF r0x07, PRODL MOVF r0x08, W CALL __gptrput1 INCF r0x06, F BTFSC STATUS, 0 INCF r0x07, F BTFSC STATUS, 0 INCF r0x08, F _00295_DS_: ; .line 311; ./picLib3.c v = v % 100; MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x64 MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 CALL __moduint MOVWF r0x04 MOVFF PRODL, r0x05 MOVLW 0x04 ADDWF FSR1L, F ; .line 312; ./picLib3.c *p++ = (v / 10) + '0'; MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x0a MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 CALL __divuint MOVWF r0x09 MOVFF PRODL, r0x0a MOVLW 0x04 ADDWF FSR1L, F MOVLW 0x30 ADDWF r0x09, F MOVFF r0x09, POSTDEC1 MOVFF r0x06, FSR0L MOVFF r0x07, PRODL MOVF r0x08, W CALL __gptrput1 INCF r0x06, F BTFSC STATUS, 0 INCF r0x07, F BTFSC STATUS, 0 INCF r0x08, F ; .line 313; ./picLib3.c if(!--decPlace) *p++ = '.'; DECF r0x03, F MOVF r0x03, W BNZ _00297_DS_ MOVLW 0x2e MOVWF POSTDEC1 MOVFF r0x06, FSR0L MOVFF r0x07, PRODL MOVF r0x08, W CALL __gptrput1 INCF r0x06, F BTFSC STATUS, 0 INCF r0x07, F BTFSC STATUS, 0 INCF r0x08, F _00297_DS_: ; .line 314; ./picLib3.c v = v % 10; MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x0a MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x04, W MOVWF POSTDEC1 CALL __moduint MOVWF r0x04 MOVFF PRODL, r0x05 MOVLW 0x04 ADDWF FSR1L, F ; .line 315; ./picLib3.c *p++ = v + '0'; MOVLW 0x30 ADDWF r0x04, F MOVFF r0x04, POSTDEC1 MOVFF r0x06, FSR0L MOVFF r0x07, PRODL MOVF r0x08, W CALL __gptrput1 INCF r0x06, F BTFSC STATUS, 0 INCF r0x07, F BTFSC STATUS, 0 INCF r0x08, F ; .line 316; ./picLib3.c if(!--decPlace) *p++ = '.'; DECFSZ r0x03, F BRA _00315_DS_ MOVLW 0x2e MOVWF POSTDEC1 MOVFF r0x06, FSR0L MOVFF r0x07, PRODL MOVF r0x08, W CALL __gptrput1 _00315_DS_: ; .line 319; ./picLib3.c for(p = str; (p < str + 4) && (*p == '0'); p++) MOVF r0x00, W ADDLW 0x04 MOVWF r0x03 MOVLW 0x00 ADDWFC r0x01, W MOVWF r0x04 MOVLW 0x00 ADDWFC r0x02, W MOVWF r0x05 _00301_DS_: MOVF r0x02, W ADDLW 0x80 MOVWF PRODL MOVF r0x05, W ADDLW 0x80 SUBWF PRODL, W BNZ _00319_DS_ MOVF r0x04, W SUBWF r0x01, W BNZ _00319_DS_ MOVF r0x03, W SUBWF r0x00, W _00319_DS_: BC _00305_DS_ MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrget1 ; # MOVWF r0x06 ; # MOVF r0x06, W MOVWF r0x06 XORLW 0x30 BNZ _00305_DS_ ; .line 320; ./picLib3.c *p = ' '; MOVLW 0x20 MOVWF POSTDEC1 MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrput1 ; .line 319; ./picLib3.c for(p = str; (p < str + 4) && (*p == '0'); p++) INCF r0x00, F BTFSC STATUS, 0 INCF r0x01, F BTFSC STATUS, 0 INCF r0x02, F BRA _00301_DS_ _00305_DS_: MOVFF PREINC1, r0x0a MOVFF PREINC1, r0x09 MOVFF PREINC1, r0x08 MOVFF PREINC1, r0x07 MOVFF PREINC1, r0x06 MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__strByte code _strByte: ; .line 283; ./picLib3.c void strByte(char* str, UInt8 v){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 MOVFF r0x06, POSTDEC1 MOVFF r0x07, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 MOVLW 0x05 MOVFF PLUSW2, r0x03 ; .line 286; ./picLib3.c *p++ = (v / 100) + '0'; MOVLW 0x64 MOVWF POSTDEC1 MOVFF r0x03, POSTDEC1 CALL __divuchar MOVWF r0x04 MOVF PREINC1, W MOVF PREINC1, W MOVLW 0x30 ADDWF r0x04, F MOVFF r0x04, POSTDEC1 MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrput1 MOVF r0x00, W ADDLW 0x01 MOVWF r0x04 MOVLW 0x00 ADDWFC r0x01, W MOVWF r0x05 MOVLW 0x00 ADDWFC r0x02, W MOVWF r0x06 ; .line 287; ./picLib3.c v = v % 100; MOVLW 0x64 MOVWF POSTDEC1 MOVFF r0x03, POSTDEC1 CALL __moduchar MOVWF r0x03 MOVF PREINC1, W MOVF PREINC1, W ; .line 288; ./picLib3.c *p++ = (v / 10) + '0'; MOVLW 0x0a MOVWF POSTDEC1 MOVFF r0x03, POSTDEC1 CALL __divuchar MOVWF r0x07 MOVF PREINC1, W MOVF PREINC1, W MOVLW 0x30 ADDWF r0x07, F MOVFF r0x07, POSTDEC1 MOVFF r0x04, FSR0L MOVFF r0x05, PRODL MOVF r0x06, W CALL __gptrput1 INCF r0x04, F BTFSC STATUS, 0 INCF r0x05, F BTFSC STATUS, 0 INCF r0x06, F ; .line 289; ./picLib3.c v = v % 10; MOVLW 0x0a MOVWF POSTDEC1 MOVFF r0x03, POSTDEC1 CALL __moduchar MOVWF r0x03 MOVF PREINC1, W MOVF PREINC1, W ; .line 290; ./picLib3.c *p++ = v + '0'; MOVLW 0x30 ADDWF r0x03, F MOVFF r0x03, POSTDEC1 MOVFF r0x04, FSR0L MOVFF r0x05, PRODL MOVF r0x06, W CALL __gptrput1 ; .line 293; ./picLib3.c for(p = str; (p < str + 2) && (*p == '0'); p++) MOVF r0x00, W ADDLW 0x02 MOVWF r0x03 MOVLW 0x00 ADDWFC r0x01, W MOVWF r0x04 MOVLW 0x00 ADDWFC r0x02, W MOVWF r0x05 _00271_DS_: MOVF r0x02, W ADDLW 0x80 MOVWF PRODL MOVF r0x05, W ADDLW 0x80 SUBWF PRODL, W BNZ _00281_DS_ MOVF r0x04, W SUBWF r0x01, W BNZ _00281_DS_ MOVF r0x03, W SUBWF r0x00, W _00281_DS_: BC _00275_DS_ MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrget1 ; # MOVWF r0x06 ; # MOVF r0x06, W MOVWF r0x06 XORLW 0x30 BNZ _00275_DS_ ; .line 294; ./picLib3.c *p = ' '; MOVLW 0x20 MOVWF POSTDEC1 MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrput1 ; .line 293; ./picLib3.c for(p = str; (p < str + 2) && (*p == '0'); p++) INCF r0x00, F BTFSC STATUS, 0 INCF r0x01, F BTFSC STATUS, 0 INCF r0x02, F BRA _00271_DS_ _00275_DS_: MOVFF PREINC1, r0x07 MOVFF PREINC1, r0x06 MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__lcdPutHexByte code _lcdPutHexByte: ; .line 260; ./picLib3.c void lcdPutHexByte(UInt8 v){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 ; .line 264; ./picLib3.c c = v / 16; SWAPF r0x00, W ANDLW 0x0f MOVWF r0x01 ; .line 265; ./picLib3.c c += '0'; MOVLW 0x30 ADDWF r0x01, F ; .line 266; ./picLib3.c if(c > '9') MOVLW 0x3a SUBWF r0x01, W BNC _00256_DS_ ; .line 267; ./picLib3.c c += 7; MOVLW 0x07 ADDWF r0x01, F _00256_DS_: ; .line 269; ./picLib3.c dat[0] = c; MOVF r0x01, W BANKSEL _lcdPutHexByte_dat_1_1 MOVWF _lcdPutHexByte_dat_1_1, B ; .line 271; ./picLib3.c c = v & 0x0F; MOVLW 0x0f ANDWF r0x00, W MOVWF r0x01 ; .line 272; ./picLib3.c c += '0'; MOVLW 0x30 ADDWF r0x01, F ; .line 273; ./picLib3.c if(c > '9') MOVLW 0x3a SUBWF r0x01, W BNC _00258_DS_ ; .line 274; ./picLib3.c c += 7; MOVLW 0x07 ADDWF r0x01, F _00258_DS_: ; .line 275; ./picLib3.c dat[1] = c; MOVF r0x01, W BANKSEL (_lcdPutHexByte_dat_1_1 + 1) MOVWF (_lcdPutHexByte_dat_1_1 + 1), B ; removed redundant BANKSEL ; .line 276; ./picLib3.c dat[2] = 0xFF; SETF (_lcdPutHexByte_dat_1_1 + 2), B ; .line 278; ./picLib3.c i2cWrite(0xC6, 0, I2cSlow8, dat, 3); MOVLW HIGH(_lcdPutHexByte_dat_1_1) MOVWF r0x01 MOVLW LOW(_lcdPutHexByte_dat_1_1) MOVWF r0x00 MOVLW 0x80 MOVWF r0x02 MOVLW 0x03 MOVWF POSTDEC1 MOVF r0x02, W MOVWF POSTDEC1 MOVF r0x01, W MOVWF POSTDEC1 MOVF r0x00, W MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0xc6 MOVWF POSTDEC1 CALL _i2cWrite MOVLW 0x08 ADDWF FSR1L, F ; .line 279; ./picLib3.c delayMs(10); MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x0a MOVWF POSTDEC1 CALL _delayMs MOVLW 0x02 ADDWF FSR1L, F MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__lcdWriteStr code _lcdWriteStr: ; .line 237; ./picLib3.c void lcdWriteStr(UInt8 x, UInt8 y, char* str){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 MOVLW 0x05 MOVFF PLUSW2, r0x03 MOVLW 0x06 MOVFF PLUSW2, r0x04 ; .line 238; ./picLib3.c i2cWaitForIdle(); CALL _i2cWaitForIdle ; .line 240; ./picLib3.c SSPADD = 0x09; // Set the baud rate to 100KHz at 4MHz CLK MOVLW 0x09 MOVWF _SSPADD ; .line 242; ./picLib3.c i2cStart(); CALL _i2cStart ; .line 244; ./picLib3.c i2cPutByte(0xC6); MOVLW 0xc6 MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F ; .line 245; ./picLib3.c i2cPutByte(0x00); MOVLW 0x00 MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F ; .line 246; ./picLib3.c i2cPutByte(0xFE); MOVLW 0xfe MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F ; ;multiply lit val:0x40 by variable r0x01 and store in r0x01 ; ;Unrolled 8 X 8 multiplication ; ;FIXME: the function does not support result==WREG ; .line 247; ./picLib3.c i2cPutByte(128 + (y * 64) + x); MOVF r0x01, W MULLW 0x40 MOVFF PRODL, r0x01 MOVLW 0x80 ADDWF r0x01, F MOVF r0x01, W ADDWF r0x00, F MOVF r0x00, W MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F ; .line 249; ./picLib3.c while(*str){ MOVFF r0x02, r0x00 MOVFF r0x03, r0x01 MOVFF r0x04, r0x02 _00247_DS_: MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrget1 MOVWF r0x03 MOVF r0x03, W BZ _00249_DS_ ; .line 250; ./picLib3.c i2cPutByte(*str++); INCF r0x00, F BTFSC STATUS, 0 INCF r0x01, F BTFSC STATUS, 0 INCF r0x02, F MOVF r0x03, W MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F BRA _00247_DS_ _00249_DS_: ; .line 253; ./picLib3.c i2cPutByte(0xFF); MOVLW 0xff MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F ; .line 255; ./picLib3.c i2cStop(); CALL _i2cStop ; .line 256; ./picLib3.c delayMs(10); MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x0a MOVWF POSTDEC1 CALL _delayMs MOVLW 0x02 ADDWF FSR1L, F MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__lcdPutChar code _lcdPutChar: ; .line 227; ./picLib3.c void lcdPutChar(char c){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 ; .line 230; ./picLib3.c dat[0] = c; MOVF r0x00, W BANKSEL _lcdPutChar_dat_1_1 MOVWF _lcdPutChar_dat_1_1, B ; removed redundant BANKSEL ; .line 231; ./picLib3.c dat[1] = 255; SETF (_lcdPutChar_dat_1_1 + 1), B ; .line 233; ./picLib3.c i2cWrite(0xC6, 0, I2cSlow8, dat, 2); MOVLW HIGH(_lcdPutChar_dat_1_1) MOVWF r0x01 MOVLW LOW(_lcdPutChar_dat_1_1) MOVWF r0x00 MOVLW 0x80 MOVWF r0x02 MOVLW 0x02 MOVWF POSTDEC1 MOVF r0x02, W MOVWF POSTDEC1 MOVF r0x01, W MOVWF POSTDEC1 MOVF r0x00, W MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0xc6 MOVWF POSTDEC1 CALL _i2cWrite MOVLW 0x08 ADDWF FSR1L, F ; .line 234; ./picLib3.c delayMs(10); MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x0a MOVWF POSTDEC1 CALL _delayMs MOVLW 0x02 ADDWF FSR1L, F MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__lcdInit code _lcdInit: ; .line 219; ./picLib3.c void lcdInit(){ MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 ; .line 220; ./picLib3.c UInt8 dat[] = { 254,1,255 }; MOVLW 0xfe BANKSEL _lcdInit_dat_1_1 MOVWF _lcdInit_dat_1_1, B MOVLW 0x01 ; removed redundant BANKSEL MOVWF (_lcdInit_dat_1_1 + 1), B ; removed redundant BANKSEL SETF (_lcdInit_dat_1_1 + 2), B ; .line 223; ./picLib3.c i2cWrite(0xC6, 0, I2cSlow8, dat, sizeof(dat)); MOVLW HIGH(_lcdInit_dat_1_1) MOVWF r0x01 MOVLW LOW(_lcdInit_dat_1_1) MOVWF r0x00 MOVLW 0x80 MOVWF r0x02 MOVLW 0x03 MOVWF POSTDEC1 MOVF r0x02, W MOVWF POSTDEC1 MOVF r0x01, W MOVWF POSTDEC1 MOVF r0x00, W MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0xc6 MOVWF POSTDEC1 CALL _i2cWrite MOVLW 0x08 ADDWF FSR1L, F ; .line 224; ./picLib3.c delayMs(10); MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x0a MOVWF POSTDEC1 CALL _delayMs MOVLW 0x02 ADDWF FSR1L, F MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 RETURN ; ; Starting pCode block S_testSwitches__i2cRead code _i2cRead: ; .line 183; ./picLib3.c Int8 i2cRead(UInt8 chipAddress, UInt16 regAddress, I2cMode mode, UInt8* dat, UInt8 len){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 MOVFF r0x06, POSTDEC1 MOVFF r0x07, POSTDEC1 MOVFF r0x08, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 MOVLW 0x05 MOVFF PLUSW2, r0x03 MOVLW 0x06 MOVFF PLUSW2, r0x04 MOVLW 0x07 MOVFF PLUSW2, r0x05 MOVLW 0x08 MOVFF PLUSW2, r0x06 MOVLW 0x09 MOVFF PLUSW2, r0x07 ; .line 184; ./picLib3.c i2cWaitForIdle(); CALL _i2cWaitForIdle ; .line 186; ./picLib3.c if(mode & 0x01) BTFSS r0x03, 0 BRA _00212_DS_ ; .line 187; ./picLib3.c SSPADD = 0x02; // Set the baud rate to 333KHz at 4MHz CLK MOVLW 0x02 MOVWF _SSPADD BRA _00213_DS_ _00212_DS_: ; .line 189; ./picLib3.c SSPADD = 0x09; // Set the baud rate to 100KHz at 4MHz CLK MOVLW 0x09 MOVWF _SSPADD _00213_DS_: ; .line 191; ./picLib3.c i2cStart(); CALL _i2cStart ; .line 193; ./picLib3.c i2cPutByte(chipAddress); MOVF r0x00, W MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F ; .line 194; ./picLib3.c if(mode & 0x02) BTFSS r0x03, 1 BRA _00215_DS_ ; .line 195; ./picLib3.c i2cPutByte(regAddress >> 8); MOVF r0x02, W MOVWF r0x03 CLRF r0x08 MOVF r0x03, W MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F _00215_DS_: ; .line 196; ./picLib3.c i2cPutByte(regAddress); MOVF r0x01, W MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F ; .line 198; ./picLib3.c i2cRepStart(); CALL _i2cRepStart ; .line 200; ./picLib3.c i2cPutByte(chipAddress | 0x01); BSF r0x00, 0 MOVF r0x00, W MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F ; .line 202; ./picLib3.c while(len > 1){ MOVFF r0x04, r0x00 MOVFF r0x05, r0x01 MOVFF r0x06, r0x02 MOVFF r0x07, r0x03 _00216_DS_: MOVLW 0x02 SUBWF r0x03, W BNC _00218_DS_ ; .line 203; ./picLib3.c *dat++ = i2cGetByte(1); MOVLW 0x01 MOVWF POSTDEC1 CALL _i2cGetByte MOVWF r0x04 INCF FSR1L, F MOVFF r0x04, POSTDEC1 MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrput1 INCF r0x00, F BTFSC STATUS, 0 INCF r0x01, F BTFSC STATUS, 0 INCF r0x02, F ; .line 204; ./picLib3.c len--; DECF r0x03, F BRA _00216_DS_ _00218_DS_: ; .line 206; ./picLib3.c if(len != 0){ MOVF r0x03, W BZ _00220_DS_ ; .line 207; ./picLib3.c *dat++ = i2cGetByte(0); MOVLW 0x00 MOVWF POSTDEC1 CALL _i2cGetByte MOVWF r0x03 INCF FSR1L, F MOVFF r0x03, POSTDEC1 MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrput1 _00220_DS_: ; .line 210; ./picLib3.c i2cStop(); CALL _i2cStop ; .line 212; ./picLib3.c return 0; CLRF WREG MOVFF PREINC1, r0x08 MOVFF PREINC1, r0x07 MOVFF PREINC1, r0x06 MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__i2cWrite code _i2cWrite: ; .line 158; ./picLib3.c Int8 i2cWrite(UInt8 chipAddress, UInt16 regAddress, I2cMode mode, UInt8* dat, UInt8 len){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVFF r0x04, POSTDEC1 MOVFF r0x05, POSTDEC1 MOVFF r0x06, POSTDEC1 MOVFF r0x07, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 MOVLW 0x04 MOVFF PLUSW2, r0x02 MOVLW 0x05 MOVFF PLUSW2, r0x03 MOVLW 0x06 MOVFF PLUSW2, r0x04 MOVLW 0x07 MOVFF PLUSW2, r0x05 MOVLW 0x08 MOVFF PLUSW2, r0x06 MOVLW 0x09 MOVFF PLUSW2, r0x07 ; .line 159; ./picLib3.c i2cWaitForIdle(); CALL _i2cWaitForIdle ; .line 161; ./picLib3.c if(mode & 0x01) BTFSS r0x03, 0 BRA _00191_DS_ ; .line 162; ./picLib3.c SSPADD = 0x02; // Set the baud rate to 333KHz at 4MHz CLK MOVLW 0x02 MOVWF _SSPADD BRA _00192_DS_ _00191_DS_: ; .line 164; ./picLib3.c SSPADD = 0x09; // Set the baud rate to 100KHz at 4MHz CLK MOVLW 0x09 MOVWF _SSPADD _00192_DS_: ; .line 166; ./picLib3.c i2cStart(); CALL _i2cStart ; .line 168; ./picLib3.c i2cPutByte(chipAddress); MOVF r0x00, W MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F ; .line 169; ./picLib3.c if(mode & 0x02) BTFSS r0x03, 1 BRA _00194_DS_ ; .line 170; ./picLib3.c i2cPutByte(regAddress >> 8); MOVF r0x02, W MOVWF r0x00 CLRF r0x03 MOVF r0x00, W MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F _00194_DS_: ; .line 171; ./picLib3.c i2cPutByte(regAddress); MOVF r0x01, W MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F ; .line 173; ./picLib3.c while(len--){ MOVFF r0x04, r0x00 MOVFF r0x05, r0x01 MOVFF r0x06, r0x02 MOVFF r0x07, r0x03 _00195_DS_: MOVFF r0x03, r0x04 DECF r0x03, F MOVF r0x04, W BZ _00197_DS_ ; .line 174; ./picLib3.c i2cPutByte(*dat++); MOVFF r0x00, FSR0L MOVFF r0x01, PRODL MOVF r0x02, W CALL __gptrget1 MOVWF r0x04 INCF r0x00, F BTFSC STATUS, 0 INCF r0x01, F BTFSC STATUS, 0 INCF r0x02, F MOVF r0x04, W MOVWF POSTDEC1 CALL _i2cPutByte INCF FSR1L, F BRA _00195_DS_ _00197_DS_: ; .line 177; ./picLib3.c i2cStop(); CALL _i2cStop ; .line 179; ./picLib3.c return 0; CLRF WREG MOVFF PREINC1, r0x07 MOVFF PREINC1, r0x06 MOVFF PREINC1, r0x05 MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__i2cGetByte code _i2cGetByte: ; .line 139; ./picLib3.c UInt8 i2cGetByte(UInt8 ack){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 ; .line 142; ./picLib3.c i2cWaitForIdle(); CALL _i2cWaitForIdle ; .line 143; ./picLib3.c SSPCON2bits.RCEN = 1; BSF _SSPCON2bits, 3 ; .line 144; ./picLib3.c i2cWaitForIdle(); CALL _i2cWaitForIdle ; .line 145; ./picLib3.c v = SSPBUF; MOVFF _SSPBUF, r0x01 ; .line 146; ./picLib3.c i2cWaitForIdle(); CALL _i2cWaitForIdle ; .line 148; ./picLib3.c if(ack) MOVF r0x00, W BZ _00183_DS_ ; .line 149; ./picLib3.c SSPCON2bits.ACKDT = 0; BCF _SSPCON2bits, 5 BRA _00184_DS_ _00183_DS_: ; .line 151; ./picLib3.c SSPCON2bits.ACKDT = 1; BSF _SSPCON2bits, 5 _00184_DS_: ; .line 153; ./picLib3.c SSPCON2bits.ACKEN = 1; // Send acknowledge sequence BSF _SSPCON2bits, 4 ; .line 155; ./picLib3.c return v; MOVF r0x01, W MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__i2cPutByte code _i2cPutByte: ; .line 128; ./picLib3.c void i2cPutByte(UInt8 v){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVLW 0x02 MOVFF PLUSW2, _SSPBUF ; .line 134; ./picLib3.c i2cWaitForIdle(); CALL _i2cWaitForIdle ; .line 135; ./picLib3.c SSPBUF = v; MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_testSwitches__i2cStop code _i2cStop: ; .line 123; ./picLib3.c i2cWaitForIdle(); CALL _i2cWaitForIdle ; .line 124; ./picLib3.c SSPCON2bits.PEN = 1; BSF _SSPCON2bits, 2 _00169_DS_: ; .line 125; ./picLib3.c while(SSPCON2bits.PEN); BTFSC _SSPCON2bits, 2 BRA _00169_DS_ RETURN ; ; Starting pCode block S_testSwitches__i2cRepStart code _i2cRepStart: ; .line 117; ./picLib3.c i2cWaitForIdle(); CALL _i2cWaitForIdle ; .line 118; ./picLib3.c SSPCON2bits.RSEN = 1; BSF _SSPCON2bits, 1 _00161_DS_: ; .line 119; ./picLib3.c while(SSPCON2bits.RSEN); BTFSC _SSPCON2bits, 1 BRA _00161_DS_ RETURN ; ; Starting pCode block S_testSwitches__i2cStart code _i2cStart: ; .line 111; ./picLib3.c i2cWaitForIdle(); CALL _i2cWaitForIdle ; .line 112; ./picLib3.c SSPCON2bits.SEN = 1; BSF _SSPCON2bits, 0 _00153_DS_: ; .line 113; ./picLib3.c while(SSPCON2bits.SEN); BTFSC _SSPCON2bits, 0 BRA _00153_DS_ RETURN ; ; Starting pCode block S_testSwitches__i2cWaitForIdle code _i2cWaitForIdle: ; .line 99; ./picLib3.c Int8 i2cWaitForIdle(){ MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 ; .line 102; ./picLib3.c while(((SSPCON2 & 0x1F) | SSPSTATbits.R_W) && --to); // Wait for idle and not writing MOVLW 0xff MOVWF r0x00 _00138_DS_: MOVLW 0x1f ANDWF _SSPCON2, W MOVWF r0x01 CLRF r0x02 BTFSC _SSPSTATbits, 2 INCF r0x02, F MOVF r0x02, W IORWF r0x01, F MOVF r0x01, W BZ _00148_DS_ DECF r0x00, F MOVF r0x00, W BNZ _00138_DS_ _00148_DS_: MOVFF r0x00, r0x01 ; # MOVF r0x00, W ; # BTFSS STATUS, 2 ; # GOTO _00142_DS_ ; # CALL _i2cReset ; # MOVF r0x01, W ; .line 105; ./picLib3.c if(!to) MOVF r0x00, W ; .line 106; ./picLib3.c i2cReset(); BTFSC STATUS, 2 ; .line 107; ./picLib3.c return !to; CALL _i2cReset MOVF r0x01, W BSF STATUS, 0 TSTFSZ WREG BCF STATUS, 0 CLRF r0x01 RLCF r0x01, F MOVF r0x01, W MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 RETURN ; ; Starting pCode block S_testSwitches__i2cWaitForIdle1 code _i2cWaitForIdle1: ; .line 95; ./picLib3.c void i2cWaitForIdle1(){ MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 _00129_DS_: ; .line 96; ./picLib3.c while((SSPCON2 & 0x1F) | SSPSTATbits.R_W); // Wait for idle and not writing MOVLW 0x1f ANDWF _SSPCON2, W MOVWF r0x00 CLRF r0x01 BTFSC _SSPSTATbits, 2 INCF r0x01, F MOVF r0x01, W IORWF r0x00, F MOVF r0x00, W BNZ _00129_DS_ MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 RETURN ; ; Starting pCode block S_testSwitches__i2cInit code _i2cInit: ; .line 76; ./picLib3.c SSPSTAT &= 0x3f; MOVLW 0x3f ANDWF _SSPSTAT, F ; .line 78; ./picLib3.c SSPCON1 = 0x28; // Set I2C master mode MOVLW 0x28 MOVWF _SSPCON1 ; .line 79; ./picLib3.c SSPCON2 = 0x00; CLRF _SSPCON2 ; .line 80; ./picLib3.c SSPADD = 0x09; // Set the baud rate to 100KHz at 4MHz MOVLW 0x09 MOVWF _SSPADD ; .line 82; ./picLib3.c TRISCbits.TRISC3 = 1; // Enable pins BSF _TRISCbits, 3 ; .line 83; ./picLib3.c TRISCbits.TRISC4 = 1; BSF _TRISCbits, 4 ; .line 88; ./picLib3.c PIR1bits.SSPIF = 0; // clear SSPIF interrupt flag BCF _PIR1bits, 3 ; .line 89; ./picLib3.c PIR2bits.BCLIF = 0; // clear bus collision flag BCF _PIR2bits, 3 ; .line 91; ./picLib3.c i2cReset(); CALL _i2cReset ; .line 92; ./picLib3.c PORTBbits.RB5 = 0; BCF _PORTBbits, 5 RETURN ; ; Starting pCode block S_testSwitches__i2cReset code _i2cReset: ; .line 53; ./picLib3.c PORTBbits.RB5 = 1; BSF _PORTBbits, 5 ; .line 55; ./picLib3.c SSPCON1bits.SSPEN = 0; // Disable I2C hardware BCF _SSPCON1bits, 5 ; .line 56; ./picLib3.c TRISCbits.TRISC3 = 0; BCF _TRISCbits, 3 ; .line 57; ./picLib3.c PORTCbits.RC3 = 1; BSF _PORTCbits, 3 _00116_DS_: ; .line 60; ./picLib3.c while(!PORTCbits.RC4){ BTFSC _PORTCbits, 4 BRA _00118_DS_ ; .line 61; ./picLib3.c PORTCbits.RC3 = 0; BCF _PORTCbits, 3 ; .line 62; ./picLib3.c PORTCbits.RC3 = 1; BSF _PORTCbits, 3 BRA _00116_DS_ _00118_DS_: ; .line 66; ./picLib3.c TRISCbits.TRISC4 = 0; BCF _TRISCbits, 4 ; .line 67; ./picLib3.c PORTCbits.RC4 = 0; BCF _PORTCbits, 4 ; .line 68; ./picLib3.c PORTCbits.RC4 = 1; BSF _PORTCbits, 4 ; .line 70; ./picLib3.c TRISCbits.TRISC3 = 1; // Enable pins BSF _TRISCbits, 3 ; .line 71; ./picLib3.c TRISCbits.TRISC4 = 1; BSF _TRISCbits, 4 ; .line 72; ./picLib3.c SSPCON1bits.SSPEN = 1; // Re-enable I2C hardware BSF _SSPCON1bits, 5 RETURN ; ; Starting pCode block S_testSwitches__delayMs code _delayMs: ; .line 27; ./picLib3.c void delayMs(UInt16 n){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVFF r0x02, POSTDEC1 MOVFF r0x03, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 _00105_DS_: ; .line 30; ./picLib3.c while(n--){ MOVFF r0x00, r0x02 MOVFF r0x01, r0x03 MOVLW 0xff ADDWF r0x00, F BTFSS STATUS, 0 DECF r0x01, F MOVF r0x02, W IORWF r0x03, W BZ _00111_DS_ ; .line 31; ./picLib3.c for(c = 0; c < 250; c++){ MOVLW 0xfa MOVWF r0x02 _00110_DS_: nop DECFSZ r0x02, F BRA _00110_DS_ ; .line 31; ./picLib3.c for(c = 0; c < 250; c++){ BRA _00105_DS_ _00111_DS_: MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; Statistics: ; code size: 4656 (0x1230) bytes ( 3.55%) ; 2328 (0x0918) words ; udata size: 282 (0x011a) bytes (22.03%) ; access size: 12 (0x000c) bytes end