;-------------------------------------------------------- ; File Created by SDCC : free open source ANSI-C Compiler ; Version 3.0.1 #6101 (Jan 12 2011) (Linux) ; This file was generated Thu Jan 27 20:19:20 2011 ;-------------------------------------------------------- ; PIC16 port for the Microchip 16-bit core micros ;-------------------------------------------------------- list p=18f2680 __config 0x300001, 0xf2 __config 0x300003, 0xfe __config 0x300006, 0xbb radix dec ;-------------------------------------------------------- ; public variables in this module ;-------------------------------------------------------- global _SERIAL_initialize global _SERIAL_putc global _SERIAL_getc global _SERIAL_write global _SERIAL_readable global _SERIAL_writable global _GPIO_set_directions_A global _GPIO_set_directions_B global _GPIO_set_directions_C global _GPIO_set_directions global _GPIO_out_port_A global _GPIO_out_port_B global _GPIO_out_port_C global _GPIO_out_port global _GPIO_in_port_A global _GPIO_in_port_B global _GPIO_in_port_C global _GPIO_in_port global _GPIO_out_high global _GPIO_out_low global _GPIO_out_toggle global _GPIO_out_float global _GPIO_init global _GPIO_runOnce global _main ;-------------------------------------------------------- ; extern variables in this module ;-------------------------------------------------------- extern __gptrget2 extern __gptrget1 extern _RXF6SIDHbits extern _RXF6SIDLbits extern _RXF6EIDHbits extern _RXF6EIDLbits extern _RXF7SIDHbits extern _RXF7SIDLbits extern _RXF7EIDHbits extern _RXF7EIDLbits extern _RXF8SIDHbits extern _RXF8SIDLbits extern _RXF8EIDHbits extern _RXF8EIDLbits extern _RXF9SIDHbits extern _RXF9SIDLbits extern _RXF9EIDHbits extern _RXF9EIDLbits extern _RXF10SIDHbits extern _RXF10SIDLbits extern _RXF10EIDHbits extern _RXF10EIDLbits extern _RXF11SIDHbits extern _RXF11SIDLbits extern _RXF11EIDHbits extern _RXF11EIDLbits extern _RXF12SIDHbits extern _RXF12SIDLbits extern _RXF12EIDHbits extern _RXF12EIDLbits extern _RXF13SIDHbits extern _RXF13SIDLbits extern _RXF13EIDHbits extern _RXF13EIDLbits extern _RXF14SIDHbits extern _RXF14SIDLbits extern _RXF14EIDHbits extern _RXF14EIDLbits extern _RXF15SIDHbits extern _RXF15SIDLbits extern _RXF15EIDHbits extern _RXF15EIDLbits extern _RXFCON0bits extern _RXFCON1bits extern _SDFLCbits extern _RXFBCON0bits extern _RXFBCON1bits extern _RXFBCON2bits extern _RXFBCON3bits extern _RXFBCON4bits extern _RXFBCON5bits extern _RXFBCON6bits extern _RXFBCON7bits extern _MSEL0bits extern _MSEL1bits extern _MSEL2bits extern _MSEL3bits extern _BSEL0bits extern _BIE0bits extern _TXBIEbits extern _B0CONbits extern _B0SIDHbits extern _B0SIDLbits extern _B0EIDHbits extern _B0EIDLbits extern _B0DLCbits extern _B0D0bits extern _B0D1bits extern _B0D2bits extern _B0D3bits extern _B0D4bits extern _B0D5bits extern _B0D6bits extern _B0D7bits extern _CANSTAT_RO9bits extern _CANCON_RO9bits extern _B1CONbits extern _B1SIDHbits extern _B1SIDLbits extern _B1EIDHbits extern _B1EIDLbits extern _B1DLCbits extern _B1D0bits extern _B1D1bits extern _B1D2bits extern _B1D3bits extern _B1D4bits extern _B1D5bits extern _B1D6bits extern _B1D7bits extern _CANSTAT_RO8bits extern _CANCON_RO8bits extern _B2CONbits extern _B2SIDHbits extern _B2SIDLbits extern _B2EIDHbits extern _B2EIDLbits extern _B2DLCbits extern _B2D0bits extern _B2D1bits extern _B2D2bits extern _B2D3bits extern _B2D4bits extern _B2D5bits extern _B2D6bits extern _B2D7bits extern _CANSTAT_RO7bits extern _CANCON_RO7bits extern _B3CONbits extern _B3SIDHbits extern _B3SIDLbits extern _B3EIDHbits extern _B3EIDLbits extern _B3DLCbits extern _B3D0bits extern _B3D1bits extern _B3D2bits extern _B3D3bits extern _B3D4bits extern _B3D5bits extern _B3D6bits extern _B3D7bits extern _CANSTAT_RO6bits extern _CANCON_RO6bits extern _B4CONbits extern _B4SIDHbits extern _B4SIDLbits extern _B4EIDHbits extern _B4EIDLbits extern _B4DLCbits extern _B4D0bits extern _B4D1bits extern _B4D2bits extern _B4D3bits extern _B4D4bits extern _B4D5bits extern _B4D6bits extern _B4D7bits extern _CANSTAT_RO5bits extern _CANCON_RO5bits extern _B5CONbits extern _B5SIDHbits extern _B5SIDLbits extern _B5EIDHbits extern _B5EIDLbits extern _B5DLCbits extern _B5D0bits extern _B5D1bits extern _B5D2bits extern _B5D3bits extern _B5D4bits extern _B5D5bits extern _B5D6bits extern _B5D7bits extern _CANSTAT_RO4bits extern _CANCON_RO4bits extern _RXF0SIDHbits extern _RXF0SIDLbits extern _RXF0EIDHbits extern _RXF0EIDLbits extern _RXF1SIDHbits extern _RXF1SIDLbits extern _RXF1EIDHbits extern _RXF1EIDLbits extern _RXF2SIDHbits extern _RXF2SIDLbits extern _RXF2EIDHbits extern _RXF2EIDLbits extern _RXF3SIDHbits extern _RXF3SIDLbits extern _RXF3EIDHbits extern _RXF3EIDLbits extern _RXF4SIDHbits extern _RXF4SIDLbits extern _RXF4EIDHbits extern _RXF4EIDLbits extern _RXF5SIDHbits extern _RXF5SIDLbits extern _RXF5EIDHbits extern _RXF5EIDLbits extern _RXM0SIDHbits extern _RXM0SIDLbits extern _RXM0EIDHbits extern _RXM0EIDLbits extern _RXM1SIDHbits extern _RXM1SIDLbits extern _RXM1EIDHbits extern _RXM1EIDLbits extern _TXB2CONbits extern _TXB2SIDHbits extern _TXB2SIDLbits extern _TXB2EIDHbits extern _TXB2EIDLbits extern _TXB2DLCbits extern _TXB2D0bits extern _TXB2D1bits extern _TXB2D2bits extern _TXB2D3bits extern _TXB2D4bits extern _TXB2D5bits extern _TXB2D6bits extern _TXB2D7bits extern _CANSTAT_RO3bits extern _CANCON_RO3bits extern _TXB1CONbits extern _TXB1SIDHbits extern _TXB1SIDLbits extern _TXB1EIDHbits extern _TXB1EIDLbits extern _TXB1DLCbits extern _TXB1D0bits extern _TXB1D1bits extern _TXB1D2bits extern _TXB1D3bits extern _TXB1D4bits extern _TXB1D5bits extern _TXB1D6bits extern _TXB1D7bits extern _CANSTAT_RO2bits extern _CANCON_RO2bits extern _TXB0CONbits extern _TXB0SIDHbits extern _TXB0SIDLbits extern _TXB0EIDHbits extern _TXB0EIDLbits extern _TXB0DLCbits extern _TXB0D0bits extern _TXB0D1bits extern _TXB0D2bits extern _TXB0D3bits extern _TXB0D4bits extern _TXB0D5bits extern _TXB0D6bits extern _TXB0D7bits extern _CANSTAT_RO1bits extern _CANCON_RO1bits extern _RXB1CONbits extern _RXB1SIDHbits extern _RXB1SIDLbits extern _RXB1EIDHbits extern _RXB1EIDLbits extern _RXB1DLCbits extern _RXB1D0bits extern _RXB1D1bits extern _RXB1D2bits extern _RXB1D3bits extern _RXB1D4bits extern _RXB1D5bits extern _RXB1D6bits extern _RXB1D7bits extern _CANSTAT_RO0bits extern _CANCON_RO0bits extern _RXB0CONbits extern _RXB0SIDHbits extern _RXB0SIDLbits extern _RXB0EIDHbits extern _RXB0EIDLbits extern _RXB0DLCbits extern _RXB0D0bits extern _RXB0D1bits extern _RXB0D2bits extern _RXB0D3bits extern _RXB0D4bits extern _RXB0D5bits extern _RXB0D6bits extern _RXB0D7bits extern _CANSTATbits extern _CANCONbits extern _BRGCON1bits extern _BRGCON2bits extern _BRGCON3bits extern _CIOCONbits extern _COMSTATbits extern _RXERRCNTbits extern _TXERRCNTbits extern _ECANCONbits extern _PORTAbits extern _PORTBbits extern _PORTCbits extern _LATAbits extern _LATBbits extern _LATCbits extern _DDRAbits extern _TRISAbits extern _DDRBbits extern _TRISBbits extern _DDRCbits extern _TRISCbits extern _OSCTUNEbits extern _PIE1bits extern _PIR1bits extern _IPR1bits extern _PIE2bits extern _PIR2bits extern _IPR2bits extern _PIE3bits extern _PIR3bits extern _IPR3bits extern _EECON1bits extern _RCSTAbits extern _TXSTAbits extern _T3CONbits extern _BAUDCONbits 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 _RXF6SIDH extern _RXF6SIDL extern _RXF6EIDH extern _RXF6EIDL extern _RXF7SIDH extern _RXF7SIDL extern _RXF7EIDH extern _RXF7EIDL extern _RXF8SIDH extern _RXF8SIDL extern _RXF8EIDH extern _RXF8EIDL extern _RXF9SIDH extern _RXF9SIDL extern _RXF9EIDH extern _RXF9EIDL extern _RXF10SIDH extern _RXF10SIDL extern _RXF10EIDH extern _RXF10EIDL extern _RXF11SIDH extern _RXF11SIDL extern _RXF11EIDH extern _RXF11EIDL extern _RXF12SIDH extern _RXF12SIDL extern _RXF12EIDH extern _RXF12EIDL extern _RXF13SIDH extern _RXF13SIDL extern _RXF13EIDH extern _RXF13EIDL extern _RXF14SIDH extern _RXF14SIDL extern _RXF14EIDH extern _RXF14EIDL extern _RXF15SIDH extern _RXF15SIDL extern _RXF15EIDH extern _RXF15EIDL extern _RXFCON0 extern _RXFCON1 extern _SDFLC extern _RXFBCON0 extern _RXFBCON1 extern _RXFBCON2 extern _RXFBCON3 extern _RXFBCON4 extern _RXFBCON5 extern _RXFBCON6 extern _RXFBCON7 extern _MSEL0 extern _MSEL1 extern _MSEL2 extern _MSEL3 extern _BSEL0 extern _BIE0 extern _TXBIE extern _B0CON extern _B0SIDH extern _B0SIDL extern _B0EIDH extern _B0EIDL extern _B0DLC extern _B0D0 extern _B0D1 extern _B0D2 extern _B0D3 extern _B0D4 extern _B0D5 extern _B0D6 extern _B0D7 extern _CANSTAT_RO9 extern _CANCON_RO9 extern _B1CON extern _B1SIDH extern _B1SIDL extern _B1EIDH extern _B1EIDL extern _B1DLC extern _B1D0 extern _B1D1 extern _B1D2 extern _B1D3 extern _B1D4 extern _B1D5 extern _B1D6 extern _B1D7 extern _CANSTAT_RO8 extern _CANCON_RO8 extern _B2CON extern _B2SIDH extern _B2SIDL extern _B2EIDH extern _B2EIDL extern _B2DLC extern _B2D0 extern _B2D1 extern _B2D2 extern _B2D3 extern _B2D4 extern _B2D5 extern _B2D6 extern _B2D7 extern _CANSTAT_RO7 extern _CANCON_RO7 extern _B3CON extern _B3SIDH extern _B3SIDL extern _B3EIDH extern _B3EIDL extern _B3DLC extern _B3D0 extern _B3D1 extern _B3D2 extern _B3D3 extern _B3D4 extern _B3D5 extern _B3D6 extern _B3D7 extern _CANSTAT_RO6 extern _CANCON_RO6 extern _B4CON extern _B4SIDH extern _B4SIDL extern _B4EIDH extern _B4EIDL extern _B4DLC extern _B4D0 extern _B4D1 extern _B4D2 extern _B4D3 extern _B4D4 extern _B4D5 extern _B4D6 extern _B4D7 extern _CANSTAT_RO5 extern _CANCON_RO5 extern _B5CON extern _B5SIDH extern _B5SIDL extern _B5EIDH extern _B5EIDL extern _B5DLC extern _B5D0 extern _B5D1 extern _B5D2 extern _B5D3 extern _B5D4 extern _B5D5 extern _B5D6 extern _B5D7 extern _CANSTAT_RO4 extern _CANCON_RO4 extern _RXF0SIDH extern _RXF0SIDL extern _RXF0EIDH extern _RXF0EIDL extern _RXF1SIDH extern _RXF1SIDL extern _RXF1EIDH extern _RXF1EIDL extern _RXF2SIDH extern _RXF2SIDL extern _RXF2EIDH extern _RXF2EIDL extern _RXF3SIDH extern _RXF3SIDL extern _RXF3EIDH extern _RXF3EIDL extern _RXF4SIDH extern _RXF4SIDL extern _RXF4EIDH extern _RXF4EIDL extern _RXF5SIDH extern _RXF5SIDL extern _RXF5EIDH extern _RXF5EIDL extern _RXM0SIDH extern _RXM0SIDL extern _RXM0EIDH extern _RXM0EIDL extern _RXM1SIDH extern _RXM1SIDL extern _RXM1EIDH extern _RXM1EIDL extern _TXB2CON extern _TXB2SIDH extern _TXB2SIDL extern _TXB2EIDH extern _TXB2EIDL extern _TXB2DLC extern _TXB2D0 extern _TXB2D1 extern _TXB2D2 extern _TXB2D3 extern _TXB2D4 extern _TXB2D5 extern _TXB2D6 extern _TXB2D7 extern _CANSTAT_RO3 extern _CANCON_RO3 extern _TXB1CON extern _TXB1SIDH extern _TXB1SIDL extern _TXB1EIDH extern _TXB1EIDL extern _TXB1DLC extern _TXB1D0 extern _TXB1D1 extern _TXB1D2 extern _TXB1D3 extern _TXB1D4 extern _TXB1D5 extern _TXB1D6 extern _TXB1D7 extern _CANSTAT_RO2 extern _CANCON_RO2 extern _TXB0CON extern _TXB0SIDH extern _TXB0SIDL extern _TXB0EIDH extern _TXB0EIDL extern _TXB0DLC extern _TXB0D0 extern _TXB0D1 extern _TXB0D2 extern _TXB0D3 extern _TXB0D4 extern _TXB0D5 extern _TXB0D6 extern _TXB0D7 extern _CANSTAT_RO1 extern _CANCON_RO1 extern _RXB1CON extern _RXB1SIDH extern _RXB1SIDL extern _RXB1EIDH extern _RXB1EIDL extern _RXB1DLC extern _RXB1D0 extern _RXB1D1 extern _RXB1D2 extern _RXB1D3 extern _RXB1D4 extern _RXB1D5 extern _RXB1D6 extern _RXB1D7 extern _CANSTAT_RO0 extern _CANCON_RO0 extern _RXB0CON extern _RXB0SIDH extern _RXB0SIDL extern _RXB0EIDH extern _RXB0EIDL extern _RXB0DLC extern _RXB0D0 extern _RXB0D1 extern _RXB0D2 extern _RXB0D3 extern _RXB0D4 extern _RXB0D5 extern _RXB0D6 extern _RXB0D7 extern _CANSTAT extern _CANCON extern _BRGCON1 extern _BRGCON2 extern _BRGCON3 extern _CIOCON extern _COMSTAT extern _RXERRCNT extern _TXERRCNT extern _ECANCON extern _PORTA extern _PORTB extern _PORTC extern _LATA extern _LATB extern _LATC extern _DDRA extern _TRISA extern _DDRB extern _TRISB extern _DDRC extern _TRISC extern _OSCTUNE extern _PIE1 extern _PIR1 extern _IPR1 extern _PIE2 extern _PIR2 extern _IPR2 extern _PIE3 extern _PIR3 extern _IPR3 extern _EECON1 extern _EECON2 extern _EEDATA extern _EEADR extern _EEADRH extern _RCSTA extern _TXSTA extern _TXREG extern _RCREG extern _SPBRG extern _SPBRGH extern _T3CON extern _TMR3L extern _TMR3H extern _BAUDCON 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 _usart_open extern _usart_busy extern _usart_getc extern _usart_putc extern __mulint extern __divslong ;-------------------------------------------------------- ; Equates to used internal registers ;-------------------------------------------------------- STATUS equ 0xfd8 PCL equ 0xff9 PCLATH equ 0xffa PCLATU equ 0xffb WREG equ 0xfe8 FSR0L equ 0xfe9 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 r0x0c res 1 r0x0d res 1 r0x0e res 1 udata_gpio_test_0 udata _main_serial_setting_1_1 res 6 ;-------------------------------------------------------- ; interrupt vector ;-------------------------------------------------------- ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- ; I code from now on! ; ; Starting pCode block S_gpio_test__main code _main: ; .line 11; gpio_test.c int counter = 0; CLRF r0x00 CLRF r0x01 ; .line 16; gpio_test.c serial_setting.baud = SERIAL_BAUD_57600; MOVLW 0x08 BANKSEL _main_serial_setting_1_1 MOVWF _main_serial_setting_1_1, B BANKSEL (_main_serial_setting_1_1 + 1) CLRF (_main_serial_setting_1_1 + 1), B ; .line 17; gpio_test.c serial_setting.stopbit = 1; MOVLW 0x01 BANKSEL (_main_serial_setting_1_1 + 3) MOVWF (_main_serial_setting_1_1 + 3), B ; .line 20; gpio_test.c SERIAL_initialize(uart, &serial_setting); MOVLW HIGH(_main_serial_setting_1_1) MOVWF r0x03 MOVLW LOW(_main_serial_setting_1_1) MOVWF r0x02 MOVLW 0x80 MOVWF r0x04 MOVF r0x04, W MOVWF POSTDEC1 MOVF r0x03, W MOVWF POSTDEC1 MOVF r0x02, W MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 CALL _SERIAL_initialize MOVLW 0x05 ADDWF FSR1L, F ; .line 22; gpio_test.c GPIO_set_directions_B(portb_dir); MOVLW 0xfc MOVWF POSTDEC1 CALL _GPIO_set_directions_B INCF FSR1L, F _00483_DS_: ; .line 28; gpio_test.c counter++; INCF r0x00, F BTFSC STATUS, 0 INCF r0x01, F ; .line 30; gpio_test.c if(counter > 15000) MOVF r0x01, W ADDLW 0x80 ADDLW 0x46 BNZ _00490_DS_ MOVLW 0x99 SUBWF r0x00, W _00490_DS_: BNC _00478_DS_ ; .line 32; gpio_test.c GPIO_out_low(GPIO_PIN_B0); MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x08 MOVWF POSTDEC1 CALL _GPIO_out_low MOVLW 0x02 ADDWF FSR1L, F ; .line 33; gpio_test.c GPIO_out_low(GPIO_PIN_B1); MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x09 MOVWF POSTDEC1 CALL _GPIO_out_low MOVLW 0x02 ADDWF FSR1L, F BRA _00479_DS_ _00478_DS_: ; .line 38; gpio_test.c GPIO_out_high(GPIO_PIN_B0); MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x08 MOVWF POSTDEC1 CALL _GPIO_out_high MOVLW 0x02 ADDWF FSR1L, F ; .line 39; gpio_test.c GPIO_out_high(GPIO_PIN_B1); MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x09 MOVWF POSTDEC1 CALL _GPIO_out_high MOVLW 0x02 ADDWF FSR1L, F _00479_DS_: ; .line 41; gpio_test.c if(counter == 30000) MOVF r0x00, W XORLW 0x30 BNZ _00491_DS_ MOVF r0x01, W XORLW 0x75 BZ _00492_DS_ _00491_DS_: BRA _00483_DS_ _00492_DS_: ; .line 43; gpio_test.c counter = 0; CLRF r0x00 CLRF r0x01 BRA _00483_DS_ RETURN ; ; Starting pCode block S_gpio_test__GPIO_out_float code _GPIO_out_float: ; .line 180; gpio.c void GPIO_out_float( GPIO_pin pin) // set as input? 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 ; .line 182; gpio.c if( pin < 8) MOVLW 0x00 SUBWF r0x01, W BNZ _00458_DS_ MOVLW 0x08 SUBWF r0x00, W _00458_DS_: BC _00448_DS_ ; .line 184; gpio.c TRISA = TRISA | (0x01 << pin); MOVLW 0x01 MOVWF r0x02 CLRF r0x03 MOVF r0x00, W BZ _00459_DS_ NEGF WREG BCF STATUS, 0 _00460_DS_: RLCF r0x02, F RLCF r0x03, F ADDLW 0x01 BNC _00460_DS_ _00459_DS_: MOVF r0x02, W IORWF _TRISA, F _00448_DS_: ; .line 186; gpio.c if(8 <= pin < 16) MOVLW 0x00 SUBWF r0x01, W BNZ _00463_DS_ MOVLW 0x08 SUBWF r0x00, W _00463_DS_: BTG STATUS, 0 CLRF r0x02 RLCF r0x02, F MOVF r0x02, W BSF STATUS, 0 TSTFSZ WREG BCF STATUS, 0 CLRF r0x02 RLCF r0x02, F MOVF r0x02, W ADDLW 0x80 ADDLW 0x70 BC _00450_DS_ ; .line 188; gpio.c TRISB = TRISB | (0x01 << (pin-8)); MOVF r0x00, W MOVWF r0x02 MOVLW 0xf8 ADDWF r0x02, F MOVLW 0x01 MOVWF r0x03 MOVF r0x02, W BZ _00465_DS_ NEGF WREG BCF STATUS, 0 _00466_DS_: RLCF r0x03, F ADDLW 0x01 BNC _00466_DS_ _00465_DS_: MOVF r0x03, W IORWF _TRISB, F _00450_DS_: ; .line 190; gpio.c if(16 <= pin < 24) MOVLW 0x00 SUBWF r0x01, W BNZ _00469_DS_ MOVLW 0x10 SUBWF r0x00, W _00469_DS_: BTG STATUS, 0 CLRF r0x02 RLCF r0x02, F MOVF r0x02, W BSF STATUS, 0 TSTFSZ WREG BCF STATUS, 0 CLRF r0x02 RLCF r0x02, F MOVF r0x02, W ADDLW 0x80 ADDLW 0x68 BC _00453_DS_ ; .line 192; gpio.c TRISC = TRISC | (0x01 << (pin-16)); MOVLW 0xf0 ADDWF r0x00, F MOVLW 0x01 MOVWF r0x01 MOVF r0x00, W BZ _00471_DS_ NEGF WREG BCF STATUS, 0 _00472_DS_: RLCF r0x01, F ADDLW 0x01 BNC _00472_DS_ _00471_DS_: MOVF r0x01, W IORWF _TRISC, F _00453_DS_: MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_out_toggle code _GPIO_out_toggle: ; .line 158; gpio.c void GPIO_out_toggle( GPIO_pin pin) 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 ; .line 160; gpio.c if( pin < 8) MOVLW 0x00 SUBWF r0x01, W BNZ _00428_DS_ MOVLW 0x08 SUBWF r0x00, W _00428_DS_: BC _00418_DS_ ; .line 162; gpio.c LATA = LATA ^ (0x01 << pin); MOVLW 0x01 MOVWF r0x02 CLRF r0x03 MOVF r0x00, W BZ _00429_DS_ NEGF WREG BCF STATUS, 0 _00430_DS_: RLCF r0x02, F RLCF r0x03, F ADDLW 0x01 BNC _00430_DS_ _00429_DS_: MOVF r0x02, W XORWF _LATA, F _00418_DS_: ; .line 164; gpio.c if(8 <= pin < 16) MOVLW 0x00 SUBWF r0x01, W BNZ _00433_DS_ MOVLW 0x08 SUBWF r0x00, W _00433_DS_: BTG STATUS, 0 CLRF r0x02 RLCF r0x02, F MOVF r0x02, W BSF STATUS, 0 TSTFSZ WREG BCF STATUS, 0 CLRF r0x02 RLCF r0x02, F MOVF r0x02, W ADDLW 0x80 ADDLW 0x70 BC _00420_DS_ ; .line 166; gpio.c LATB = LATB ^ (0x01 << (pin-8)); MOVF r0x00, W MOVWF r0x02 MOVLW 0xf8 ADDWF r0x02, F MOVLW 0x01 MOVWF r0x03 MOVF r0x02, W BZ _00435_DS_ NEGF WREG BCF STATUS, 0 _00436_DS_: RLCF r0x03, F ADDLW 0x01 BNC _00436_DS_ _00435_DS_: MOVF r0x03, W XORWF _LATB, F _00420_DS_: ; .line 168; gpio.c if(16 <= pin < 24) MOVLW 0x00 SUBWF r0x01, W BNZ _00439_DS_ MOVLW 0x10 SUBWF r0x00, W _00439_DS_: BTG STATUS, 0 CLRF r0x02 RLCF r0x02, F MOVF r0x02, W BSF STATUS, 0 TSTFSZ WREG BCF STATUS, 0 CLRF r0x02 RLCF r0x02, F MOVF r0x02, W ADDLW 0x80 ADDLW 0x68 BC _00423_DS_ ; .line 170; gpio.c LATC = LATC ^ (0x01 << (pin-16)); MOVLW 0xf0 ADDWF r0x00, F MOVLW 0x01 MOVWF r0x01 MOVF r0x00, W BZ _00441_DS_ NEGF WREG BCF STATUS, 0 _00442_DS_: RLCF r0x01, F ADDLW 0x01 BNC _00442_DS_ _00441_DS_: MOVF r0x01, W XORWF _LATC, F _00423_DS_: MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_out_low code _GPIO_out_low: ; .line 122; gpio.c void GPIO_out_low( GPIO_pin pin) 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 ; .line 127; gpio.c if( pin < 8) MOVLW 0x00 SUBWF r0x01, W BNZ _00398_DS_ MOVLW 0x08 SUBWF r0x00, W _00398_DS_: BC _00384_DS_ ; .line 129; gpio.c state = LATA & ((0x01 << (pin)) ^ 0xff); MOVLW 0x01 MOVWF r0x02 CLRF r0x03 MOVF r0x00, W BZ _00399_DS_ NEGF WREG BCF STATUS, 0 _00400_DS_: RLCF r0x02, F RLCF r0x03, F ADDLW 0x01 BNC _00400_DS_ _00399_DS_: MOVLW 0xff XORWF r0x02, F MOVF _LATA, W ANDWF r0x02, F ; .line 130; gpio.c LATA = state; MOVFF r0x02, _LATA _00384_DS_: ; .line 133; gpio.c if(8 <= pin && pin < 16) MOVLW 0x00 SUBWF r0x01, W BNZ _00403_DS_ MOVLW 0x08 SUBWF r0x00, W _00403_DS_: BNC _00386_DS_ MOVLW 0x00 SUBWF r0x01, W BNZ _00404_DS_ MOVLW 0x10 SUBWF r0x00, W _00404_DS_: BC _00386_DS_ ; .line 136; gpio.c state = LATB & ((0x01 << (pin-8)) ^ 0xff); MOVF r0x00, W MOVWF r0x03 MOVLW 0xf8 ADDWF r0x03, F MOVLW 0x01 MOVWF r0x04 MOVF r0x03, W BZ _00405_DS_ NEGF WREG BCF STATUS, 0 _00406_DS_: RLCF r0x04, F ADDLW 0x01 BNC _00406_DS_ _00405_DS_: COMF r0x04, W MOVWF r0x03 MOVF r0x03, W ANDWF _LATB, W MOVWF r0x02 ; .line 137; gpio.c LATB = state; MOVFF r0x02, _LATB _00386_DS_: ; .line 141; gpio.c if(16 <= pin && pin < 24) MOVLW 0x00 SUBWF r0x01, W BNZ _00409_DS_ MOVLW 0x10 SUBWF r0x00, W _00409_DS_: BNC _00391_DS_ MOVLW 0x00 SUBWF r0x01, W BNZ _00410_DS_ MOVLW 0x18 SUBWF r0x00, W _00410_DS_: BC _00391_DS_ ; .line 143; gpio.c state = LATC & ((0x01 << (pin-16)) ^ 0xff); MOVLW 0xf0 ADDWF r0x00, F MOVLW 0x01 MOVWF r0x01 MOVF r0x00, W BZ _00411_DS_ NEGF WREG BCF STATUS, 0 _00412_DS_: RLCF r0x01, F ADDLW 0x01 BNC _00412_DS_ _00411_DS_: COMF r0x01, W MOVWF r0x00 MOVF r0x00, W ANDWF _LATC, F _00391_DS_: ; .line 144; gpio.c LATC = state; MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_out_high code _GPIO_out_high: ; .line 86; gpio.c void GPIO_out_high( GPIO_pin pin) 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 ; .line 90; gpio.c if( pin < 8) MOVLW 0x00 SUBWF r0x01, W BNZ _00366_DS_ MOVLW 0x08 SUBWF r0x00, W _00366_DS_: BC _00352_DS_ ; .line 92; gpio.c state = LATA | (0x01 << (pin)); MOVLW 0x01 MOVWF r0x02 CLRF r0x03 MOVF r0x00, W BZ _00367_DS_ NEGF WREG BCF STATUS, 0 _00368_DS_: RLCF r0x02, F RLCF r0x03, F ADDLW 0x01 BNC _00368_DS_ _00367_DS_: MOVF _LATA, W IORWF r0x02, F ; .line 93; gpio.c LATA = state; MOVFF r0x02, _LATA _00352_DS_: ; .line 97; gpio.c if(8 <= pin && pin < 16) MOVLW 0x00 SUBWF r0x01, W BNZ _00370_DS_ MOVLW 0x08 SUBWF r0x00, W _00370_DS_: BNC _00354_DS_ MOVLW 0x00 SUBWF r0x01, W BNZ _00371_DS_ MOVLW 0x10 SUBWF r0x00, W _00371_DS_: BC _00354_DS_ ; .line 100; gpio.c state = LATB | (0x01 << (pin-8)); MOVF r0x00, W MOVWF r0x03 MOVLW 0xf8 ADDWF r0x03, F MOVLW 0x01 MOVWF r0x04 MOVF r0x03, W BZ _00372_DS_ NEGF WREG BCF STATUS, 0 _00373_DS_: RLCF r0x04, F ADDLW 0x01 BNC _00373_DS_ _00372_DS_: MOVF r0x04, W IORWF _LATB, W MOVWF r0x02 ; .line 101; gpio.c LATB = state; MOVFF r0x02, _LATB _00354_DS_: ; .line 104; gpio.c if( 16 <= pin && pin < 24) MOVLW 0x00 SUBWF r0x01, W BNZ _00375_DS_ MOVLW 0x10 SUBWF r0x00, W _00375_DS_: BNC _00359_DS_ MOVLW 0x00 SUBWF r0x01, W BNZ _00376_DS_ MOVLW 0x18 SUBWF r0x00, W _00376_DS_: BC _00359_DS_ ; .line 106; gpio.c state = LATC | (0x01 << (pin-16)); MOVLW 0xf0 ADDWF r0x00, F MOVLW 0x01 MOVWF r0x01 MOVF r0x00, W BZ _00377_DS_ NEGF WREG BCF STATUS, 0 _00378_DS_: RLCF r0x01, F ADDLW 0x01 BNC _00378_DS_ _00377_DS_: MOVF r0x01, W IORWF _LATC, F _00359_DS_: ; .line 107; gpio.c LATC = state; MOVFF PREINC1, r0x04 MOVFF PREINC1, r0x03 MOVFF PREINC1, r0x02 MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_in_port code _GPIO_in_port: ; .line 72; gpio.c GPIO_value GPIO_in_port( GPIO_port p ) { MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 ; .line 73; gpio.c switch (p) { MOVF r0x00, W BZ _00328_DS_ MOVF r0x00, W XORLW 0x08 BZ _00329_DS_ MOVF r0x00, W XORLW 0x10 BZ _00330_DS_ BRA _00336_DS_ _00328_DS_: ; .line 74; gpio.c case GPIO_PORT(0): return GPIO_in_port_A(); break; CALL _GPIO_in_port_A MOVWF r0x00 MOVF r0x00, W BRA _00336_DS_ _00329_DS_: ; .line 75; gpio.c case GPIO_PORT(1): return GPIO_in_port_B(); break; CALL _GPIO_in_port_B MOVWF r0x00 MOVF r0x00, W BRA _00336_DS_ _00330_DS_: ; .line 76; gpio.c case GPIO_PORT(2): return GPIO_in_port_C(); break; CALL _GPIO_in_port_C MOVWF r0x00 MOVF r0x00, W _00336_DS_: ; .line 82; gpio.c }; MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_in_port_C code _GPIO_in_port_C: ; .line 67; gpio.c GPIO_value GPIO_in_port_C( void ) {return PORTC; } MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVF _PORTC, W MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_in_port_B code _GPIO_in_port_B: ; .line 65; gpio.c GPIO_value GPIO_in_port_B( void ) {return PORTB; } MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVF _PORTB, W MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_in_port_A code _GPIO_in_port_A: ; .line 63; gpio.c GPIO_value GPIO_in_port_A( void ) {return PORTA; } MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVF _PORTA, W MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_out_port code _GPIO_out_port: ; .line 49; gpio.c void GPIO_out_port( GPIO_port p, GPIO_value v) { MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 ; .line 50; gpio.c switch (p) { MOVF r0x00, W BZ _00290_DS_ MOVF r0x00, W XORLW 0x08 BZ _00291_DS_ MOVF r0x00, W XORLW 0x10 BZ _00292_DS_ BRA _00298_DS_ _00290_DS_: ; .line 51; gpio.c case GPIO_PORT(0): GPIO_out_port_A(v); break; MOVF r0x01, W MOVWF POSTDEC1 CALL _GPIO_out_port_A INCF FSR1L, F BRA _00298_DS_ _00291_DS_: ; .line 52; gpio.c case GPIO_PORT(1): GPIO_out_port_B(v); break; MOVF r0x01, W MOVWF POSTDEC1 CALL _GPIO_out_port_B INCF FSR1L, F BRA _00298_DS_ _00292_DS_: ; .line 53; gpio.c case GPIO_PORT(2): GPIO_out_port_C(v); break; MOVF r0x01, W MOVWF POSTDEC1 CALL _GPIO_out_port_C INCF FSR1L, F _00298_DS_: ; .line 59; gpio.c }; MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_out_port_C code _GPIO_out_port_C: ; .line 44; gpio.c void GPIO_out_port_C( GPIO_value v) {LATC = v;} MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVLW 0x02 MOVFF PLUSW2, _LATC MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_out_port_B code _GPIO_out_port_B: ; .line 42; gpio.c void GPIO_out_port_B( GPIO_value v) {LATB = v;} MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVLW 0x02 MOVFF PLUSW2, _LATB MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_out_port_A code _GPIO_out_port_A: ; .line 40; gpio.c void GPIO_out_port_A( GPIO_value v) {LATA = v;} MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVLW 0x02 MOVFF PLUSW2, _LATA MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_set_directions code _GPIO_set_directions: ; .line 25; gpio.c void GPIO_set_directions( GPIO_port p, GPIO_value d) { MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 ; .line 26; gpio.c switch (p) { MOVF r0x00, W BZ _00252_DS_ MOVF r0x00, W XORLW 0x08 BZ _00253_DS_ MOVF r0x00, W XORLW 0x10 BZ _00254_DS_ BRA _00260_DS_ _00252_DS_: ; .line 27; gpio.c case GPIO_PORT(0): GPIO_set_directions_A(d); break; MOVF r0x01, W MOVWF POSTDEC1 CALL _GPIO_set_directions_A INCF FSR1L, F BRA _00260_DS_ _00253_DS_: ; .line 28; gpio.c case GPIO_PORT(1): GPIO_set_directions_B(d); break; MOVF r0x01, W MOVWF POSTDEC1 CALL _GPIO_set_directions_B INCF FSR1L, F BRA _00260_DS_ _00254_DS_: ; .line 29; gpio.c case GPIO_PORT(2): GPIO_set_directions_C(d); break; MOVF r0x01, W MOVWF POSTDEC1 CALL _GPIO_set_directions_C INCF FSR1L, F _00260_DS_: ; .line 35; gpio.c }; MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_set_directions_C code _GPIO_set_directions_C: ; .line 18; gpio.c void GPIO_set_directions_C( GPIO_value d) { TRISC = d; } MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVLW 0x02 MOVFF PLUSW2, _TRISC MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_set_directions_B code _GPIO_set_directions_B: ; .line 16; gpio.c void GPIO_set_directions_B( GPIO_value d) { TRISB = d; } MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVLW 0x02 MOVFF PLUSW2, _TRISB MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_set_directions_A code _GPIO_set_directions_A: ; .line 14; gpio.c void GPIO_set_directions_A(GPIO_value d) { TRISA = d; } MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVLW 0x02 MOVFF PLUSW2, _TRISA MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_runOnce code _GPIO_runOnce: ; .line 8; gpio.c void GPIO_runOnce( void ){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L ; .line 9; gpio.c } MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__GPIO_init code _GPIO_init: ; .line 5; gpio.c int GPIO_init( void ){ MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L ; .line 6; gpio.c return 0; CLRF PRODL CLRF WREG MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__SERIAL_writable code _SERIAL_writable: ; .line 173; serial.c bool SERIAL_writable(SERIAL_handle h) MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 ; .line 175; serial.c if(h==0) MOVF r0x00, W IORWF r0x01, W BNZ _00221_DS_ ; .line 177; serial.c if(usart_busy()) CALL _usart_busy MOVWF r0x00 MOVF r0x00, W BZ _00218_DS_ ; .line 179; serial.c return 0; // not writable CLRF WREG BRA _00222_DS_ _00218_DS_: ; .line 183; serial.c return 1; // writable MOVLW 0x01 BRA _00222_DS_ _00221_DS_: ; .line 187; serial.c return 0; CLRF WREG _00222_DS_: MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__SERIAL_readable code _SERIAL_readable: ; .line 155; serial.c bool SERIAL_readable(SERIAL_handle h) MOVFF FSR2L, POSTDEC1 MOVFF FSR1L, FSR2L MOVFF r0x00, POSTDEC1 MOVFF r0x01, POSTDEC1 MOVLW 0x02 MOVFF PLUSW2, r0x00 MOVLW 0x03 MOVFF PLUSW2, r0x01 ; .line 157; serial.c if(h == 0) //uart MOVF r0x00, W IORWF r0x01, W BNZ _00198_DS_ ; .line 159; serial.c if(PIR1bits.RCIF)return 1; BTFSS _PIR1bits, 5 BRA _00195_DS_ MOVLW 0x01 BRA _00204_DS_ _00195_DS_: ; .line 160; serial.c else return 0; CLRF WREG BRA _00204_DS_ _00198_DS_: ; .line 162; serial.c if(h==1) //SPI MOVF r0x00, W XORLW 0x01 BNZ _00210_DS_ MOVF r0x01, W BZ _00211_DS_ _00210_DS_: BRA _00203_DS_ _00211_DS_: ; .line 164; serial.c if(SSPSTAT & 0x01) return 1; BTFSS _SSPSTAT, 0 BRA _00200_DS_ MOVLW 0x01 BRA _00204_DS_ _00200_DS_: ; .line 165; serial.c else return 0; CLRF WREG BRA _00204_DS_ _00203_DS_: ; .line 168; serial.c return 0; CLRF WREG _00204_DS_: MOVFF PREINC1, r0x01 MOVFF PREINC1, r0x00 MOVFF PREINC1, FSR2L RETURN ; ; Starting pCode block S_gpio_test__SERIAL_write code _SERIAL_write: ; .line 142; serial.c void SERIAL_write(SERIAL_handle h,SERIAL_datatype *t, int n) 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 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 ; .line 146; serial.c if(h==0 || h==1) // will spi pose a problem by overwriting previous data?. MOVF r0x00, W IORWF r0x01, W BZ _00185_DS_ MOVF r0x00, W XORLW 0x01 BNZ _00187_DS_ MOVF r0x01, W BZ _00185_DS_ _00187_DS_: BRA _00181_DS_ _00185_DS_: ; .line 148; serial.c for( i = 0; ibaud) MOVFF r0x02, FSR0L MOVFF r0x03, PRODL MOVF r0x04, W CALL __gptrget2 MOVWF r0x05 MOVFF PRODL, r0x06 MOVLW 0x00 SUBWF r0x06, W BNZ _00130_DS_ MOVLW 0x0a SUBWF r0x05, W _00130_DS_: BTFSC STATUS, 0 BRA _00115_DS_ MOVFF r0x0d, POSTDEC1 MOVFF r0x0e, POSTDEC1 CLRF r0x0e RLCF r0x05, W RLCF r0x0e, F RLCF WREG, W RLCF r0x0e, F ANDLW 0xfc MOVWF r0x0d MOVLW UPPER(_00131_DS_) MOVWF PCLATU MOVLW HIGH(_00131_DS_) MOVWF PCLATH MOVLW LOW(_00131_DS_) ADDWF r0x0d, F MOVF r0x0e, W ADDWFC PCLATH, F BTFSC STATUS, 0 INCF PCLATU, F MOVF r0x0d, W MOVFF PREINC1, r0x0e MOVFF PREINC1, r0x0d MOVWF PCL _00131_DS_: GOTO _00105_DS_ GOTO _00106_DS_ GOTO _00107_DS_ GOTO _00108_DS_ GOTO _00109_DS_ GOTO _00110_DS_ GOTO _00111_DS_ GOTO _00112_DS_ GOTO _00113_DS_ GOTO _00114_DS_ _00105_DS_: ; .line 16; serial.c uart_multiplier = 1; MOVLW 0x01 MOVWF r0x05 CLRF r0x06 ; .line 17; serial.c break; BRA _00116_DS_ _00106_DS_: ; .line 19; serial.c uart_multiplier = 2; MOVLW 0x02 MOVWF r0x05 CLRF r0x06 ; .line 20; serial.c break; BRA _00116_DS_ _00107_DS_: ; .line 22; serial.c uart_multiplier = 4; MOVLW 0x04 MOVWF r0x05 CLRF r0x06 ; .line 23; serial.c break; BRA _00116_DS_ _00108_DS_: ; .line 25; serial.c uart_multiplier = 8; MOVLW 0x08 MOVWF r0x05 CLRF r0x06 ; .line 26; serial.c break; BRA _00116_DS_ _00109_DS_: ; .line 28; serial.c uart_multiplier = 16; MOVLW 0x10 MOVWF r0x05 CLRF r0x06 ; .line 29; serial.c break; BRA _00116_DS_ _00110_DS_: ; .line 31; serial.c uart_multiplier = 32; MOVLW 0x20 MOVWF r0x05 CLRF r0x06 ; .line 32; serial.c break; BRA _00116_DS_ _00111_DS_: ; .line 34; serial.c uart_multiplier = 64; MOVLW 0x40 MOVWF r0x05 CLRF r0x06 ; .line 35; serial.c break; BRA _00116_DS_ _00112_DS_: ; .line 37; serial.c uart_multiplier = 128; MOVLW 0x80 MOVWF r0x05 CLRF r0x06 ; .line 38; serial.c break; BRA _00116_DS_ _00113_DS_: ; .line 40; serial.c uart_multiplier = 192; MOVLW 0xc0 MOVWF r0x05 CLRF r0x06 ; .line 41; serial.c break; BRA _00116_DS_ _00114_DS_: ; .line 43; serial.c uart_multiplier = 256; CLRF r0x05 MOVLW 0x01 MOVWF r0x06 ; .line 44; serial.c break; BRA _00116_DS_ _00115_DS_: ; .line 46; serial.c uart_multiplier = 192; MOVLW 0xc0 MOVWF r0x05 CLRF r0x06 _00116_DS_: ; .line 51; serial.c BAUDCONbits.BRG16 = 1; // use SPBRGH BSF _BAUDCONbits, 3 ; .line 54; serial.c BAUD_SPBRG = ((CLOCK_FREQ+2*300*uart_multiplier)/(300*uart_multiplier)/4) - 1; MOVF r0x06, W MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVLW 0x02 MOVWF POSTDEC1 MOVLW 0x58 MOVWF POSTDEC1 CALL __mulint MOVWF r0x07 MOVFF PRODL, r0x08 MOVLW 0x04 ADDWF FSR1L, F CLRF r0x09 CLRF r0x0a MOVLW 0x2d ADDWF r0x08, F MOVLW 0x31 ADDWFC r0x09, F MOVLW 0x01 ADDWFC r0x0a, F MOVF r0x06, W MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVLW 0x01 MOVWF POSTDEC1 MOVLW 0x2c MOVWF POSTDEC1 CALL __mulint MOVWF r0x05 MOVFF PRODL, r0x06 MOVLW 0x04 ADDWF FSR1L, F CLRF r0x0b CLRF r0x0c MOVF r0x0c, W MOVWF POSTDEC1 MOVF r0x0b, W MOVWF POSTDEC1 MOVF r0x06, W MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVF r0x0a, W MOVWF POSTDEC1 MOVF r0x09, W MOVWF POSTDEC1 MOVF r0x08, W MOVWF POSTDEC1 MOVF r0x07, W MOVWF POSTDEC1 CALL __divslong MOVWF r0x05 MOVFF PRODL, r0x06 MOVFF PRODH, r0x07 MOVFF FSR0L, r0x08 MOVLW 0x08 ADDWF FSR1L, F MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x00 MOVWF POSTDEC1 MOVLW 0x04 MOVWF POSTDEC1 MOVF r0x08, W MOVWF POSTDEC1 MOVF r0x07, W MOVWF POSTDEC1 MOVF r0x06, W MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 CALL __divslong MOVWF r0x05 MOVFF PRODL, r0x06 MOVFF PRODH, r0x07 MOVFF FSR0L, r0x08 MOVLW 0x08 ADDWF FSR1L, F MOVLW 0xff ADDWF r0x05, F MOVLW 0xff ADDWFC r0x06, F MOVLW 0xff ADDWFC r0x07, F MOVLW 0xff ADDWFC r0x08, F ; .line 60; serial.c USART_BRGH_HIGH, BAUD_SPBRG); MOVF r0x06, W MOVWF POSTDEC1 MOVF r0x05, W MOVWF POSTDEC1 MOVLW 0x3c CALL _usart_open MOVLW 0x02 ADDWF FSR1L, F ; .line 63; serial.c RCSTAbits.SPEN = 1; //enable uart BSF _RCSTAbits, 7 ; .line 64; serial.c RCSTAbits.CREN = 1; // continous receive enable BSF _RCSTAbits, 4 ; .line 65; serial.c usart_putc(13); MOVLW 0x0d CALL _usart_putc ; .line 66; serial.c return 1; CLRF PRODL MOVLW 0x01 BRA _00124_DS_ _00118_DS_: ; .line 72; serial.c if(h==1) // SPI MOVF r0x00, W XORLW 0x01 BNZ _00132_DS_ MOVF r0x01, W BZ _00133_DS_ _00132_DS_: BRA _00123_DS_ _00133_DS_: ; .line 75; serial.c if(ucon->mstr_slv) MOVLW 0x04 ADDWF r0x02, F MOVLW 0x00 ADDWFC r0x03, F MOVLW 0x00 ADDWFC r0x04, F MOVFF r0x02, FSR0L MOVFF r0x03, PRODL MOVF r0x04, W CALL __gptrget1 MOVWF r0x02 MOVF r0x02, W BZ _00120_DS_ ; .line 78; serial.c TRISCbits.TRISC5 = 0; // serial data out SDO BCF _TRISCbits, 5 ; .line 79; serial.c TRISCbits.TRISC4 = 1; //SDI BSF _TRISCbits, 4 ; .line 80; serial.c TRISCbits.TRISC3 = 0; // SCK BCF _TRISCbits, 3 ; .line 82; serial.c SSPSTAT = 0; // set data sampled at middle & CKE = 0 CLRF _SSPSTAT ; .line 83; serial.c SSPCON1 = 0x21; // Master mode Fosc/16, enable SPI MOVLW 0x21 MOVWF _SSPCON1 BRA _00121_DS_ _00120_DS_: ; .line 88; serial.c TRISCbits.TRISC5 = 0; // serial data out SDO BCF _TRISCbits, 5 ; .line 89; serial.c TRISCbits.TRISC4 = 1; //SDI BSF _TRISCbits, 4 ; .line 90; serial.c TRISCbits.TRISC3 = 1; // SCK set as input for slave BSF _TRISCbits, 3 ; .line 92; serial.c SSPSTAT = 0; // set data sampled at middle & CKE = 0 CLRF _SSPSTAT ; .line 93; serial.c SSPCON1 = 0x25; // Slave mode,SS disabled enable SPI MOVLW 0x25 MOVWF _SSPCON1 _00121_DS_: ; .line 96; serial.c return 1; CLRF PRODL MOVLW 0x01 BRA _00124_DS_ _00123_DS_: ; .line 102; serial.c return 0; // not able to find the correct serial channel CLRF PRODL CLRF WREG _00124_DS_: MOVFF PREINC1, r0x0c 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 ; Statistics: ; code size: 2832 (0x0b10) bytes ( 2.16%) ; 1416 (0x0588) words ; udata size: 6 (0x0006) bytes ( 0.16%) ; access size: 15 (0x000f) bytes end