995 lines
19 KiB
NASM
Executable File
995 lines
19 KiB
NASM
Executable File
;--------------------------------------------------------
|
|
; File Created by SDCC : free open source ISO C Compiler
|
|
; Version 4.5.0 #15242 (Linux)
|
|
;--------------------------------------------------------
|
|
; PIC16 port for the Microchip 16-bit core micros
|
|
;--------------------------------------------------------
|
|
list p=18f4550
|
|
radix dec
|
|
CONFIG XINST=OFF
|
|
CONFIG FOSC=HS
|
|
CONFIG WDT=OFF
|
|
CONFIG LVP=OFF
|
|
CONFIG MCLRE=OFF
|
|
|
|
|
|
;--------------------------------------------------------
|
|
; public variables in this module
|
|
;--------------------------------------------------------
|
|
global _isr
|
|
global _tmr_isr
|
|
global _numpad_isr
|
|
global _number_to_7seg
|
|
global _display
|
|
global _shift_left
|
|
global _start_display
|
|
global _setup
|
|
global _main
|
|
global _sram_end
|
|
global _digit
|
|
global _dsp_en
|
|
|
|
;--------------------------------------------------------
|
|
; extern variables in this module
|
|
;--------------------------------------------------------
|
|
extern _SPPCFGbits
|
|
extern _SPPEPSbits
|
|
extern _SPPCONbits
|
|
extern _UFRMLbits
|
|
extern _UFRMHbits
|
|
extern _UIRbits
|
|
extern _UIEbits
|
|
extern _UEIRbits
|
|
extern _UEIEbits
|
|
extern _USTATbits
|
|
extern _UCONbits
|
|
extern _UADDRbits
|
|
extern _UCFGbits
|
|
extern _UEP0bits
|
|
extern _UEP1bits
|
|
extern _UEP2bits
|
|
extern _UEP3bits
|
|
extern _UEP4bits
|
|
extern _UEP5bits
|
|
extern _UEP6bits
|
|
extern _UEP7bits
|
|
extern _UEP8bits
|
|
extern _UEP9bits
|
|
extern _UEP10bits
|
|
extern _UEP11bits
|
|
extern _UEP12bits
|
|
extern _UEP13bits
|
|
extern _UEP14bits
|
|
extern _UEP15bits
|
|
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 _CCP1ASbits
|
|
extern _ECCP1ASbits
|
|
extern _CCP1DELbits
|
|
extern _ECCP1DELbits
|
|
extern _BAUDCONbits
|
|
extern _BAUDCTLbits
|
|
extern _CCP2CONbits
|
|
extern _CCP1CONbits
|
|
extern _ECCP1CONbits
|
|
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 _SPPDATA
|
|
extern _SPPCFG
|
|
extern _SPPEPS
|
|
extern _SPPCON
|
|
extern _UFRM
|
|
extern _UFRML
|
|
extern _UFRMH
|
|
extern _UIR
|
|
extern _UIE
|
|
extern _UEIR
|
|
extern _UEIE
|
|
extern _USTAT
|
|
extern _UCON
|
|
extern _UADDR
|
|
extern _UCFG
|
|
extern _UEP0
|
|
extern _UEP1
|
|
extern _UEP2
|
|
extern _UEP3
|
|
extern _UEP4
|
|
extern _UEP5
|
|
extern _UEP6
|
|
extern _UEP7
|
|
extern _UEP8
|
|
extern _UEP9
|
|
extern _UEP10
|
|
extern _UEP11
|
|
extern _UEP12
|
|
extern _UEP13
|
|
extern _UEP14
|
|
extern _UEP15
|
|
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 _TMR3
|
|
extern _TMR3L
|
|
extern _TMR3H
|
|
extern _CMCON
|
|
extern _CVRCON
|
|
extern _CCP1AS
|
|
extern _ECCP1AS
|
|
extern _CCP1DEL
|
|
extern _ECCP1DEL
|
|
extern _BAUDCON
|
|
extern _BAUDCTL
|
|
extern _CCP2CON
|
|
extern _CCPR2
|
|
extern _CCPR2L
|
|
extern _CCPR2H
|
|
extern _CCP1CON
|
|
extern _ECCP1CON
|
|
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 _TMR1
|
|
extern _TMR1L
|
|
extern _TMR1H
|
|
extern _RCON
|
|
extern _WDTCON
|
|
extern _HLVDCON
|
|
extern _LVDCON
|
|
extern _OSCCON
|
|
extern _T0CON
|
|
extern _TMR0
|
|
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 _delay1ktcy
|
|
extern __moduint
|
|
extern __divuint
|
|
|
|
;--------------------------------------------------------
|
|
; Equates to used internal registers
|
|
;--------------------------------------------------------
|
|
STATUS equ 0xfd8
|
|
PCL equ 0xff9
|
|
PCLATH equ 0xffa
|
|
PCLATU equ 0xffb
|
|
WREG equ 0xfe8
|
|
BSR equ 0xfe0
|
|
FSR0L equ 0xfe9
|
|
FSR0H equ 0xfea
|
|
FSR1L equ 0xfe1
|
|
FSR2L equ 0xfd9
|
|
INDF0 equ 0xfef
|
|
POSTINC1 equ 0xfe6
|
|
POSTDEC1 equ 0xfe5
|
|
PREINC1 equ 0xfe4
|
|
PLUSW2 equ 0xfdb
|
|
PRODL equ 0xff3
|
|
PRODH equ 0xff4
|
|
|
|
|
|
idata
|
|
_digit db 0x00, 0x00, 0x00, 0x00
|
|
_dsp_en db 0x00
|
|
|
|
|
|
; 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
|
|
|
|
|
|
ustat_main_00 udata 0X07FF
|
|
_sram_end res 0
|
|
|
|
;--------------------------------------------------------
|
|
; interrupt vector
|
|
;--------------------------------------------------------
|
|
|
|
;--------------------------------------------------------
|
|
; global & static initialisations
|
|
;--------------------------------------------------------
|
|
; ; Starting pCode block for absolute section
|
|
; ;-----------------------------------------
|
|
S_main_ivec_0x1_isr code 0X000008
|
|
ivec_0x1_isr:
|
|
GOTO _isr
|
|
|
|
; I code from now on!
|
|
; ; Starting pCode block
|
|
S_main__main code
|
|
_main:
|
|
; .line 186; main.c setup();
|
|
CALL _setup
|
|
; .line 187; main.c start_display();
|
|
CALL _start_display
|
|
_00393_DS_:
|
|
; .line 189; main.c PORTB = 0xe;
|
|
MOVLW 0x0e
|
|
MOVWF _PORTB
|
|
; .line 190; main.c delay1ktcy(POLLINGRATE);
|
|
MOVLW 0x64
|
|
CALL _delay1ktcy
|
|
; .line 191; main.c PORTB = 0xD;
|
|
MOVLW 0x0d
|
|
MOVWF _PORTB
|
|
; .line 192; main.c delay1ktcy(POLLINGRATE);
|
|
MOVLW 0x64
|
|
CALL _delay1ktcy
|
|
; .line 193; main.c PORTB = 0xB;
|
|
MOVLW 0x0b
|
|
MOVWF _PORTB
|
|
; .line 194; main.c delay1ktcy(POLLINGRATE);
|
|
MOVLW 0x64
|
|
CALL _delay1ktcy
|
|
; .line 195; main.c PORTB = 0x7;
|
|
MOVLW 0x07
|
|
MOVWF _PORTB
|
|
; .line 196; main.c delay1ktcy(POLLINGRATE);
|
|
MOVLW 0x64
|
|
CALL _delay1ktcy
|
|
BRA _00393_DS_
|
|
; .line 199; main.c }
|
|
RETURN
|
|
|
|
; ; Starting pCode block
|
|
S_main__setup code
|
|
_setup:
|
|
; .line 160; main.c void setup(void){
|
|
MOVFF FSR2L, POSTDEC1
|
|
MOVFF FSR1L, FSR2L
|
|
; .line 162; main.c LATD = 0;
|
|
CLRF _LATD
|
|
; .line 163; main.c TRISD = 0;
|
|
CLRF _TRISD
|
|
; .line 165; main.c TRISB = 0xf0;
|
|
MOVLW 0xf0
|
|
MOVWF _TRISB
|
|
; .line 166; main.c LATB = 0x00;
|
|
CLRF _LATB
|
|
; .line 167; main.c ADCON1 = 0xf;
|
|
MOVLW 0x0f
|
|
MOVWF _ADCON1
|
|
; .line 168; main.c INTCON2bits.RBPU = 0;
|
|
BCF _INTCON2bits, 7
|
|
; .line 170; main.c TRISE = 0;
|
|
CLRF _TRISE
|
|
; .line 171; main.c LATE = 0;
|
|
CLRF _LATE
|
|
; .line 173; main.c TRISA = 0;
|
|
CLRF _TRISA
|
|
; .line 174; main.c LATA = 0;
|
|
CLRF _LATA
|
|
; .line 177; main.c INTCONbits.GIE = 1;
|
|
BSF _INTCONbits, 7
|
|
; .line 178; main.c INTCONbits.PEIE = 1;
|
|
BSF _INTCONbits, 6
|
|
; .line 179; main.c INTCONbits.RBIE = 1;
|
|
BSF _INTCONbits, 3
|
|
; .line 180; main.c INTCON2bits.RBIP = 1;
|
|
BSF _INTCON2bits, 0
|
|
; .line 181; main.c RCONbits.IPEN = 1;
|
|
BSF _RCONbits, 7
|
|
; .line 183; main.c }
|
|
MOVFF PREINC1, FSR2L
|
|
RETURN
|
|
|
|
; ; Starting pCode block
|
|
S_main__start_display code
|
|
_start_display:
|
|
; .line 149; main.c void start_display(void) {
|
|
MOVFF FSR2L, POSTDEC1
|
|
MOVFF FSR1L, FSR2L
|
|
; .line 151; main.c INTCONbits.TMR0IE = 1;
|
|
BSF _INTCONbits, 5
|
|
; .line 152; main.c INTCON2bits.TMR0IP = 1;
|
|
BSF _INTCON2bits, 2
|
|
; .line 154; main.c T0CONbits.T08BIT = 1;
|
|
BSF _T0CONbits, 6
|
|
; .line 155; main.c T0CONbits.T0CS = 0; // Source internal oscilator
|
|
BCF _T0CONbits, 5
|
|
; .line 156; main.c T0CONbits.PSA = 0;
|
|
BCF _T0CONbits, 3
|
|
; .line 157; main.c T0CONbits.T0PS = 0x7;
|
|
MOVF _T0CONbits, W
|
|
ANDLW 0xf8
|
|
IORLW 0x07
|
|
MOVWF _T0CONbits
|
|
; .line 158; main.c T0CONbits.TMR0ON = 1;
|
|
BSF _T0CONbits, 7
|
|
; .line 159; main.c }
|
|
MOVFF PREINC1, FSR2L
|
|
RETURN
|
|
|
|
; ; Starting pCode block
|
|
S_main__shift_left code
|
|
_shift_left:
|
|
; .line 144; main.c void shift_left(void){
|
|
MOVFF FSR2L, POSTDEC1
|
|
MOVFF FSR1L, FSR2L
|
|
MOVFF r0x00, POSTDEC1
|
|
; .line 145; main.c digit[3] = digit[2];
|
|
MOVFF (_digit + 2), r0x00
|
|
MOVF r0x00, W
|
|
BANKSEL (_digit + 3)
|
|
MOVWF (_digit + 3), B
|
|
; .line 146; main.c digit[2] = digit[1];
|
|
MOVFF (_digit + 1), r0x00
|
|
MOVF r0x00, W
|
|
BANKSEL (_digit + 2)
|
|
MOVWF (_digit + 2), B
|
|
; .line 147; main.c digit[1] = digit[0];
|
|
MOVFF _digit, r0x00
|
|
MOVF r0x00, W
|
|
BANKSEL (_digit + 1)
|
|
MOVWF (_digit + 1), B
|
|
; .line 148; main.c }
|
|
MOVFF PREINC1, r0x00
|
|
MOVFF PREINC1, FSR2L
|
|
RETURN
|
|
|
|
; ; Starting pCode block
|
|
S_main__display code
|
|
_display:
|
|
; .line 135; main.c void display(uint16_t num){
|
|
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
|
|
; .line 137; main.c if (num > 9999) return;
|
|
MOVF r0x00, W
|
|
MOVWF r0x02
|
|
MOVF r0x01, W
|
|
MOVWF r0x03
|
|
MOVLW 0x27
|
|
SUBWF r0x03, W
|
|
BNZ _00372_DS_
|
|
MOVLW 0x10
|
|
SUBWF r0x02, W
|
|
_00372_DS_:
|
|
BC _00351_DS_
|
|
; .line 138; main.c while(num) {
|
|
CLRF r0x02
|
|
_00348_DS_:
|
|
MOVF r0x01, W
|
|
IORWF r0x00, W
|
|
BZ _00351_DS_
|
|
; .line 139; main.c digit[i] = num%10;
|
|
MOVLW LOW(_digit)
|
|
ADDWF r0x02, W
|
|
MOVWF r0x03
|
|
CLRF r0x04
|
|
MOVLW HIGH(_digit)
|
|
ADDWFC r0x04, F
|
|
MOVF r0x00, W
|
|
MOVWF r0x05
|
|
MOVF r0x01, W
|
|
MOVWF r0x06
|
|
MOVLW 0x00
|
|
MOVWF POSTDEC1
|
|
MOVLW 0x0a
|
|
MOVWF POSTDEC1
|
|
MOVF r0x06, W
|
|
MOVWF POSTDEC1
|
|
MOVF r0x05, W
|
|
MOVWF POSTDEC1
|
|
CALL __moduint
|
|
MOVWF r0x07
|
|
MOVFF PRODL, r0x08
|
|
MOVLW 0x04
|
|
ADDWF FSR1L, F
|
|
MOVFF r0x03, FSR0L
|
|
MOVFF r0x04, FSR0H
|
|
MOVFF r0x07, INDF0
|
|
; .line 140; main.c num = num/10;
|
|
MOVLW 0x00
|
|
MOVWF POSTDEC1
|
|
MOVLW 0x0a
|
|
MOVWF POSTDEC1
|
|
MOVF r0x06, W
|
|
MOVWF POSTDEC1
|
|
MOVF r0x05, W
|
|
MOVWF POSTDEC1
|
|
CALL __divuint
|
|
MOVWF r0x03
|
|
MOVFF PRODL, r0x04
|
|
MOVLW 0x04
|
|
ADDWF FSR1L, F
|
|
MOVF r0x03, W
|
|
MOVWF r0x00
|
|
MOVF r0x04, W
|
|
MOVWF r0x01
|
|
; .line 141; main.c i++;
|
|
INCF r0x02, F
|
|
BRA _00348_DS_
|
|
_00351_DS_:
|
|
; .line 143; main.c }
|
|
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_main__number_to_7seg code
|
|
_number_to_7seg:
|
|
; .line 97; main.c uint8_t number_to_7seg(uint8_t number) {
|
|
MOVFF FSR2L, POSTDEC1
|
|
MOVFF FSR1L, FSR2L
|
|
MOVFF r0x00, POSTDEC1
|
|
MOVLW 0x02
|
|
MOVFF PLUSW2, r0x00
|
|
; .line 98; main.c switch (number) {
|
|
MOVLW 0x10
|
|
SUBWF r0x00, W
|
|
BTFSC STATUS, 0
|
|
BRA _00330_DS_
|
|
CLRF PCLATH
|
|
CLRF PCLATU
|
|
RLCF r0x00, W
|
|
RLCF PCLATH, F
|
|
RLCF WREG, W
|
|
RLCF PCLATH, F
|
|
ANDLW 0xfc
|
|
ADDLW LOW(_00341_DS_)
|
|
MOVWF POSTDEC1
|
|
MOVLW HIGH(_00341_DS_)
|
|
ADDWFC PCLATH, F
|
|
MOVLW UPPER(_00341_DS_)
|
|
ADDWFC PCLATU, F
|
|
MOVF PREINC1, W
|
|
MOVWF PCL
|
|
_00341_DS_:
|
|
GOTO _00314_DS_
|
|
GOTO _00315_DS_
|
|
GOTO _00316_DS_
|
|
GOTO _00317_DS_
|
|
GOTO _00318_DS_
|
|
GOTO _00319_DS_
|
|
GOTO _00320_DS_
|
|
GOTO _00321_DS_
|
|
GOTO _00322_DS_
|
|
GOTO _00323_DS_
|
|
GOTO _00324_DS_
|
|
GOTO _00325_DS_
|
|
GOTO _00326_DS_
|
|
GOTO _00327_DS_
|
|
GOTO _00328_DS_
|
|
GOTO _00329_DS_
|
|
_00314_DS_:
|
|
; .line 100; main.c return 0x3F;
|
|
MOVLW 0x3f
|
|
BRA _00332_DS_
|
|
_00315_DS_:
|
|
; .line 102; main.c return 0x06;
|
|
MOVLW 0x06
|
|
BRA _00332_DS_
|
|
_00316_DS_:
|
|
; .line 104; main.c return 0x5B;
|
|
MOVLW 0x5b
|
|
BRA _00332_DS_
|
|
_00317_DS_:
|
|
; .line 106; main.c return 0x4F;
|
|
MOVLW 0x4f
|
|
BRA _00332_DS_
|
|
_00318_DS_:
|
|
; .line 108; main.c return 0x66;
|
|
MOVLW 0x66
|
|
BRA _00332_DS_
|
|
_00319_DS_:
|
|
; .line 110; main.c return 0x6D;
|
|
MOVLW 0x6d
|
|
BRA _00332_DS_
|
|
_00320_DS_:
|
|
; .line 112; main.c return 0x7D;
|
|
MOVLW 0x7d
|
|
BRA _00332_DS_
|
|
_00321_DS_:
|
|
; .line 114; main.c return 0x07;
|
|
MOVLW 0x07
|
|
BRA _00332_DS_
|
|
_00322_DS_:
|
|
; .line 116; main.c return 0x7F;
|
|
MOVLW 0x7f
|
|
BRA _00332_DS_
|
|
_00323_DS_:
|
|
; .line 118; main.c return 0x6F;
|
|
MOVLW 0x6f
|
|
BRA _00332_DS_
|
|
_00324_DS_:
|
|
; .line 120; main.c return 0x77;
|
|
MOVLW 0x77
|
|
BRA _00332_DS_
|
|
_00325_DS_:
|
|
; .line 122; main.c return 0x7c;
|
|
MOVLW 0x7c
|
|
BRA _00332_DS_
|
|
_00326_DS_:
|
|
; .line 124; main.c return 0x39;
|
|
MOVLW 0x39
|
|
BRA _00332_DS_
|
|
_00327_DS_:
|
|
; .line 126; main.c return 0x5e;
|
|
MOVLW 0x5e
|
|
BRA _00332_DS_
|
|
_00328_DS_:
|
|
; .line 128; main.c return 0x79;
|
|
MOVLW 0x79
|
|
BRA _00332_DS_
|
|
_00329_DS_:
|
|
; .line 130; main.c return 0x71;
|
|
MOVLW 0x71
|
|
BRA _00332_DS_
|
|
_00330_DS_:
|
|
; .line 132; main.c return 0;
|
|
CLRF WREG
|
|
_00332_DS_:
|
|
; .line 134; main.c }
|
|
MOVFF PREINC1, r0x00
|
|
MOVFF PREINC1, FSR2L
|
|
RETURN
|
|
|
|
; ; Starting pCode block
|
|
S_main__numpad_isr code
|
|
_numpad_isr:
|
|
; .line 65; main.c void numpad_isr(void) {
|
|
MOVFF FSR2L, POSTDEC1
|
|
MOVFF FSR1L, FSR2L
|
|
MOVFF r0x00, POSTDEC1
|
|
MOVFF r0x01, POSTDEC1
|
|
MOVFF r0x02, POSTDEC1
|
|
; .line 67; main.c uint8_t number = 0;
|
|
CLRF r0x00
|
|
; .line 68; main.c if ((PORTB & 0xf0) == 0xf0) return;
|
|
MOVFF _PORTB, r0x01
|
|
CLRF r0x02
|
|
MOVLW 0xf0
|
|
ANDWF r0x01, F
|
|
CLRF r0x02
|
|
MOVF r0x01, W
|
|
XORLW 0xf0
|
|
BNZ _00308_DS_
|
|
MOVF r0x02, W
|
|
BZ _00309_DS_
|
|
_00308_DS_:
|
|
BRA _00143_DS_
|
|
_00309_DS_:
|
|
BRA _00185_DS_
|
|
_00143_DS_:
|
|
; .line 69; main.c if (!PORTBbits.RB0) {
|
|
BTFSC _PORTBbits, 0
|
|
BRA _00183_DS_
|
|
; .line 70; main.c if (!PORTBbits.RB4) number = 1;
|
|
BTFSC _PORTBbits, 4
|
|
BRA _00145_DS_
|
|
MOVLW 0x01
|
|
MOVWF r0x00
|
|
_00145_DS_:
|
|
; .line 71; main.c if (!PORTBbits.RB5) number = 2;
|
|
BTFSC _PORTBbits, 5
|
|
BRA _00147_DS_
|
|
MOVLW 0x02
|
|
MOVWF r0x00
|
|
_00147_DS_:
|
|
; .line 72; main.c if (!PORTBbits.RB6) number = 3;
|
|
BTFSC _PORTBbits, 6
|
|
BRA _00149_DS_
|
|
MOVLW 0x03
|
|
MOVWF r0x00
|
|
_00149_DS_:
|
|
; .line 73; main.c if (!PORTBbits.RB7) number = 0xA;
|
|
BTFSC _PORTBbits, 7
|
|
BRA _00184_DS_
|
|
MOVLW 0x0a
|
|
MOVWF r0x00
|
|
BRA _00184_DS_
|
|
_00183_DS_:
|
|
; .line 75; main.c else if (!PORTBbits.RB1) {
|
|
BTFSC _PORTBbits, 1
|
|
BRA _00180_DS_
|
|
; .line 76; main.c if (!PORTBbits.RB4) number = 4;
|
|
BTFSC _PORTBbits, 4
|
|
BRA _00153_DS_
|
|
MOVLW 0x04
|
|
MOVWF r0x00
|
|
_00153_DS_:
|
|
; .line 77; main.c if (!PORTBbits.RB5) number = 5;
|
|
BTFSC _PORTBbits, 5
|
|
BRA _00155_DS_
|
|
MOVLW 0x05
|
|
MOVWF r0x00
|
|
_00155_DS_:
|
|
; .line 78; main.c if (!PORTBbits.RB6) number = 6;
|
|
BTFSC _PORTBbits, 6
|
|
BRA _00157_DS_
|
|
MOVLW 0x06
|
|
MOVWF r0x00
|
|
_00157_DS_:
|
|
; .line 79; main.c if (!PORTBbits.RB7) number = 0xB;
|
|
BTFSC _PORTBbits, 7
|
|
BRA _00184_DS_
|
|
MOVLW 0x0b
|
|
MOVWF r0x00
|
|
BRA _00184_DS_
|
|
_00180_DS_:
|
|
; .line 81; main.c else if (!PORTBbits.RB2) {
|
|
BTFSC _PORTBbits, 2
|
|
BRA _00177_DS_
|
|
; .line 82; main.c if (!PORTBbits.RB4) number = 7;
|
|
BTFSC _PORTBbits, 4
|
|
BRA _00161_DS_
|
|
MOVLW 0x07
|
|
MOVWF r0x00
|
|
_00161_DS_:
|
|
; .line 83; main.c if (!PORTBbits.RB5) number = 8;
|
|
BTFSC _PORTBbits, 5
|
|
BRA _00163_DS_
|
|
MOVLW 0x08
|
|
MOVWF r0x00
|
|
_00163_DS_:
|
|
; .line 84; main.c if (!PORTBbits.RB6) number = 9;
|
|
BTFSC _PORTBbits, 6
|
|
BRA _00165_DS_
|
|
MOVLW 0x09
|
|
MOVWF r0x00
|
|
_00165_DS_:
|
|
; .line 85; main.c if (!PORTBbits.RB7) number = 0xC;
|
|
BTFSC _PORTBbits, 7
|
|
BRA _00184_DS_
|
|
MOVLW 0x0c
|
|
MOVWF r0x00
|
|
BRA _00184_DS_
|
|
_00177_DS_:
|
|
; .line 87; main.c else if (!PORTBbits.RB3) {
|
|
BTFSC _PORTBbits, 3
|
|
BRA _00184_DS_
|
|
; .line 89; main.c if (!PORTBbits.RB5) number = 0;
|
|
BTFSC _PORTBbits, 5
|
|
BRA _00169_DS_
|
|
CLRF r0x00
|
|
_00169_DS_:
|
|
; .line 90; main.c if (!PORTBbits.RB6) number = 0xF;
|
|
BTFSC _PORTBbits, 6
|
|
BRA _00171_DS_
|
|
MOVLW 0x0f
|
|
MOVWF r0x00
|
|
_00171_DS_:
|
|
; .line 91; main.c if (!PORTBbits.RB7) number = 0xD;
|
|
BTFSC _PORTBbits, 7
|
|
BRA _00184_DS_
|
|
MOVLW 0x0d
|
|
MOVWF r0x00
|
|
_00184_DS_:
|
|
; .line 93; main.c shift_left();
|
|
CALL _shift_left
|
|
; .line 94; main.c digit[0] = number;
|
|
MOVF r0x00, W
|
|
BANKSEL _digit
|
|
MOVWF _digit, B
|
|
_00185_DS_:
|
|
; .line 95; main.c }
|
|
MOVFF PREINC1, r0x02
|
|
MOVFF PREINC1, r0x01
|
|
MOVFF PREINC1, r0x00
|
|
MOVFF PREINC1, FSR2L
|
|
RETURN
|
|
|
|
; ; Starting pCode block
|
|
S_main__tmr_isr code
|
|
_tmr_isr:
|
|
; .line 43; main.c void tmr_isr(void){
|
|
MOVFF FSR2L, POSTDEC1
|
|
MOVFF FSR1L, FSR2L
|
|
MOVFF r0x00, POSTDEC1
|
|
MOVFF r0x01, POSTDEC1
|
|
; .line 44; main.c LATA = LATE = 0;
|
|
CLRF _LATE
|
|
CLRF _LATA
|
|
; .line 45; main.c LATD = number_to_7seg(digit[dsp_en]);
|
|
MOVLW LOW(_digit)
|
|
BANKSEL _dsp_en
|
|
ADDWF _dsp_en, W, B
|
|
MOVWF r0x00
|
|
CLRF r0x01
|
|
MOVLW HIGH(_digit)
|
|
ADDWFC r0x01, F
|
|
MOVFF r0x00, FSR0L
|
|
MOVFF r0x01, FSR0H
|
|
MOVFF INDF0, r0x00
|
|
MOVF r0x00, W
|
|
MOVWF POSTDEC1
|
|
CALL _number_to_7seg
|
|
MOVWF _LATD
|
|
MOVF POSTINC1, F
|
|
; .line 46; main.c switch (dsp_en) {
|
|
MOVLW 0x04
|
|
BANKSEL _dsp_en
|
|
SUBWF _dsp_en, W, B
|
|
BC _00118_DS_
|
|
CLRF PCLATH
|
|
CLRF PCLATU
|
|
BANKSEL _dsp_en
|
|
RLCF _dsp_en, W, B
|
|
RLCF PCLATH, F
|
|
RLCF WREG, W
|
|
RLCF PCLATH, F
|
|
ANDLW 0xfc
|
|
ADDLW LOW(_00136_DS_)
|
|
MOVWF POSTDEC1
|
|
MOVLW HIGH(_00136_DS_)
|
|
ADDWFC PCLATH, F
|
|
MOVLW UPPER(_00136_DS_)
|
|
ADDWFC PCLATU, F
|
|
MOVF PREINC1, W
|
|
MOVWF PCL
|
|
_00136_DS_:
|
|
GOTO _00114_DS_
|
|
GOTO _00115_DS_
|
|
GOTO _00116_DS_
|
|
GOTO _00117_DS_
|
|
_00114_DS_:
|
|
; .line 48; main.c LATA = 0;
|
|
CLRF _LATA
|
|
; .line 49; main.c LATE = 0x4;
|
|
MOVLW 0x04
|
|
MOVWF _LATE
|
|
; .line 50; main.c break;
|
|
BRA _00118_DS_
|
|
_00115_DS_:
|
|
; .line 52; main.c LATE = 0x2;
|
|
MOVLW 0x02
|
|
MOVWF _LATE
|
|
; .line 53; main.c break;
|
|
BRA _00118_DS_
|
|
_00116_DS_:
|
|
; .line 55; main.c LATE = 0x1;
|
|
MOVLW 0x01
|
|
MOVWF _LATE
|
|
; .line 56; main.c break;
|
|
BRA _00118_DS_
|
|
_00117_DS_:
|
|
; .line 58; main.c LATE = 0;
|
|
CLRF _LATE
|
|
; .line 59; main.c LATA = 0x10;
|
|
MOVLW 0x10
|
|
MOVWF _LATA
|
|
_00118_DS_:
|
|
BANKSEL _dsp_en
|
|
; .line 62; main.c dsp_en++;
|
|
INCF _dsp_en, F, B
|
|
; .line 63; main.c if (dsp_en > 3) dsp_en = 0;
|
|
MOVLW 0x04
|
|
BANKSEL _dsp_en
|
|
SUBWF _dsp_en, W, B
|
|
BNC _00121_DS_
|
|
BANKSEL _dsp_en
|
|
CLRF _dsp_en, B
|
|
_00121_DS_:
|
|
; .line 64; main.c }
|
|
MOVFF PREINC1, r0x01
|
|
MOVFF PREINC1, r0x00
|
|
MOVFF PREINC1, FSR2L
|
|
RETURN
|
|
|
|
; ; Starting pCode block
|
|
S_main__isr code
|
|
_isr:
|
|
; .line 31; main.c void isr(void) __interrupt (1) {
|
|
MOVFF STATUS, POSTDEC1
|
|
MOVFF BSR, POSTDEC1
|
|
MOVWF POSTDEC1
|
|
MOVFF PRODL, POSTDEC1
|
|
MOVFF PRODH, POSTDEC1
|
|
MOVFF FSR0L, POSTDEC1
|
|
MOVFF FSR0H, POSTDEC1
|
|
MOVFF PCLATH, POSTDEC1
|
|
MOVFF PCLATU, POSTDEC1
|
|
MOVFF FSR2L, POSTDEC1
|
|
MOVFF FSR1L, FSR2L
|
|
; .line 32; main.c if (INTCONbits.TMR0IF){
|
|
BTFSS _INTCONbits, 2
|
|
BRA _00106_DS_
|
|
; .line 33; main.c tmr_isr();
|
|
CALL _tmr_isr
|
|
; .line 34; main.c TMR0 = RATE;
|
|
MOVLW 0xfa
|
|
MOVWF _TMR0
|
|
_00106_DS_:
|
|
; .line 36; main.c INTCONbits.TMR0IF = 0;
|
|
BCF _INTCONbits, 2
|
|
; .line 37; main.c if (INTCONbits.RBIF){
|
|
BTFSS _INTCONbits, 0
|
|
BRA _00108_DS_
|
|
; .line 38; main.c numpad_isr();
|
|
CALL _numpad_isr
|
|
_00108_DS_:
|
|
; .line 40; main.c INTCONbits.RBIF = 0;
|
|
BCF _INTCONbits, 0
|
|
; .line 41; main.c }
|
|
MOVFF PREINC1, FSR2L
|
|
MOVFF PREINC1, PCLATU
|
|
MOVFF PREINC1, PCLATH
|
|
MOVFF PREINC1, FSR0H
|
|
MOVFF PREINC1, FSR0L
|
|
MOVFF PREINC1, PRODH
|
|
MOVFF PREINC1, PRODL
|
|
MOVF PREINC1, W
|
|
MOVFF PREINC1, BSR
|
|
MOVFF PREINC1, STATUS
|
|
RETFIE
|
|
|
|
|
|
|
|
; Statistics:
|
|
; code size: 1106 (0x0452) bytes ( 0.84%)
|
|
; 553 (0x0229) words
|
|
; udata size: 0 (0x0000) bytes ( 0.00%)
|
|
; access size: 9 (0x0009) bytes
|
|
|
|
|
|
end
|