From b65be9a7290d6482fa7bb5812b4623d1cb289912 Mon Sep 17 00:00:00 2001 From: Fernando R Jacobo Date: Wed, 7 May 2025 08:53:30 -0600 Subject: [PATCH] Added keypad example --- c/btest/main.asm | 432 ++++++++++++ c/btest/main.c | 56 ++ c/btest/main.hex | 35 + c/{test/Makefile => btest/makefile} | 0 c/btest/test/a.out | Bin 0 -> 15504 bytes c/btest/test/main.c | 29 + c/keypad/main.asm | 994 ++++++++++++++++++++++++++++ c/keypad/main.c | 199 ++++++ c/keypad/main.hex | 115 ++++ c/keypad/makefile | 32 + c/menu_cuentas/main.asm | 878 ++++++++++++++++++++++++ c/menu_cuentas/main.c | 165 +++++ c/menu_cuentas/main.hex | 110 +++ c/menu_cuentas/makefile | 32 + c/test/main.c | 31 - 15 files changed, 3077 insertions(+), 31 deletions(-) create mode 100755 c/btest/main.asm create mode 100755 c/btest/main.c create mode 100755 c/btest/main.hex rename c/{test/Makefile => btest/makefile} (100%) create mode 100755 c/btest/test/a.out create mode 100755 c/btest/test/main.c create mode 100755 c/keypad/main.asm create mode 100755 c/keypad/main.c create mode 100644 c/keypad/main.hex create mode 100755 c/keypad/makefile create mode 100755 c/menu_cuentas/main.asm create mode 100755 c/menu_cuentas/main.c create mode 100755 c/menu_cuentas/main.hex create mode 100755 c/menu_cuentas/makefile delete mode 100755 c/test/main.c diff --git a/c/btest/main.asm b/c/btest/main.asm new file mode 100755 index 0000000..7059369 --- /dev/null +++ b/c/btest/main.asm @@ -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 diff --git a/c/btest/main.c b/c/btest/main.c new file mode 100755 index 0000000..b37581f --- /dev/null +++ b/c/btest/main.c @@ -0,0 +1,56 @@ +#include +#include + +// 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; +} diff --git a/c/btest/main.hex b/c/btest/main.hex new file mode 100755 index 0000000..67aa84e --- /dev/null +++ b/c/btest/main.hex @@ -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 diff --git a/c/test/Makefile b/c/btest/makefile similarity index 100% rename from c/test/Makefile rename to c/btest/makefile diff --git a/c/btest/test/a.out b/c/btest/test/a.out new file mode 100755 index 0000000000000000000000000000000000000000..98995da2663a9d363ab6bd9cf581e899c9a99aa5 GIT binary patch literal 15504 zcmeHOYit}>6~4R9!)apgCN$JZAX!ja5`;H?lQy_n$Ju0DIf+ReRaIMtjd#~xWbc~Y zad9H5STdljqL7pdR33tWgj5Nk{;3iqkXYAX(NZKw{2&rY7)T_yNg!1pNRN1FNWJ?DJ)+&Oc1W_IW7$z<=oa44iiYShDudWoo`Nw6W>&J939?Ns&H zZ&n{wE6`u2b&fsZ0IZHgYpSu9^`s`=i){DfN7zqLW=Kf9yGep31QAqx9K>5r2JZXu zu`n5x5)``|FQ&~(`EVIIKm@%!n#ydWHmljrYBV@rAEWT7OT0Pe%`wkKjyK0B`J|lC z*2nquV*)mkgx)LV=bdAoAGfl$?3xEY@zUuRrgjYHj&-!{7*011=kjCY zjpI8z8avwJr9!+#$Dvpf56$-_JBKtW2^0K=*JVpXpB>8_r_{_Jk?80g{ADDdpWj!~obqtsJ^DX*09x$44?4p-`g$JZH?LEi8@#uMJ z>H%gwdihL{;j%}suZ!9n*By_ZVz`oUS}Os3sc=m}BgjCIfgl4x27(L(83-~EWZ;97 zfj1+Y|7lEKuQg6DpW306@zshIwr7pWU)4_QgRt9Qf!eh-|OT*|tsm z<{LfbOP@2!e>Enr-0bU5HdmToHqLbR;`!8G|2W*=%ElvGzM{v2{)f;QXO@45;K5tg zdW3$M+6cYMo{MamAjfG&_!6AtIjyxSr5Iv{xVea12~wO<;$Q5JvqHN-|6gP zn~tBxdud!y*{S&&8j?IGE1^?KJ3IOGbv5>*bLXC% zrieII(V65z7%^*p*?=RNw`ktU+v-{yNVoOiT^KxaVOcbCp@LAG>y;|c80A0w4DM=v z*Me=6ryl1{!m(e>_64KEYNRWXb13?CY3?25I-piF(z{KP^$xgusXd(MIz_2<6o2_1N_C1P z_c@@pabVF8@x)}_74}0BrxqFSU$%2RP-<7a2-U~8llgf2s{4{>d=1t8ZESy+`!a7H z{(lZqKkg6QAqA{#kUG=--Q5qxw&C0I_E>WpN@|;9Eln-$O)X8IR$fzkyje_bEuOy! z_`~S$-pkY*_8kT&meNzQLpb~Xc{^pZQ6=@?GTv70f1i?dA^L~V;H51pjgMjHr<>EO2k>r|cle-Hf|4Ro{E$lrgwe`5ci zaQ*Um^hy4LjppO`zX5#=n_pHU4;1%79;e6->!8;^{P+ls!M9!&m4?R$l)3k@ zgIx!Dx>3@NMQbJvbKl{v14+}^dsvzKdk^jD>NOAT+jk_{Z}xZX=}n^8+h1UwkOK1m zR5YGRr>vBsO7t98p}SP7JvU9VJ4NMpRG6FTQo$Tb<0I6%D`nEk%;d2% zkCjTy<*Ij7teeS$d(HQ%PcMxQ=P=S>&cX=ZGWqJ6VaAqH@zU`TD|HNL6&)OsR=!|m z;)D6I_-L^(nkibxRoqn_8_VG@2f4J0qwqdc997zJC{-F#@$~UL26fOXI+mw0#Zs=2 zuj-hv6*I#rB5-ST*rE|JvAC5P$6n_(UM%P=$1_7_wwM~pm_uoBrN`6i+SAi$r3M|o znJN}jm@x6BjWDT^+yLfKz{uFebvS2eWLm`s3L_(#JhJlN5xQT}Jx1@uk@hv4(?ep|5=VNDEE80ulwhJ z1bn)O3;!nb1)t|&bUUWl!k7E)jde-9n4asJpX{_n8Sq4?uTU+~Xx!_$Mym*@P;?~{KGTv~e) zU!LFG|1(l@AhJFsuB?N%U?Ugd%m1A!JBWpMP!70z;S0VCieBKy37N@$9)Y|IJp1@L?ap*H!-pH2dca literal 0 HcmV?d00001 diff --git a/c/btest/test/main.c b/c/btest/test/main.c new file mode 100755 index 0000000..99551e1 --- /dev/null +++ b/c/btest/test/main.c @@ -0,0 +1,29 @@ +#include +#include + +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; +} diff --git a/c/keypad/main.asm b/c/keypad/main.asm new file mode 100755 index 0000000..a4201b3 --- /dev/null +++ b/c/keypad/main.asm @@ -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 diff --git a/c/keypad/main.c b/c/keypad/main.c new file mode 100755 index 0000000..c2991ae --- /dev/null +++ b/c/keypad/main.c @@ -0,0 +1,199 @@ +#include +#include +#include + +// 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; +} diff --git a/c/keypad/main.hex b/c/keypad/main.hex new file mode 100644 index 0000000..61688ed --- /dev/null +++ b/c/keypad/main.hex @@ -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 diff --git a/c/keypad/makefile b/c/keypad/makefile new file mode 100755 index 0000000..4243940 --- /dev/null +++ b/c/keypad/makefile @@ -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 diff --git a/c/menu_cuentas/main.asm b/c/menu_cuentas/main.asm new file mode 100755 index 0000000..737d50b --- /dev/null +++ b/c/menu_cuentas/main.asm @@ -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 diff --git a/c/menu_cuentas/main.c b/c/menu_cuentas/main.c new file mode 100755 index 0000000..228f31c --- /dev/null +++ b/c/menu_cuentas/main.c @@ -0,0 +1,165 @@ +#include +#include +#include + +// 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; +} diff --git a/c/menu_cuentas/main.hex b/c/menu_cuentas/main.hex new file mode 100755 index 0000000..b2fe2bb --- /dev/null +++ b/c/menu_cuentas/main.hex @@ -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 diff --git a/c/menu_cuentas/makefile b/c/menu_cuentas/makefile new file mode 100755 index 0000000..4243940 --- /dev/null +++ b/c/menu_cuentas/makefile @@ -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 diff --git a/c/test/main.c b/c/test/main.c deleted file mode 100755 index 5f6cf68..0000000 --- a/c/test/main.c +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include - -// 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.) - } -} -