Added keypad example
This commit is contained in:
parent
fa063aa081
commit
b65be9a729
432
c/btest/main.asm
Executable file
432
c/btest/main.asm
Executable file
|
|
@ -0,0 +1,432 @@
|
||||||
|
;--------------------------------------------------------
|
||||||
|
; 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 _setup
|
||||||
|
global _isr
|
||||||
|
global _main
|
||||||
|
global _sram_end
|
||||||
|
|
||||||
|
;--------------------------------------------------------
|
||||||
|
; 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
|
||||||
|
|
||||||
|
;--------------------------------------------------------
|
||||||
|
; Equates to used internal registers
|
||||||
|
;--------------------------------------------------------
|
||||||
|
STATUS equ 0xfd8
|
||||||
|
PCLATH equ 0xffa
|
||||||
|
PCLATU equ 0xffb
|
||||||
|
BSR equ 0xfe0
|
||||||
|
FSR0L equ 0xfe9
|
||||||
|
FSR0H equ 0xfea
|
||||||
|
FSR1L equ 0xfe1
|
||||||
|
FSR2L equ 0xfd9
|
||||||
|
POSTDEC1 equ 0xfe5
|
||||||
|
PREINC1 equ 0xfe4
|
||||||
|
PRODL equ 0xff3
|
||||||
|
PRODH equ 0xff4
|
||||||
|
|
||||||
|
|
||||||
|
; Internal registers
|
||||||
|
.registers udata_ovr 0x0000
|
||||||
|
r0x00 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 45; main.c setup();
|
||||||
|
CALL _setup
|
||||||
|
_00121_DS_:
|
||||||
|
; .line 48; main.c PORTDbits.RD0 = PORTBbits.RB0;
|
||||||
|
CLRF r0x00
|
||||||
|
BTFSC _PORTBbits, 0
|
||||||
|
INCF r0x00, F
|
||||||
|
MOVF r0x00, W
|
||||||
|
ANDLW 0x01
|
||||||
|
MOVWF PRODH
|
||||||
|
MOVF _PORTDbits, W
|
||||||
|
ANDLW 0xfe
|
||||||
|
IORWF PRODH, W
|
||||||
|
MOVWF _PORTDbits
|
||||||
|
; .line 49; main.c if (PORTDbits.RD0){
|
||||||
|
BTFSS _PORTDbits, 0
|
||||||
|
BRA _00118_DS_
|
||||||
|
; .line 50; main.c PORTDbits.RD1 = 1;
|
||||||
|
BSF _PORTDbits, 1
|
||||||
|
BRA _00121_DS_
|
||||||
|
_00118_DS_:
|
||||||
|
; .line 51; main.c } else PORTDbits.RD1 = 0;
|
||||||
|
BCF _PORTDbits, 1
|
||||||
|
BRA _00121_DS_
|
||||||
|
; .line 56; main.c }
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
; ; Starting pCode block
|
||||||
|
S_main__isr code
|
||||||
|
_isr:
|
||||||
|
; .line 33; 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 34; main.c if (INTCONbits.RBIF) {
|
||||||
|
BTFSS _INTCONbits, 0
|
||||||
|
BRA _00111_DS_
|
||||||
|
; .line 36; main.c WREG = PORTB; /* Read portb to elimitate mismatch condition */
|
||||||
|
MOVF _PORTB, W
|
||||||
|
; .line 37; main.c LATD = ~LATD;
|
||||||
|
COMF _LATD, F
|
||||||
|
; .line 38; main.c delay1ktcy(250);
|
||||||
|
MOVLW 0xfa
|
||||||
|
CALL _delay1ktcy
|
||||||
|
_00111_DS_:
|
||||||
|
; .line 41; main.c INTCONbits.RBIF = 0;
|
||||||
|
BCF _INTCONbits, 0
|
||||||
|
; .line 42; 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
|
||||||
|
|
||||||
|
; ; Starting pCode block
|
||||||
|
S_main__setup code
|
||||||
|
_setup:
|
||||||
|
; .line 15; main.c void setup(void){
|
||||||
|
MOVFF FSR2L, POSTDEC1
|
||||||
|
MOVFF FSR1L, FSR2L
|
||||||
|
; .line 16; main.c LATD = 0;
|
||||||
|
CLRF _LATD
|
||||||
|
; .line 17; main.c TRISD = 0;
|
||||||
|
CLRF _TRISD
|
||||||
|
; .line 19; main.c TRISB = 0xff;
|
||||||
|
MOVLW 0xff
|
||||||
|
MOVWF _TRISB
|
||||||
|
; .line 20; main.c LATB = 0x00;
|
||||||
|
CLRF _LATB
|
||||||
|
; .line 21; main.c ADCON1 = 0xf;
|
||||||
|
MOVLW 0x0f
|
||||||
|
MOVWF _ADCON1
|
||||||
|
; .line 23; main.c INTCONbits.GIE = 1;
|
||||||
|
BSF _INTCONbits, 7
|
||||||
|
; .line 24; main.c INTCONbits.PEIE = 1;
|
||||||
|
BSF _INTCONbits, 6
|
||||||
|
; .line 25; main.c INTCONbits.RBIE = 0;
|
||||||
|
BCF _INTCONbits, 3
|
||||||
|
; .line 26; main.c INTCON2bits.RBPU = 0;
|
||||||
|
BCF _INTCON2bits, 7
|
||||||
|
; .line 27; main.c INTCON2bits.RBIP = 1;
|
||||||
|
BSF _INTCON2bits, 0
|
||||||
|
; .line 28; main.c RCONbits.IPEN = 1;
|
||||||
|
BSF _RCONbits, 7
|
||||||
|
; .line 31; main.c }
|
||||||
|
MOVFF PREINC1, FSR2L
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; Statistics:
|
||||||
|
; code size: 178 (0x00b2) bytes ( 0.14%)
|
||||||
|
; 89 (0x0059) words
|
||||||
|
; udata size: 0 (0x0000) bytes ( 0.00%)
|
||||||
|
; access size: 1 (0x0001) bytes
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
56
c/btest/main.c
Executable file
56
c/btest/main.c
Executable file
|
|
@ -0,0 +1,56 @@
|
||||||
|
#include <delay.h>
|
||||||
|
#include <pic18fregs.h>
|
||||||
|
|
||||||
|
// FUSES START
|
||||||
|
#pragma config XINST = OFF
|
||||||
|
#pragma config FOSC = HS
|
||||||
|
#pragma config WDT = OFF
|
||||||
|
#pragma config LVP = OFF
|
||||||
|
#pragma config MCLRE = OFF
|
||||||
|
|
||||||
|
void setup(void);
|
||||||
|
void isr(void) __interrupt (1);
|
||||||
|
int main(void);
|
||||||
|
|
||||||
|
void setup(void){
|
||||||
|
LATD = 0;
|
||||||
|
TRISD = 0;
|
||||||
|
|
||||||
|
TRISB = 0xff;
|
||||||
|
LATB = 0x00;
|
||||||
|
ADCON1 = 0xf;
|
||||||
|
|
||||||
|
INTCONbits.GIE = 1;
|
||||||
|
INTCONbits.PEIE = 1;
|
||||||
|
INTCONbits.RBIE = 0;
|
||||||
|
INTCON2bits.RBPU = 0;
|
||||||
|
INTCON2bits.RBIP = 1;
|
||||||
|
RCONbits.IPEN = 1;
|
||||||
|
|
||||||
|
//NTCONbits.INT0IE = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void isr(void) __interrupt (1) {
|
||||||
|
if (INTCONbits.RBIF) {
|
||||||
|
//if (INTCONbits.INT0IF) {
|
||||||
|
WREG = PORTB; /* Read portb to elimitate mismatch condition */
|
||||||
|
LATD = ~LATD;
|
||||||
|
delay1ktcy(250);
|
||||||
|
}
|
||||||
|
//INTCONbits.INT0IF = 0;
|
||||||
|
INTCONbits.RBIF = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
setup();
|
||||||
|
for (;;) {
|
||||||
|
//PORTD = PORTB /* LATB does not work for reading */
|
||||||
|
PORTDbits.RD0 = PORTBbits.RB0;
|
||||||
|
if (PORTDbits.RD0){
|
||||||
|
PORTDbits.RD1 = 1;
|
||||||
|
} else PORTDbits.RD1 = 0;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
35
c/btest/main.hex
Executable file
35
c/btest/main.hex
Executable file
|
|
@ -0,0 +1,35 @@
|
||||||
|
:020000040000FA
|
||||||
|
:0600000006EF00F0000015
|
||||||
|
:080008005BEF00F011EEFFF0C8
|
||||||
|
:1000100021EEFFF0F86AA68EA69C07EEFFF00068BE
|
||||||
|
:10002000ED6A0050FDE1A40EF66E010EF76E000EB3
|
||||||
|
:10003000F86E0900F5CF05F00900F5CF06F034D0D1
|
||||||
|
:100040000900F5CF00F00900F5CF01F00900F5CF68
|
||||||
|
:1000500002F009000900F5CFE9FF0900F5CFEAFF3A
|
||||||
|
:10006000090009000900F5CF03F00900F5CF04F0FD
|
||||||
|
:1000700009000900F6CF07F0F7CF08F0F8CF09F034
|
||||||
|
:1000800000C0F6FF01C0F7FF02C0F8FF03D009006F
|
||||||
|
:10009000F5CFEEFF0306FBE20406F9E207C0F6FF28
|
||||||
|
:1000A00008C0F7FF09C0F8FF0506CAE20606C8E265
|
||||||
|
:1000B000BFEC00F0FFD7D8CFE5FFE0CFE5FFE56E5E
|
||||||
|
:1000C000F3CFE5FFF4CFE5FFE9CFE5FFEACFE5FFAA
|
||||||
|
:1000D000FACFE5FFFBCFE5FFD9CFE5FFE1CFD9FFB1
|
||||||
|
:1000E000F2A005D081508C1EFA0E8CEC00F0F2903C
|
||||||
|
:1000F000E4CFD9FFE4CFFBFFE4CFFAFFE4CFEAFF80
|
||||||
|
:10010000E4CFE9FFE4CFF4FFE4CFF3FFE450E4CF22
|
||||||
|
:10011000E0FFE4CFD8FF1000E806E56E630E9FEC29
|
||||||
|
:1001200000F0E4500BE000D0E56E630E9FEC00F0B1
|
||||||
|
:1001300000D000D00000E450E82EF6D71200E80608
|
||||||
|
:100140000000E85007E000D000D000D000D0000050
|
||||||
|
:10015000E82EFAD71200D9CFE5FFE1CFD9FF8C6A9C
|
||||||
|
:10016000956AFF0E936E8A6A0F0EC16EF28EF28C44
|
||||||
|
:10017000F296F19EF180D08EE4CFD9FF1200ABEC65
|
||||||
|
:1001800000F0006A81B0002A0050010BF46E835029
|
||||||
|
:10019000FE0BF410836E83A002D08382F2D7839289
|
||||||
|
:1001A000F0D7120001000400000060000000010010
|
||||||
|
:0201B00000004D
|
||||||
|
:020000040030CA
|
||||||
|
:010001000CF2
|
||||||
|
:010003001EDE
|
||||||
|
:02000500038175
|
||||||
|
:00000001FF
|
||||||
BIN
c/btest/test/a.out
Executable file
BIN
c/btest/test/a.out
Executable file
Binary file not shown.
29
c/btest/test/main.c
Executable file
29
c/btest/test/main.c
Executable file
|
|
@ -0,0 +1,29 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
uint8_t digit[4] = { 0 };
|
||||||
|
|
||||||
|
void splitdigit(uint16_t);
|
||||||
|
void splitdigit(uint16_t num) {
|
||||||
|
uint8_t i = 0;
|
||||||
|
while (num) {
|
||||||
|
digit[i] = num%10;
|
||||||
|
num = num/10;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
uint8_t i;
|
||||||
|
uint8_t y = 2;
|
||||||
|
uint8_t x = 3;
|
||||||
|
splitdigit(24);
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
printf("%d\n", digit[i]);
|
||||||
|
}
|
||||||
|
y = x = 2;
|
||||||
|
printf("x = %d\n", x);
|
||||||
|
printf("y = %d\n", y);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
994
c/keypad/main.asm
Executable file
994
c/keypad/main.asm
Executable file
|
|
@ -0,0 +1,994 @@
|
||||||
|
;--------------------------------------------------------
|
||||||
|
; 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
|
||||||
199
c/keypad/main.c
Executable file
199
c/keypad/main.c
Executable file
|
|
@ -0,0 +1,199 @@
|
||||||
|
#include <pic18fregs.h>
|
||||||
|
#include <delay.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
// FUSES START
|
||||||
|
#pragma config XINST = OFF
|
||||||
|
#pragma config FOSC = HS
|
||||||
|
#pragma config WDT = OFF
|
||||||
|
#pragma config LVP = OFF
|
||||||
|
#pragma config MCLRE = OFF
|
||||||
|
|
||||||
|
#define NDIGITS 4
|
||||||
|
#define RATE 250
|
||||||
|
#define POLLINGRATE 100
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t digit[NDIGITS] = { 0 };
|
||||||
|
uint8_t dsp_en = 0;
|
||||||
|
|
||||||
|
void isr(void) __interrupt (1);
|
||||||
|
void tmr_isr(void);
|
||||||
|
void numpad_isr(void);
|
||||||
|
uint8_t number_to_7seg(uint8_t);
|
||||||
|
void start_display(void);
|
||||||
|
void display(uint16_t);
|
||||||
|
void shift_left(void);
|
||||||
|
void setup(void);
|
||||||
|
int main(void);
|
||||||
|
|
||||||
|
|
||||||
|
void isr(void) __interrupt (1) {
|
||||||
|
if (INTCONbits.TMR0IF){
|
||||||
|
tmr_isr();
|
||||||
|
TMR0 = RATE;
|
||||||
|
}
|
||||||
|
INTCONbits.TMR0IF = 0;
|
||||||
|
if (INTCONbits.RBIF){
|
||||||
|
numpad_isr();
|
||||||
|
}
|
||||||
|
INTCONbits.RBIF = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tmr_isr(void){
|
||||||
|
LATA = LATE = 0;
|
||||||
|
LATD = number_to_7seg(digit[dsp_en]);
|
||||||
|
switch (dsp_en) {
|
||||||
|
case 0:
|
||||||
|
LATA = 0;
|
||||||
|
LATE = 0x4;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
LATE = 0x2;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
LATE = 0x1;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
LATE = 0;
|
||||||
|
LATA = 0x10;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
dsp_en++;
|
||||||
|
if (dsp_en > 3) dsp_en = 0;
|
||||||
|
}
|
||||||
|
void numpad_isr(void) {
|
||||||
|
uint8_t n = 0;
|
||||||
|
uint8_t number = 0;
|
||||||
|
if ((PORTB & 0xf0) == 0xf0) return;
|
||||||
|
if (!PORTBbits.RB0) {
|
||||||
|
if (!PORTBbits.RB4) number = 1;
|
||||||
|
if (!PORTBbits.RB5) number = 2;
|
||||||
|
if (!PORTBbits.RB6) number = 3;
|
||||||
|
if (!PORTBbits.RB7) number = 0xA;
|
||||||
|
}
|
||||||
|
else if (!PORTBbits.RB1) {
|
||||||
|
if (!PORTBbits.RB4) number = 4;
|
||||||
|
if (!PORTBbits.RB5) number = 5;
|
||||||
|
if (!PORTBbits.RB6) number = 6;
|
||||||
|
if (!PORTBbits.RB7) number = 0xB;
|
||||||
|
}
|
||||||
|
else if (!PORTBbits.RB2) {
|
||||||
|
if (!PORTBbits.RB4) number = 7;
|
||||||
|
if (!PORTBbits.RB5) number = 8;
|
||||||
|
if (!PORTBbits.RB6) number = 9;
|
||||||
|
if (!PORTBbits.RB7) number = 0xC;
|
||||||
|
}
|
||||||
|
else if (!PORTBbits.RB3) {
|
||||||
|
//if (!PORTBbits.RB4) number = 1;
|
||||||
|
if (!PORTBbits.RB5) number = 0;
|
||||||
|
if (!PORTBbits.RB6) number = 0xF;
|
||||||
|
if (!PORTBbits.RB7) number = 0xD;
|
||||||
|
}
|
||||||
|
shift_left();
|
||||||
|
digit[0] = number;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t number_to_7seg(uint8_t number) {
|
||||||
|
switch (number) {
|
||||||
|
case 0:
|
||||||
|
return 0x3F;
|
||||||
|
case 1:
|
||||||
|
return 0x06;
|
||||||
|
case 2:
|
||||||
|
return 0x5B;
|
||||||
|
case 3:
|
||||||
|
return 0x4F;
|
||||||
|
case 4:
|
||||||
|
return 0x66;
|
||||||
|
case 5:
|
||||||
|
return 0x6D;
|
||||||
|
case 6:
|
||||||
|
return 0x7D;
|
||||||
|
case 7:
|
||||||
|
return 0x07;
|
||||||
|
case 8:
|
||||||
|
return 0x7F;
|
||||||
|
case 9:
|
||||||
|
return 0x6F;
|
||||||
|
case 0xa:
|
||||||
|
return 0x77;
|
||||||
|
case 0xb:
|
||||||
|
return 0x7c;
|
||||||
|
case 0xC:
|
||||||
|
return 0x39;
|
||||||
|
case 0xd:
|
||||||
|
return 0x5e;
|
||||||
|
case 0xe:
|
||||||
|
return 0x79;
|
||||||
|
case 0xf:
|
||||||
|
return 0x71;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void display(uint16_t num){
|
||||||
|
uint8_t i = 0;
|
||||||
|
if (num > 9999) return;
|
||||||
|
while(num) {
|
||||||
|
digit[i] = num%10;
|
||||||
|
num = num/10;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void shift_left(void){
|
||||||
|
digit[3] = digit[2];
|
||||||
|
digit[2] = digit[1];
|
||||||
|
digit[1] = digit[0];
|
||||||
|
}
|
||||||
|
void start_display(void) {
|
||||||
|
/* timer interrupt setup */
|
||||||
|
INTCONbits.TMR0IE = 1;
|
||||||
|
INTCON2bits.TMR0IP = 1;
|
||||||
|
|
||||||
|
T0CONbits.T08BIT = 1;
|
||||||
|
T0CONbits.T0CS = 0; // Source internal oscilator
|
||||||
|
T0CONbits.PSA = 0;
|
||||||
|
T0CONbits.T0PS = 0x7;
|
||||||
|
T0CONbits.TMR0ON = 1;
|
||||||
|
}
|
||||||
|
void setup(void){
|
||||||
|
/* Port setup */
|
||||||
|
LATD = 0;
|
||||||
|
TRISD = 0;
|
||||||
|
|
||||||
|
TRISB = 0xf0;
|
||||||
|
LATB = 0x00;
|
||||||
|
ADCON1 = 0xf;
|
||||||
|
INTCON2bits.RBPU = 0;
|
||||||
|
|
||||||
|
TRISE = 0;
|
||||||
|
LATE = 0;
|
||||||
|
|
||||||
|
TRISA = 0;
|
||||||
|
LATA = 0;
|
||||||
|
|
||||||
|
/* Interrupt setup */
|
||||||
|
INTCONbits.GIE = 1;
|
||||||
|
INTCONbits.PEIE = 1;
|
||||||
|
INTCONbits.RBIE = 1;
|
||||||
|
INTCON2bits.RBIP = 1;
|
||||||
|
RCONbits.IPEN = 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
int main(void) {
|
||||||
|
uint16_t cuenta = 0;
|
||||||
|
setup();
|
||||||
|
start_display();
|
||||||
|
for (;;) {
|
||||||
|
PORTB = 0xe;
|
||||||
|
delay1ktcy(POLLINGRATE);
|
||||||
|
PORTB = 0xD;
|
||||||
|
delay1ktcy(POLLINGRATE);
|
||||||
|
PORTB = 0xB;
|
||||||
|
delay1ktcy(POLLINGRATE);
|
||||||
|
PORTB = 0x7;
|
||||||
|
delay1ktcy(POLLINGRATE);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
115
c/keypad/main.hex
Normal file
115
c/keypad/main.hex
Normal file
|
|
@ -0,0 +1,115 @@
|
||||||
|
:020000040000FA
|
||||||
|
:04000000F9EF01F023
|
||||||
|
:08000800A3EF02F0D9CFE5FFE0
|
||||||
|
:10001000E1CFD9FF00C0E5FF01C0E5FF02C0E5FF69
|
||||||
|
:1000200003C0E5FF04C0E5FF05C0E5FF06C0E5FF2E
|
||||||
|
:1000300007C0E5FF08C0E5FF020EDBCF00F0030EAE
|
||||||
|
:10004000DBCF01F00050026E0150036E270E035CFF
|
||||||
|
:1000500002E1100E025C38E2026A0150001034E046
|
||||||
|
:10006000600E0224036E046A000E04220050056E26
|
||||||
|
:100070000150066E000EE56E0A0EE56E0650E56E46
|
||||||
|
:100080000550E56E47EC01F0076EF3CF08F0040E63
|
||||||
|
:10009000E12603C0E9FF04C0EAFF07C0EFFF000E3E
|
||||||
|
:1000A000E56E0A0EE56E0650E56E0550E56E4EEC07
|
||||||
|
:1000B00002F0036EF3CF04F0040EE1260350006E4D
|
||||||
|
:1000C0000450016E022AC9D7E4CF08F0E4CF07F04C
|
||||||
|
:1000D000E4CF06F0E4CF05F0E4CF04F0E4CF03F082
|
||||||
|
:1000E000E4CF02F0E4CF01F0E4CF00F0E4CFD9FF99
|
||||||
|
:1000F0001200D9CFE5FFE1CFD9FF00C0E5FF01C075
|
||||||
|
:10010000E5FF02C0E5FF006A81CF01F0026AF00E50
|
||||||
|
:100110000116026A0150F00A02E1025001E001D02A
|
||||||
|
:100120004BD081B011D081B802D0010E006E81BADF
|
||||||
|
:1001300002D0020E006E81BC02D0030E006E81BEA2
|
||||||
|
:1001400036D00A0E006E33D081B211D081B802D001
|
||||||
|
:10015000040E006E81BA02D0050E006E81BC02D082
|
||||||
|
:10016000060E006E81BE23D00B0E006E20D081B42F
|
||||||
|
:1001700011D081B802D0070E006E81BA02D0080EED
|
||||||
|
:10018000006E81BC02D0090E006E81BE10D00C0E34
|
||||||
|
:10019000006E0DD081B60BD081BA01D0006A81BC4F
|
||||||
|
:1001A00002D00F0E006E81BE02D00D0E006E11EC5B
|
||||||
|
:1001B00003F000500001606FE4CF02F0E4CF01F0E3
|
||||||
|
:1001C000E4CF00F0E4CFD9FF1200D9CFE5FFE1CFB3
|
||||||
|
:1001D000D9FF00C0E5FF020EDBCF00F0100E005C7F
|
||||||
|
:1001E000D8B04FD0FA6AFB6A0034FA36E834FA36EF
|
||||||
|
:1001F000FC0B020FE56E020EFA22000EFB22E45009
|
||||||
|
:10020000F96E21EF01F023EF01F025EF01F027EF68
|
||||||
|
:1002100001F029EF01F02BEF01F02DEF01F02FEFAE
|
||||||
|
:1002200001F031EF01F033EF01F035EF01F037EF7E
|
||||||
|
:1002300001F039EF01F03BEF01F03DEF01F03FEF4E
|
||||||
|
:1002400001F03F0E1FD0060E1DD05B0E1BD04F0ECF
|
||||||
|
:1002500019D0660E17D06D0E15D07D0E13D0070E77
|
||||||
|
:1002600011D07F0E0FD06F0E0DD0770E0BD07C0EFD
|
||||||
|
:1002700009D0390E07D05E0E05D0790E03D0710E6D
|
||||||
|
:1002800001D0E86AE4CF00F0E4CFD9FF1200D9CF63
|
||||||
|
:10029000E5FFE1CFD9FF00C0E5FF01C0E5FF02C0E7
|
||||||
|
:1002A000E5FF03C0E5FF04C0E5FF05C0E5FF06C0AC
|
||||||
|
:1002B000E5FF020EDBCF00F0030EDBCF01F0040EF2
|
||||||
|
:1002C000DBCF02F0050EDBCF03F0046A056A0350B2
|
||||||
|
:1002D000800BE844066E065011E1025002260336F8
|
||||||
|
:1002E0000350015C02E10250005C04E2D89003324A
|
||||||
|
:1002F000023204D0052A05C004F0E9D70350015C9E
|
||||||
|
:1003000002E10250005C04E30250005E0350015A17
|
||||||
|
:10031000D8900332023204C005F004060550EEE125
|
||||||
|
:1003200001C0F3FF0050E4CF06F0E4CF05F0E4CFC6
|
||||||
|
:1003300004F0E4CF03F0E4CF02F0E4CF01F0E4CF27
|
||||||
|
:1003400000F0E4CFD9FF1200D9CFE5FFE1CFD9FF0C
|
||||||
|
:1003500000C0E5FF01C0E5FF8D6A896A600E0001FB
|
||||||
|
:100360006425006E016A000E012200C0E9FF01C091
|
||||||
|
:10037000EAFFEFCF00F00050E56EE5EC00F08C6E88
|
||||||
|
:10038000E652040E0001645D25E2FA6AFB6A000190
|
||||||
|
:100390006435FA36E834FA36FC0BAA0FE56E030E24
|
||||||
|
:1003A000FA22000EFB22E450F96EDDEF01F0E1EFDE
|
||||||
|
:1003B00001F0E4EF01F0E7EF01F0896A040E8D6EC1
|
||||||
|
:1003C00009D0020E8D6E06D0010E8D6E03D08D6A9F
|
||||||
|
:1003D000100E896E0001642B040E0001645D02E3BF
|
||||||
|
:1003E0000001646BE4CF01F0E4CF00F0E4CFD9FF6B
|
||||||
|
:1003F000120011EEFFF021EEFFF0F86AA68EA69C27
|
||||||
|
:1004000007EEFFF00068ED6A0050FDE1A80EF66E01
|
||||||
|
:10041000060EF76E000EF86E0900F5CF05F0090024
|
||||||
|
:10042000F5CF06F034D00900F5CF00F00900F5CF84
|
||||||
|
:1004300001F00900F5CF02F009000900F5CFE9FF4E
|
||||||
|
:100440000900F5CFEAFF090009000900F5CF03F024
|
||||||
|
:100450000900F5CF04F009000900F6CF07F0F7CF47
|
||||||
|
:1004600008F0F8CF09F000C0F6FF01C0F7FF02C0A6
|
||||||
|
:10047000F8FF03D00900F5CFEEFF0306FBE2040608
|
||||||
|
:10048000F9E207C0F6FF08C0F7FF09C0F8FF05064C
|
||||||
|
:10049000CAE20606C8E2F7EC02F0FFD7D9CFE5FFC3
|
||||||
|
:1004A000E1CFD9FF00C0E5FF01C0E5FF02C0E5FFD5
|
||||||
|
:1004B00003C0E5FF04C0E5FF05C0E5FF06C0E5FF9A
|
||||||
|
:1004C00007C0E5FF020EDBCF00F0030EDBCF01F02B
|
||||||
|
:1004D000040EDBCF02F0050EDBCF03F0046A056AE1
|
||||||
|
:1004E000100E066E0150800BE844076E0050002687
|
||||||
|
:1004F00001360450042605360750D8A40480035062
|
||||||
|
:10050000055C02E10250045C05E30250045E035006
|
||||||
|
:10051000055A008006060650E5E101C0F3FF0050D1
|
||||||
|
:10052000E4CF07F0E4CF06F0E4CF05F0E4CF04F029
|
||||||
|
:10053000E4CF03F0E4CF02F0E4CF01F0E4CF00F029
|
||||||
|
:10054000E4CFD9FF1200D8CFE5FFE0CFE5FFE56E9D
|
||||||
|
:10055000F3CFE5FFF4CFE5FFE9CFE5FFEACFE5FF15
|
||||||
|
:10056000FACFE5FFFBCFE5FFD9CFE5FFE1CFD9FF1C
|
||||||
|
:10057000F2A404D0A4EC01F0FA0ED66EF294F2A02C
|
||||||
|
:1005800002D079EC00F0F290E4CFD9FFE4CFFBFF8A
|
||||||
|
:10059000E4CFFAFFE4CFEAFFE4CFE9FFE4CFF4FFD2
|
||||||
|
:1005A000E4CFF3FFE450E4CFE0FFE4CFD8FF100046
|
||||||
|
:1005B000E806E56E630EEBEC02F0E4500BE000D0D1
|
||||||
|
:1005C000E56E630EEBEC02F000D000D00000E450CA
|
||||||
|
:1005D000E82EF6D71200E8060000E85007E000D049
|
||||||
|
:1005E00000D000D000D00000E82EFAD712002BEC8B
|
||||||
|
:1005F00003F043EC03F00E0E816E640ED8EC02F0B3
|
||||||
|
:100600000D0E816E640ED8EC02F00B0E816E640E3E
|
||||||
|
:10061000D8EC02F0070E816E640ED8EC02F0EBD736
|
||||||
|
:100620001200D9CFE5FFE1CFD9FF00C0E5FF62C0DE
|
||||||
|
:1006300000F000500001636F61C000F00050000145
|
||||||
|
:10064000626F60C000F000500001616FE4CF00F005
|
||||||
|
:10065000E4CFD9FF1200D9CFE5FFE1CFD9FF8C6AF3
|
||||||
|
:10066000956AF00E936E8A6A0F0EC16EF19E966ABD
|
||||||
|
:100670008D6A926A896AF28EF28CF286F180D08E4F
|
||||||
|
:10068000E4CFD9FF1200D9CFE5FFE1CFD9FFF28A3D
|
||||||
|
:10069000F184D58CD59AD596D550F80B0709D56E2F
|
||||||
|
:1006A000D58EE4CFD9FF12000100B606000060002D
|
||||||
|
:0C06B00000000600000000000000000038
|
||||||
|
:020000040030CA
|
||||||
|
:010001000CF2
|
||||||
|
:010003001EDE
|
||||||
|
:02000500038175
|
||||||
|
:00000001FF
|
||||||
32
c/keypad/makefile
Executable file
32
c/keypad/makefile
Executable file
|
|
@ -0,0 +1,32 @@
|
||||||
|
# My pic workflow makefile by Fernando R Jacobo
|
||||||
|
# Dependencies
|
||||||
|
# SDCC Small Device C Compiler
|
||||||
|
# pk2cmd for pickit pic programmers
|
||||||
|
|
||||||
|
# C compiler variables
|
||||||
|
SRC=*.c
|
||||||
|
CC=sdcc
|
||||||
|
FAMILY=pic16
|
||||||
|
PROC=18f4550
|
||||||
|
|
||||||
|
# ASM and program variables
|
||||||
|
PPROC=PIC18F4550
|
||||||
|
ASMPROC=18F4550
|
||||||
|
|
||||||
|
all: $(SRC:.c=.hex)
|
||||||
|
|
||||||
|
comp: $(SRC)
|
||||||
|
$(CC) --use-non-free -m$(FAMILY) -p$(PROC) $^
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(SRC:.c=.asm) $(SRC:.c=.cod) $(SRC:.c=.hex) $(SRC:.c=.lst) $(SRC:.c=.o)
|
||||||
|
|
||||||
|
program:
|
||||||
|
pk2cmd -M -P${PPROC} -Fmain.hex
|
||||||
|
|
||||||
|
asm: *.asm
|
||||||
|
gpasm -p ${ASMPROC} -o main.hex $^
|
||||||
|
|
||||||
|
asmp: asm program
|
||||||
|
|
||||||
|
.PHONY: all clean
|
||||||
878
c/menu_cuentas/main.asm
Executable file
878
c/menu_cuentas/main.asm
Executable file
|
|
@ -0,0 +1,878 @@
|
||||||
|
;--------------------------------------------------------
|
||||||
|
; 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 _number_to_7seg
|
||||||
|
global _display
|
||||||
|
global _count1k
|
||||||
|
global _count1kbak
|
||||||
|
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 _delay100ktcy
|
||||||
|
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 160; main.c setup();
|
||||||
|
CALL _setup
|
||||||
|
_00242_DS_:
|
||||||
|
; .line 162; main.c count1kbak();
|
||||||
|
CALL _count1kbak
|
||||||
|
BRA _00242_DS_
|
||||||
|
; .line 165; main.c }
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
; ; Starting pCode block
|
||||||
|
S_main__setup code
|
||||||
|
_setup:
|
||||||
|
; .line 121; main.c void setup(void){
|
||||||
|
MOVFF FSR2L, POSTDEC1
|
||||||
|
MOVFF FSR1L, FSR2L
|
||||||
|
; .line 123; main.c LATD = 0;
|
||||||
|
CLRF _LATD
|
||||||
|
; .line 124; main.c TRISD = 0;
|
||||||
|
CLRF _TRISD
|
||||||
|
; .line 126; main.c TRISB = 0xff;
|
||||||
|
MOVLW 0xff
|
||||||
|
MOVWF _TRISB
|
||||||
|
; .line 127; main.c LATB = 0x00;
|
||||||
|
CLRF _LATB
|
||||||
|
; .line 128; main.c ADCON1 = 0xf;
|
||||||
|
MOVLW 0x0f
|
||||||
|
MOVWF _ADCON1
|
||||||
|
; .line 130; main.c TRISE = 0;
|
||||||
|
CLRF _TRISE
|
||||||
|
; .line 131; main.c LATE = 0;
|
||||||
|
CLRF _LATE
|
||||||
|
; .line 133; main.c TRISA = 0;
|
||||||
|
CLRF _TRISA
|
||||||
|
; .line 134; main.c LATA = 0;
|
||||||
|
CLRF _LATA
|
||||||
|
; .line 137; main.c INTCONbits.GIE = 1;
|
||||||
|
BSF _INTCONbits, 7
|
||||||
|
; .line 138; main.c INTCONbits.PEIE = 1;
|
||||||
|
BSF _INTCONbits, 6
|
||||||
|
; .line 139; main.c INTCONbits.RBIE = 0;
|
||||||
|
BCF _INTCONbits, 3
|
||||||
|
; .line 140; main.c INTCON2bits.RBPU = 0;
|
||||||
|
BCF _INTCON2bits, 7
|
||||||
|
; .line 141; main.c INTCON2bits.RBIP = 1;
|
||||||
|
BSF _INTCON2bits, 0
|
||||||
|
; .line 142; main.c RCONbits.IPEN = 1;
|
||||||
|
BSF _RCONbits, 7
|
||||||
|
; .line 145; main.c INTCONbits.TMR0IE = 1;
|
||||||
|
BSF _INTCONbits, 5
|
||||||
|
; .line 146; main.c INTCON2bits.TMR0IP = 1;
|
||||||
|
BSF _INTCON2bits, 2
|
||||||
|
; .line 148; main.c T0CONbits.T08BIT = 1;
|
||||||
|
BSF _T0CONbits, 6
|
||||||
|
; .line 149; main.c T0CONbits.T0CS = 0; // Source internal oscilator
|
||||||
|
BCF _T0CONbits, 5
|
||||||
|
; .line 150; main.c T0CONbits.PSA = 0;
|
||||||
|
BCF _T0CONbits, 3
|
||||||
|
; .line 154; main.c T0CONbits.T0PS = 0x7;
|
||||||
|
MOVF _T0CONbits, W
|
||||||
|
ANDLW 0xf8
|
||||||
|
IORLW 0x07
|
||||||
|
MOVWF _T0CONbits
|
||||||
|
; .line 155; main.c T0CONbits.TMR0ON = 1;
|
||||||
|
BSF _T0CONbits, 7
|
||||||
|
; .line 156; main.c }
|
||||||
|
MOVFF PREINC1, FSR2L
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
; ; Starting pCode block
|
||||||
|
S_main__count1kbak code
|
||||||
|
_count1kbak:
|
||||||
|
; .line 114; main.c void count1kbak(void) {
|
||||||
|
MOVFF FSR2L, POSTDEC1
|
||||||
|
MOVFF FSR1L, FSR2L
|
||||||
|
MOVFF r0x00, POSTDEC1
|
||||||
|
MOVFF r0x01, POSTDEC1
|
||||||
|
MOVFF r0x02, POSTDEC1
|
||||||
|
MOVFF r0x03, POSTDEC1
|
||||||
|
; .line 115; main.c for(int i = 9999; i >= 0; i--) {
|
||||||
|
MOVLW 0x0f
|
||||||
|
MOVWF r0x00
|
||||||
|
MOVLW 0x27
|
||||||
|
MOVWF r0x01
|
||||||
|
_00229_DS_:
|
||||||
|
BSF STATUS, 0
|
||||||
|
BTFSS r0x01, 7
|
||||||
|
BCF STATUS, 0
|
||||||
|
BC _00231_DS_
|
||||||
|
; .line 116; main.c display(i);
|
||||||
|
MOVF r0x00, W
|
||||||
|
MOVWF r0x02
|
||||||
|
MOVF r0x01, W
|
||||||
|
MOVWF r0x03
|
||||||
|
MOVF r0x03, W
|
||||||
|
MOVWF POSTDEC1
|
||||||
|
MOVF r0x02, W
|
||||||
|
MOVWF POSTDEC1
|
||||||
|
CALL _display
|
||||||
|
MOVF POSTINC1, F
|
||||||
|
MOVF POSTINC1, F
|
||||||
|
; .line 117; main.c delay100ktcy(5);
|
||||||
|
MOVLW 0x05
|
||||||
|
CALL _delay100ktcy
|
||||||
|
; .line 115; main.c for(int i = 9999; i >= 0; i--) {
|
||||||
|
MOVLW 0xff
|
||||||
|
ADDWF r0x00, F
|
||||||
|
ADDWFC r0x01, F
|
||||||
|
BRA _00229_DS_
|
||||||
|
_00231_DS_:
|
||||||
|
; .line 119; main.c }
|
||||||
|
MOVFF PREINC1, r0x03
|
||||||
|
MOVFF PREINC1, r0x02
|
||||||
|
MOVFF PREINC1, r0x01
|
||||||
|
MOVFF PREINC1, r0x00
|
||||||
|
MOVFF PREINC1, FSR2L
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
; ; Starting pCode block
|
||||||
|
S_main__count1k code
|
||||||
|
_count1k:
|
||||||
|
; .line 108; main.c void count1k(void) {
|
||||||
|
MOVFF FSR2L, POSTDEC1
|
||||||
|
MOVFF FSR1L, FSR2L
|
||||||
|
MOVFF r0x00, POSTDEC1
|
||||||
|
MOVFF r0x01, POSTDEC1
|
||||||
|
MOVFF r0x02, POSTDEC1
|
||||||
|
MOVFF r0x03, POSTDEC1
|
||||||
|
; .line 109; main.c for(int i = 0; i < 9999; i++) {
|
||||||
|
CLRF r0x00
|
||||||
|
CLRF r0x01
|
||||||
|
_00205_DS_:
|
||||||
|
MOVF r0x01, W
|
||||||
|
ADDLW 0x80
|
||||||
|
ADDLW 0x59
|
||||||
|
BNZ _00222_DS_
|
||||||
|
MOVLW 0x0f
|
||||||
|
SUBWF r0x00, W
|
||||||
|
_00222_DS_:
|
||||||
|
BC _00207_DS_
|
||||||
|
; .line 110; main.c display(i);
|
||||||
|
MOVF r0x00, W
|
||||||
|
MOVWF r0x02
|
||||||
|
MOVF r0x01, W
|
||||||
|
MOVWF r0x03
|
||||||
|
MOVF r0x03, W
|
||||||
|
MOVWF POSTDEC1
|
||||||
|
MOVF r0x02, W
|
||||||
|
MOVWF POSTDEC1
|
||||||
|
CALL _display
|
||||||
|
MOVF POSTINC1, F
|
||||||
|
MOVF POSTINC1, F
|
||||||
|
; .line 111; main.c delay100ktcy(5);
|
||||||
|
MOVLW 0x05
|
||||||
|
CALL _delay100ktcy
|
||||||
|
; .line 109; main.c for(int i = 0; i < 9999; i++) {
|
||||||
|
INFSNZ r0x00, F
|
||||||
|
INCF r0x01, F
|
||||||
|
BRA _00205_DS_
|
||||||
|
_00207_DS_:
|
||||||
|
; .line 113; main.c }
|
||||||
|
MOVFF PREINC1, r0x03
|
||||||
|
MOVFF PREINC1, r0x02
|
||||||
|
MOVFF PREINC1, r0x01
|
||||||
|
MOVFF PREINC1, r0x00
|
||||||
|
MOVFF PREINC1, FSR2L
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
; ; Starting pCode block
|
||||||
|
S_main__display code
|
||||||
|
_display:
|
||||||
|
; .line 98; 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 100; main.c if (num > 9999) return;
|
||||||
|
MOVF r0x00, W
|
||||||
|
MOVWF r0x02
|
||||||
|
MOVF r0x01, W
|
||||||
|
MOVWF r0x03
|
||||||
|
MOVLW 0x27
|
||||||
|
SUBWF r0x03, W
|
||||||
|
BNZ _00198_DS_
|
||||||
|
MOVLW 0x10
|
||||||
|
SUBWF r0x02, W
|
||||||
|
_00198_DS_:
|
||||||
|
BC _00177_DS_
|
||||||
|
; .line 101; main.c while(num) {
|
||||||
|
CLRF r0x02
|
||||||
|
_00174_DS_:
|
||||||
|
MOVF r0x01, W
|
||||||
|
IORWF r0x00, W
|
||||||
|
BZ _00177_DS_
|
||||||
|
; .line 102; 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 103; 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 104; main.c i++;
|
||||||
|
INCF r0x02, F
|
||||||
|
BRA _00174_DS_
|
||||||
|
_00177_DS_:
|
||||||
|
; .line 106; 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 60; 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 61; main.c switch (number) {
|
||||||
|
MOVLW 0x10
|
||||||
|
SUBWF r0x00, W
|
||||||
|
BTFSC STATUS, 0
|
||||||
|
BRA _00156_DS_
|
||||||
|
CLRF PCLATH
|
||||||
|
CLRF PCLATU
|
||||||
|
RLCF r0x00, W
|
||||||
|
RLCF PCLATH, F
|
||||||
|
RLCF WREG, W
|
||||||
|
RLCF PCLATH, F
|
||||||
|
ANDLW 0xfc
|
||||||
|
ADDLW LOW(_00167_DS_)
|
||||||
|
MOVWF POSTDEC1
|
||||||
|
MOVLW HIGH(_00167_DS_)
|
||||||
|
ADDWFC PCLATH, F
|
||||||
|
MOVLW UPPER(_00167_DS_)
|
||||||
|
ADDWFC PCLATU, F
|
||||||
|
MOVF PREINC1, W
|
||||||
|
MOVWF PCL
|
||||||
|
_00167_DS_:
|
||||||
|
GOTO _00140_DS_
|
||||||
|
GOTO _00141_DS_
|
||||||
|
GOTO _00142_DS_
|
||||||
|
GOTO _00143_DS_
|
||||||
|
GOTO _00144_DS_
|
||||||
|
GOTO _00145_DS_
|
||||||
|
GOTO _00146_DS_
|
||||||
|
GOTO _00147_DS_
|
||||||
|
GOTO _00148_DS_
|
||||||
|
GOTO _00149_DS_
|
||||||
|
GOTO _00150_DS_
|
||||||
|
GOTO _00151_DS_
|
||||||
|
GOTO _00152_DS_
|
||||||
|
GOTO _00153_DS_
|
||||||
|
GOTO _00154_DS_
|
||||||
|
GOTO _00155_DS_
|
||||||
|
_00140_DS_:
|
||||||
|
; .line 63; main.c return 0x3F;
|
||||||
|
MOVLW 0x3f
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00141_DS_:
|
||||||
|
; .line 65; main.c return 0x06;
|
||||||
|
MOVLW 0x06
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00142_DS_:
|
||||||
|
; .line 67; main.c return 0x5B;
|
||||||
|
MOVLW 0x5b
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00143_DS_:
|
||||||
|
; .line 69; main.c return 0x4F;
|
||||||
|
MOVLW 0x4f
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00144_DS_:
|
||||||
|
; .line 71; main.c return 0x66;
|
||||||
|
MOVLW 0x66
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00145_DS_:
|
||||||
|
; .line 73; main.c return 0x6D;
|
||||||
|
MOVLW 0x6d
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00146_DS_:
|
||||||
|
; .line 75; main.c return 0x7D;
|
||||||
|
MOVLW 0x7d
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00147_DS_:
|
||||||
|
; .line 77; main.c return 0x07;
|
||||||
|
MOVLW 0x07
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00148_DS_:
|
||||||
|
; .line 79; main.c return 0x7F;
|
||||||
|
MOVLW 0x7f
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00149_DS_:
|
||||||
|
; .line 81; main.c return 0x6F;
|
||||||
|
MOVLW 0x6f
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00150_DS_:
|
||||||
|
; .line 83; main.c return 0x77;
|
||||||
|
MOVLW 0x77
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00151_DS_:
|
||||||
|
; .line 85; main.c return 0x7c;
|
||||||
|
MOVLW 0x7c
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00152_DS_:
|
||||||
|
; .line 87; main.c return 0x39;
|
||||||
|
MOVLW 0x39
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00153_DS_:
|
||||||
|
; .line 89; main.c return 0x5e;
|
||||||
|
MOVLW 0x5e
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00154_DS_:
|
||||||
|
; .line 91; main.c return 0x79;
|
||||||
|
MOVLW 0x79
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00155_DS_:
|
||||||
|
; .line 93; main.c return 0x71;
|
||||||
|
MOVLW 0x71
|
||||||
|
BRA _00158_DS_
|
||||||
|
_00156_DS_:
|
||||||
|
; .line 95; main.c return 0;
|
||||||
|
CLRF WREG
|
||||||
|
_00158_DS_:
|
||||||
|
; .line 97; main.c }
|
||||||
|
MOVFF PREINC1, r0x00
|
||||||
|
MOVFF PREINC1, FSR2L
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
; ; Starting pCode block
|
||||||
|
S_main__tmr_isr code
|
||||||
|
_tmr_isr:
|
||||||
|
; .line 37; main.c void tmr_isr(void){
|
||||||
|
MOVFF FSR2L, POSTDEC1
|
||||||
|
MOVFF FSR1L, FSR2L
|
||||||
|
MOVFF r0x00, POSTDEC1
|
||||||
|
MOVFF r0x01, POSTDEC1
|
||||||
|
; .line 38; main.c LATA = LATE = 0;
|
||||||
|
CLRF _LATE
|
||||||
|
CLRF _LATA
|
||||||
|
; .line 39; 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 40; main.c switch (dsp_en) {
|
||||||
|
MOVLW 0x04
|
||||||
|
BANKSEL _dsp_en
|
||||||
|
SUBWF _dsp_en, W, B
|
||||||
|
BC _00116_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(_00134_DS_)
|
||||||
|
MOVWF POSTDEC1
|
||||||
|
MOVLW HIGH(_00134_DS_)
|
||||||
|
ADDWFC PCLATH, F
|
||||||
|
MOVLW UPPER(_00134_DS_)
|
||||||
|
ADDWFC PCLATU, F
|
||||||
|
MOVF PREINC1, W
|
||||||
|
MOVWF PCL
|
||||||
|
_00134_DS_:
|
||||||
|
GOTO _00112_DS_
|
||||||
|
GOTO _00113_DS_
|
||||||
|
GOTO _00114_DS_
|
||||||
|
GOTO _00115_DS_
|
||||||
|
_00112_DS_:
|
||||||
|
; .line 42; main.c LATA = 0;
|
||||||
|
CLRF _LATA
|
||||||
|
; .line 43; main.c LATE = 0x4;
|
||||||
|
MOVLW 0x04
|
||||||
|
MOVWF _LATE
|
||||||
|
; .line 44; main.c break;
|
||||||
|
BRA _00116_DS_
|
||||||
|
_00113_DS_:
|
||||||
|
; .line 46; main.c LATE = 0x2;
|
||||||
|
MOVLW 0x02
|
||||||
|
MOVWF _LATE
|
||||||
|
; .line 47; main.c break;
|
||||||
|
BRA _00116_DS_
|
||||||
|
_00114_DS_:
|
||||||
|
; .line 49; main.c LATE = 0x1;
|
||||||
|
MOVLW 0x01
|
||||||
|
MOVWF _LATE
|
||||||
|
; .line 50; main.c break;
|
||||||
|
BRA _00116_DS_
|
||||||
|
_00115_DS_:
|
||||||
|
; .line 52; main.c LATE = 0;
|
||||||
|
CLRF _LATE
|
||||||
|
; .line 53; main.c LATA = 0x10;
|
||||||
|
MOVLW 0x10
|
||||||
|
MOVWF _LATA
|
||||||
|
_00116_DS_:
|
||||||
|
BANKSEL _dsp_en
|
||||||
|
; .line 56; main.c dsp_en++;
|
||||||
|
INCF _dsp_en, F, B
|
||||||
|
; .line 57; main.c if (dsp_en > 3) dsp_en = 0;
|
||||||
|
MOVLW 0x04
|
||||||
|
BANKSEL _dsp_en
|
||||||
|
SUBWF _dsp_en, W, B
|
||||||
|
BNC _00119_DS_
|
||||||
|
BANKSEL _dsp_en
|
||||||
|
CLRF _dsp_en, B
|
||||||
|
_00119_DS_:
|
||||||
|
; .line 58; main.c }
|
||||||
|
MOVFF PREINC1, r0x01
|
||||||
|
MOVFF PREINC1, r0x00
|
||||||
|
MOVFF PREINC1, FSR2L
|
||||||
|
RETURN
|
||||||
|
|
||||||
|
; ; Starting pCode block
|
||||||
|
S_main__isr code
|
||||||
|
_isr:
|
||||||
|
; .line 29; 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 30; main.c if (INTCONbits.TMR0IF){
|
||||||
|
BTFSS _INTCONbits, 2
|
||||||
|
BRA _00106_DS_
|
||||||
|
; .line 31; main.c tmr_isr();
|
||||||
|
CALL _tmr_isr
|
||||||
|
; .line 32; main.c TMR0 = RATE;
|
||||||
|
MOVLW 0xe6
|
||||||
|
MOVWF _TMR0
|
||||||
|
_00106_DS_:
|
||||||
|
; .line 34; main.c INTCONbits.TMR0IF = 0;
|
||||||
|
BCF _INTCONbits, 2
|
||||||
|
; .line 35; 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: 974 (0x03ce) bytes ( 0.74%)
|
||||||
|
; 487 (0x01e7) words
|
||||||
|
; udata size: 0 (0x0000) bytes ( 0.00%)
|
||||||
|
; access size: 9 (0x0009) bytes
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
165
c/menu_cuentas/main.c
Executable file
165
c/menu_cuentas/main.c
Executable file
|
|
@ -0,0 +1,165 @@
|
||||||
|
#include <delay.h>
|
||||||
|
#include <pic18fregs.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
// FUSES START
|
||||||
|
#pragma config XINST = OFF
|
||||||
|
#pragma config FOSC = HS
|
||||||
|
#pragma config WDT = OFF
|
||||||
|
#pragma config LVP = OFF
|
||||||
|
#pragma config MCLRE = OFF
|
||||||
|
|
||||||
|
#define NDIGITS 4
|
||||||
|
#define RATE 230
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t digit[NDIGITS] = { 0 };
|
||||||
|
uint8_t dsp_en = 0;
|
||||||
|
|
||||||
|
void isr(void) __interrupt (1);
|
||||||
|
void tmr_isr(void);
|
||||||
|
uint8_t number_to_7seg(uint8_t);
|
||||||
|
void display(uint16_t);
|
||||||
|
void count1k(void);
|
||||||
|
void count1kbak(void);
|
||||||
|
void setup(void);
|
||||||
|
int main(void);
|
||||||
|
|
||||||
|
|
||||||
|
void isr(void) __interrupt (1) {
|
||||||
|
if (INTCONbits.TMR0IF){
|
||||||
|
tmr_isr();
|
||||||
|
TMR0 = RATE;
|
||||||
|
}
|
||||||
|
INTCONbits.TMR0IF = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tmr_isr(void){
|
||||||
|
LATA = LATE = 0;
|
||||||
|
LATD = number_to_7seg(digit[dsp_en]);
|
||||||
|
switch (dsp_en) {
|
||||||
|
case 0:
|
||||||
|
LATA = 0;
|
||||||
|
LATE = 0x4;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
LATE = 0x2;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
LATE = 0x1;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
LATE = 0;
|
||||||
|
LATA = 0x10;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
dsp_en++;
|
||||||
|
if (dsp_en > 3) dsp_en = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t number_to_7seg(uint8_t number) {
|
||||||
|
switch (number) {
|
||||||
|
case 0:
|
||||||
|
return 0x3F;
|
||||||
|
case 1:
|
||||||
|
return 0x06;
|
||||||
|
case 2:
|
||||||
|
return 0x5B;
|
||||||
|
case 3:
|
||||||
|
return 0x4F;
|
||||||
|
case 4:
|
||||||
|
return 0x66;
|
||||||
|
case 5:
|
||||||
|
return 0x6D;
|
||||||
|
case 6:
|
||||||
|
return 0x7D;
|
||||||
|
case 7:
|
||||||
|
return 0x07;
|
||||||
|
case 8:
|
||||||
|
return 0x7F;
|
||||||
|
case 9:
|
||||||
|
return 0x6F;
|
||||||
|
case 0xa:
|
||||||
|
return 0x77;
|
||||||
|
case 0xb:
|
||||||
|
return 0x7c;
|
||||||
|
case 0xC:
|
||||||
|
return 0x39;
|
||||||
|
case 0xd:
|
||||||
|
return 0x5e;
|
||||||
|
case 0xe:
|
||||||
|
return 0x79;
|
||||||
|
case 0xf:
|
||||||
|
return 0x71;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void display(uint16_t num){
|
||||||
|
uint8_t i = 0;
|
||||||
|
if (num > 9999) return;
|
||||||
|
while(num) {
|
||||||
|
digit[i] = num%10;
|
||||||
|
num = num/10;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void count1k(void) {
|
||||||
|
for(int i = 0; i < 9999; i++) {
|
||||||
|
display(i);
|
||||||
|
delay100ktcy(5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void count1kbak(void) {
|
||||||
|
for(int i = 9999; i >= 0; i--) {
|
||||||
|
display(i);
|
||||||
|
delay100ktcy(5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup(void){
|
||||||
|
/* Port setup */
|
||||||
|
LATD = 0;
|
||||||
|
TRISD = 0;
|
||||||
|
|
||||||
|
TRISB = 0xff;
|
||||||
|
LATB = 0x00;
|
||||||
|
ADCON1 = 0xf;
|
||||||
|
|
||||||
|
TRISE = 0;
|
||||||
|
LATE = 0;
|
||||||
|
|
||||||
|
TRISA = 0;
|
||||||
|
LATA = 0;
|
||||||
|
|
||||||
|
/* Interrupt setup */
|
||||||
|
INTCONbits.GIE = 1;
|
||||||
|
INTCONbits.PEIE = 1;
|
||||||
|
INTCONbits.RBIE = 0;
|
||||||
|
INTCON2bits.RBPU = 0;
|
||||||
|
INTCON2bits.RBIP = 1;
|
||||||
|
RCONbits.IPEN = 1;
|
||||||
|
|
||||||
|
/* timer interrupt setup */
|
||||||
|
INTCONbits.TMR0IE = 1;
|
||||||
|
INTCON2bits.TMR0IP = 1;
|
||||||
|
|
||||||
|
T0CONbits.T08BIT = 1;
|
||||||
|
T0CONbits.T0CS = 0; // Source internal oscilator
|
||||||
|
T0CONbits.PSA = 0;
|
||||||
|
//T0CONbits.T0PS0 = 1;
|
||||||
|
//T0CONbits.T0PS1 = 1;
|
||||||
|
//T0CONbits.T0PS2 = 1;
|
||||||
|
T0CONbits.T0PS = 0x7;
|
||||||
|
T0CONbits.TMR0ON = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
uint16_t cuenta = 0;
|
||||||
|
setup();
|
||||||
|
for (;;) {
|
||||||
|
count1kbak();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
110
c/menu_cuentas/main.hex
Executable file
110
c/menu_cuentas/main.hex
Executable file
|
|
@ -0,0 +1,110 @@
|
||||||
|
:020000040000FA
|
||||||
|
:040000008DEF01F08F
|
||||||
|
:08000800D3EF02F0D9CFE5FFB0
|
||||||
|
:10001000E1CFD9FF00C0E5FF01C0E5FF02C0E5FF69
|
||||||
|
:1000200003C0E5FF04C0E5FF05C0E5FF06C0E5FF2E
|
||||||
|
:1000300007C0E5FF08C0E5FF020EDBCF00F0030EAE
|
||||||
|
:10004000DBCF01F00050026E0150036E270E035CFF
|
||||||
|
:1000500002E1100E025C38E2026A0150001034E046
|
||||||
|
:10006000600E0224036E046A000E04220050056E26
|
||||||
|
:100070000150066E000EE56E0A0EE56E0650E56E46
|
||||||
|
:100080000550E56EDBEC00F0076EF3CF08F0040ED0
|
||||||
|
:10009000E12603C0E9FF04C0EAFF07C0EFFF000E3E
|
||||||
|
:1000A000E56E0A0EE56E0650E56E0550E56EE2EC73
|
||||||
|
:1000B00001F0036EF3CF04F0040EE1260350006E4E
|
||||||
|
:1000C0000450016E022AC9D7E4CF08F0E4CF07F04C
|
||||||
|
:1000D000E4CF06F0E4CF05F0E4CF04F0E4CF03F082
|
||||||
|
:1000E000E4CF02F0E4CF01F0E4CF00F0E4CFD9FF99
|
||||||
|
:1000F0001200D9CFE5FFE1CFD9FF00C0E5FF020E26
|
||||||
|
:10010000DBCF00F0100E005CD8B04FD0FA6AFB6A6B
|
||||||
|
:100110000034FA36E834FA36FC0B2A0FE56E010E8D
|
||||||
|
:10012000FA22000EFB22E450F96EB5EF00F0B7EFB3
|
||||||
|
:1001300000F0B9EF00F0BBEF00F0BDEF00F0BFEF53
|
||||||
|
:1001400000F0C1EF00F0C3EF00F0C5EF00F0C7EF23
|
||||||
|
:1001500000F0C9EF00F0CBEF00F0CDEF00F0CFEFF3
|
||||||
|
:1001600000F0D1EF00F0D3EF00F03F0E1FD0060EED
|
||||||
|
:100170001DD05B0E1BD04F0E19D0660E17D06D0E22
|
||||||
|
:1001800015D07D0E13D0070E11D07F0E0FD06F0E3D
|
||||||
|
:100190000DD0770E0BD07C0E09D0390E07D05E0E35
|
||||||
|
:1001A00005D0790E03D0710E01D0E86AE4CF00F0DB
|
||||||
|
:1001B000E4CFD9FF1200D9CFE5FFE1CFD9FF00C0CE
|
||||||
|
:1001C000E5FF01C0E5FF02C0E5FF03C0E5FF04C095
|
||||||
|
:1001D000E5FF05C0E5FF06C0E5FF020EDBCF00F03E
|
||||||
|
:1001E000030EDBCF01F0040EDBCF02F0050EDBCFF8
|
||||||
|
:1001F00003F0046A056A0350800BE844066E06505B
|
||||||
|
:1002000011E10250022603360350015C02E1025064
|
||||||
|
:10021000005C04E2D8900332023204D0052A05C003
|
||||||
|
:1002200004F0E9D70350015C02E10250005C04E3F2
|
||||||
|
:100230000250005E0350015AD8900332023204C0CB
|
||||||
|
:1002400005F004060550EEE101C0F3FF0050E4CFD5
|
||||||
|
:1002500006F0E4CF05F0E4CF04F0E4CF03F0E4CF00
|
||||||
|
:1002600002F0E4CF01F0E4CF00F0E4CFD9FF1200B8
|
||||||
|
:10027000D9CFE5FFE1CFD9FF00C0E5FF01C0E5FF21
|
||||||
|
:100280008D6A896A600E00016425006E016A000EA5
|
||||||
|
:10029000012200C0E9FF01C0EAFFEFCF00F00050EB
|
||||||
|
:1002A000E56E79EC00F08C6EE652040E0001645DA0
|
||||||
|
:1002B00025E2FA6AFB6A00016435FA36E834FA3658
|
||||||
|
:1002C000FC0BD20FE56E020EFA22000EFB22E45068
|
||||||
|
:1002D000F96E71EF01F075EF01F078EF01F07BEF4F
|
||||||
|
:1002E00001F0896A040E8D6E09D0020E8D6E06D063
|
||||||
|
:1002F000010E8D6E03D08D6A100E896E0001642B85
|
||||||
|
:10030000040E0001645D02E30001646BE4CF01F0C0
|
||||||
|
:10031000E4CF00F0E4CFD9FF120011EEFFF021EEA0
|
||||||
|
:10032000FFF0F86AA68EA69C07EEFFF00068ED6A63
|
||||||
|
:100330000050FDE14A0EF66E060EF76E000EF86EE6
|
||||||
|
:100340000900F5CF05F00900F5CF06F034D009001B
|
||||||
|
:10035000F5CF00F00900F5CF01F00900F5CF02F06C
|
||||||
|
:1003600009000900F5CFE9FF0900F5CFEAFF090010
|
||||||
|
:1003700009000900F5CF03F00900F5CF04F00900EA
|
||||||
|
:100380000900F6CF07F0F7CF08F0F8CF09F000C06A
|
||||||
|
:10039000F6FF01C0F7FF02C0F8FF03D00900F5CF58
|
||||||
|
:1003A000EEFF0306FBE20406F9E207C0F6FF08C011
|
||||||
|
:1003B000F7FF09C0F8FF0506CAE20606C8E22CEC02
|
||||||
|
:1003C00003F0FFD7D9CFE5FFE1CFD9FF00C0E5FFAC
|
||||||
|
:1003D00001C0E5FF02C0E5FF03C0E5FF04C0E5FF83
|
||||||
|
:1003E00005C0E5FF06C0E5FF07C0E5FF020EDBCF55
|
||||||
|
:1003F00000F0030EDBCF01F0040EDBCF02F0050EA0
|
||||||
|
:10040000DBCF03F0046A056A100E066E0150800B04
|
||||||
|
:10041000E844076E005000260136045004260536D5
|
||||||
|
:100420000750D8A404800350055C02E10250045C2C
|
||||||
|
:1004300005E30250045E0350055A0080060606508C
|
||||||
|
:10044000E5E101C0F3FF0050E4CF07F0E4CF06F090
|
||||||
|
:10045000E4CF05F0E4CF04F0E4CF03F0E4CF02F002
|
||||||
|
:10046000E4CF01F0E4CF00F0E4CFD9FF1200E806BA
|
||||||
|
:10047000E56E630E50EC02F0630E63EC02F0E450A4
|
||||||
|
:100480000EE000D0E56E630E50EC02F0630E63ECFC
|
||||||
|
:1004900002F000D000D00000E450E82EF3D71200A4
|
||||||
|
:1004A000E806E56E630E63EC02F0E4500BE000D06A
|
||||||
|
:1004B000E56E630E63EC02F000D000D00000E45063
|
||||||
|
:1004C000E82EF6D71200E8060000E85007E000D05A
|
||||||
|
:1004D00000D000D000D00000E82EFAD71200D9CF0B
|
||||||
|
:1004E000E5FFE1CFD9FF00C0E5FF01C0E5FF02C095
|
||||||
|
:1004F000E5FF03C0E5FF0F0E006E270E016ED880EA
|
||||||
|
:1005000001AED89013E20050026E0150036E03500A
|
||||||
|
:10051000E56E0250E56E06EC00F0E652E652050E7E
|
||||||
|
:1005200037EC02F0FF0E00260122E9D7E4CF03F0FA
|
||||||
|
:10053000E4CF02F0E4CF01F0E4CF00F0E4CFD9FF44
|
||||||
|
:100540001200D9CFE5FFE1CFD9FF00C0E5FF01C020
|
||||||
|
:10055000E5FF02C0E5FF03C0E5FF006A016A015044
|
||||||
|
:10056000800F590F02E10F0E005C12E20050026E84
|
||||||
|
:100570000150036E0350E56E0250E56E06EC00F08C
|
||||||
|
:10058000E652E652050E37EC02F0004A012AE7D7A0
|
||||||
|
:10059000E4CF03F0E4CF02F0E4CF01F0E4CF00F0C9
|
||||||
|
:1005A000E4CFD9FF1200D8CFE5FFE0CFE5FFE56E3D
|
||||||
|
:1005B000F3CFE5FFF4CFE5FFE9CFE5FFEACFE5FFB5
|
||||||
|
:1005C000FACFE5FFFBCFE5FFD9CFE5FFE1CFD9FFBC
|
||||||
|
:1005D000F2A404D038EC01F0E60ED66EF294E4CF2B
|
||||||
|
:1005E000D9FFE4CFFBFFE4CFFAFFE4CFEAFFE4CF8B
|
||||||
|
:1005F000E9FFE4CFF4FFE4CFF3FFE450E4CFE0FF02
|
||||||
|
:10060000E4CFD8FF1000D9CFE5FFE1CFD9FF8C6A46
|
||||||
|
:10061000956AFF0E936E8A6A0F0EC16E966A8D6A96
|
||||||
|
:10062000926A896AF28EF28CF296F19EF180D08EF7
|
||||||
|
:10063000F28AF184D58CD59AD596D550F80B070956
|
||||||
|
:10064000D56ED58EE4CFD9FF1200010064060000FC
|
||||||
|
:10065000600000000600000003EC03F06FEC02F005
|
||||||
|
:0A066000FDD71200000000000000AA
|
||||||
|
:020000040030CA
|
||||||
|
:010001000CF2
|
||||||
|
:010003001EDE
|
||||||
|
:02000500038175
|
||||||
|
:00000001FF
|
||||||
32
c/menu_cuentas/makefile
Executable file
32
c/menu_cuentas/makefile
Executable file
|
|
@ -0,0 +1,32 @@
|
||||||
|
# My pic workflow makefile by Fernando R Jacobo
|
||||||
|
# Dependencies
|
||||||
|
# SDCC Small Device C Compiler
|
||||||
|
# pk2cmd for pickit pic programmers
|
||||||
|
|
||||||
|
# C compiler variables
|
||||||
|
SRC=*.c
|
||||||
|
CC=sdcc
|
||||||
|
FAMILY=pic16
|
||||||
|
PROC=18f4550
|
||||||
|
|
||||||
|
# ASM and program variables
|
||||||
|
PPROC=PIC18F4550
|
||||||
|
ASMPROC=18F4550
|
||||||
|
|
||||||
|
all: $(SRC:.c=.hex)
|
||||||
|
|
||||||
|
comp: $(SRC)
|
||||||
|
$(CC) --use-non-free -m$(FAMILY) -p$(PROC) $^
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(SRC:.c=.asm) $(SRC:.c=.cod) $(SRC:.c=.hex) $(SRC:.c=.lst) $(SRC:.c=.o)
|
||||||
|
|
||||||
|
program:
|
||||||
|
pk2cmd -M -P${PPROC} -Fmain.hex
|
||||||
|
|
||||||
|
asm: *.asm
|
||||||
|
gpasm -p ${ASMPROC} -o main.hex $^
|
||||||
|
|
||||||
|
asmp: asm program
|
||||||
|
|
||||||
|
.PHONY: all clean
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
#include <pic18f4550.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
// Use this to define the interrupt vector for high-priority interrupts
|
|
||||||
void interrupt high_priority isr(void) {
|
|
||||||
// Check if it's a PORTB change interrupt
|
|
||||||
if (INTCON.RBIF) {
|
|
||||||
// Handle the change here
|
|
||||||
// Example: toggle a pin, read input, etc.
|
|
||||||
|
|
||||||
// Clear the interrupt flag
|
|
||||||
INTCON.RBIF = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void main(void) {
|
|
||||||
// Set PORTB pins RB4-RB7 as input
|
|
||||||
TRISB |= 0xF0; // Set RB4-RB7 as input (1)
|
|
||||||
|
|
||||||
// Enable PORTB change interrupt
|
|
||||||
INTCON.RBIE = 1; // Enable PORTB change interrupt
|
|
||||||
INTCON.RBIF = 0; // Clear PORTB interrupt flag
|
|
||||||
INTCON.GIE = 1; // Enable global interrupts
|
|
||||||
INTCON.PEIE = 1; // Enable peripheral interrupts (recommended)
|
|
||||||
|
|
||||||
// Main loop
|
|
||||||
while (1) {
|
|
||||||
// Your main code here (e.g., sleep, check flags, etc.)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user