From 055c39faf93535c1b736b94eafc84b7464aae4cb Mon Sep 17 00:00:00 2001 From: fernando Date: Fri, 2 May 2025 17:51:54 -0600 Subject: [PATCH] Added examples in sdcc c --- c/Makefile | 32 + c/README.md | 1 + c/blinkc/Makefile | 32 + c/blinkc/main.asm | 342 +++++++++ c/blinkc/main.c | 23 + c/blinkc/main.hex | 25 + c/blinkc/main.o | Bin 0 -> 7675 bytes c/cuentac/Makefile | 32 + c/cuentac/main.asm | 472 ++++++++++++ c/cuentac/main.c | 73 ++ c/cuentac/main.hex | 37 + c/cuentac/main.o | Bin 0 -> 10959 bytes c/interrupt/main.asm | 409 ++++++++++ c/interrupt/main.c | 51 ++ c/interrupt/main.hex | 33 + c/interrupt/main.o | Bin 0 -> 9189 bytes c/interrupt/makefile | 32 + c/rotac/Makefile | 34 + c/rotac/compile_commands.json | 1 + c/rotac/main.asm | 710 ++++++++++++++++++ c/rotac/main.c | 145 ++++ c/rotac/main.hex | 60 ++ c/rotac/main.o | Bin 0 -> 17172 bytes c/test/Makefile | 32 + c/test/main.c | 31 + eventc/Makefile | 32 + eventc/main.asm | 210 ++++++ eventc/main.hex | 28 + keypad/Makefile | 32 + keypad/main.asm | 201 +++++ keypad/main.hex | 28 + ....sync-conflict-20250319-154528-N4N5JQ7.asm | 200 +++++ ....sync-conflict-20250319-154528-N4N5JQ7.hex | 28 + ....sync-conflict-20250319-155715-N4N5JQ7.asm | 200 +++++ ....sync-conflict-20250319-155715-N4N5JQ7.hex | 28 + test/main.asm | 2 +- test/main.hex | 2 +- 37 files changed, 3596 insertions(+), 2 deletions(-) create mode 100755 c/Makefile create mode 100755 c/README.md create mode 100755 c/blinkc/Makefile create mode 100755 c/blinkc/main.asm create mode 100755 c/blinkc/main.c create mode 100755 c/blinkc/main.hex create mode 100755 c/blinkc/main.o create mode 100755 c/cuentac/Makefile create mode 100755 c/cuentac/main.asm create mode 100755 c/cuentac/main.c create mode 100755 c/cuentac/main.hex create mode 100755 c/cuentac/main.o create mode 100755 c/interrupt/main.asm create mode 100755 c/interrupt/main.c create mode 100755 c/interrupt/main.hex create mode 100755 c/interrupt/main.o create mode 100755 c/interrupt/makefile create mode 100755 c/rotac/Makefile create mode 100755 c/rotac/compile_commands.json create mode 100755 c/rotac/main.asm create mode 100755 c/rotac/main.c create mode 100755 c/rotac/main.hex create mode 100755 c/rotac/main.o create mode 100755 c/test/Makefile create mode 100755 c/test/main.c create mode 100755 eventc/Makefile create mode 100755 eventc/main.asm create mode 100755 eventc/main.hex create mode 100755 keypad/Makefile create mode 100755 keypad/main.asm create mode 100755 keypad/main.hex create mode 100755 keypad/main.sync-conflict-20250319-154528-N4N5JQ7.asm create mode 100755 keypad/main.sync-conflict-20250319-154528-N4N5JQ7.hex create mode 100755 keypad/main.sync-conflict-20250319-155715-N4N5JQ7.asm create mode 100755 keypad/main.sync-conflict-20250319-155715-N4N5JQ7.hex diff --git a/c/Makefile b/c/Makefile new file mode 100755 index 0000000..4243940 --- /dev/null +++ b/c/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/README.md b/c/README.md new file mode 100755 index 0000000..c419b39 --- /dev/null +++ b/c/README.md @@ -0,0 +1 @@ +# PIC18F4550 examples with SDCC C diff --git a/c/blinkc/Makefile b/c/blinkc/Makefile new file mode 100755 index 0000000..4243940 --- /dev/null +++ b/c/blinkc/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/blinkc/main.asm b/c/blinkc/main.asm new file mode 100755 index 0000000..02d0370 --- /dev/null +++ b/c/blinkc/main.asm @@ -0,0 +1,342 @@ +;-------------------------------------------------------- +; 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 + + +;-------------------------------------------------------- +; public variables in this module +;-------------------------------------------------------- + global _sram_end + global _main + +;-------------------------------------------------------- +; 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 +WREG equ 0xfe8 +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 +;-------------------------------------------------------- +; I code from now on! +; ; Starting pCode block +S_main__main code +_main: +; .line 16; main.c LED_TRIS = 0; // Pin as output + BCF _TRISDbits, 1 +; .line 17; main.c LED_LAT = 0; // LED off + BCF _LATDbits, 1 +_00106_DS_: +; .line 20; main.c LED_LAT = !LED_LAT; // Toggle LED + CLRF r0x00 + BTFSC _LATDbits, 1 + INCF r0x00, F + MOVF r0x00, W + BSF STATUS, 0 + TSTFSZ WREG + BCF STATUS, 0 + CLRF r0x00 + RLCF r0x00, F + MOVF r0x00, W + ANDLW 0x01 + RLNCF WREG, W + MOVWF PRODH + MOVF _LATDbits, W + ANDLW 0xfd + IORWF PRODH, W + MOVWF _LATDbits +; .line 21; main.c delay1ktcy(500); // 500ms @ 1MHz + MOVLW 0xf4 + CALL _delay1ktcy + BRA _00106_DS_ +; .line 23; main.c } + RETURN + + + +; Statistics: +; code size: 48 (0x0030) bytes ( 0.04%) +; 24 (0x0018) words +; udata size: 0 (0x0000) bytes ( 0.00%) +; access size: 1 (0x0001) bytes + + + end diff --git a/c/blinkc/main.c b/c/blinkc/main.c new file mode 100755 index 0000000..fb035d0 --- /dev/null +++ b/c/blinkc/main.c @@ -0,0 +1,23 @@ +#include +#include + +// FUSES START +#pragma config XINST = OFF +#pragma config FOSC = HS +#pragma config WDT = OFF +#pragma config LVP = OFF + +// FUSES END + +#define LED_LAT LATDbits.LATD1 +#define LED_TRIS TRISDbits.TRISD1 + +void main(void) { + LED_TRIS = 0; // Pin as output + LED_LAT = 0; // LED off + + while (1) { + LED_LAT = !LED_LAT; // Toggle LED + delay1ktcy(500); // 500ms @ 1MHz + } +} diff --git a/c/blinkc/main.hex b/c/blinkc/main.hex new file mode 100755 index 0000000..21b082b --- /dev/null +++ b/c/blinkc/main.hex @@ -0,0 +1,25 @@ +:020000040000FA +:1000000002EF00F011EEFFF021EEFFF0F86AA68E8D +:10001000A69C07EEFFF00068ED6A0050FDE11C0EA3 +:10002000F66E010EF76E000EF86E0900F5CF05F0C2 +:100030000900F5CF06F034D00900F5CF00F0090033 +:10004000F5CF01F00900F5CF02F009000900F5CF66 +:10005000E9FF0900F5CFEAFF090009000900F5CF23 +:1000600003F00900F5CF04F009000900F6CF07F00E +:10007000F7CF08F0F8CF09F000C0F6FF01C0F7FF96 +:1000800002C0F8FF03D00900F5CFEEFF0306FBE244 +:100090000406F9E207C0F6FF08C0F7FF09C0F8FF41 +:1000A0000506CAE20606C8E276EC00F0FFD7E806CD +:1000B000E56E630E6AEC00F0E4500BE000D0E56EF4 +:1000C000630E6AEC00F000D000D00000E450E82E8F +:1000D000F6D71200E8060000E85007E000D000D094 +:1000E00000D000D00000E82EFAD7120095928C9232 +:1000F000006A8CB2002A0050D880E866D890006A66 +:1001000000360050010BE844F46E8C50FD0BF410E7 +:100110008C6EF40E57EC00F0EBD7120001002A01B0 +:0C01200000006000000001000000000072 +:020000040030CA +:010001000CF2 +:010003001EDE +:010006008178 +:00000001FF diff --git a/c/blinkc/main.o b/c/blinkc/main.o new file mode 100755 index 0000000000000000000000000000000000000000..1f9b228d71aeb131f1115d58a25dcf3e12bee0e0 GIT binary patch literal 7675 zcmZvhO=ule6vyxMOHE2_t9?}KM-i>HNO+SpX=|yi|(th;0&Mn-uZ^ zEhwfNQBWxDs)DYH(2at1ql>x_7rKywE((Gof^<{dd@xfd(MTI_rJe6=bm#v zX5PJ%p)DK4=6`>keQKQ$J&_Pwgb=4DL5MUF;$Ha14;C;m1+Rx?H6?OCeBHf=KA{cP zS2q!T)VWv&U4lj%@L5?S#6x16*rBfPhVKocEI$}`82>=|Yc2kT%4Yl)VhBDF*wIIb z5oNbtCT{H}!EP%x=UDH5+#RQT@u(aoxjy3@ub78E{R>hZ^H*C1E-F3k9ZdJ z207FZ;6+hZ!!9fEr!T^hvSlEW^I^bXgri~0-bgP@V*4T*cWtph+Nh=celF_q>IWjV z4i$Yq!cns2V1%P%%L@^XiY+fj+iV5YQ1q}@uSAb{^=c%Sh+(y8htVkN(Gy-hiEvbH z8Hsk<3aHTtN7|Or2uItNMua17%b}>(RzTe+Zzzkp^LWb8rwML*QmoFIhHN(DV*foaz z#;`va_BX>K?;fE1x*4{WVUIKH8HV*U>>$JRY`@)oP&1W`=EN*iMF(8FqkS3Byu`9bwos z!xkC#2E*QF*ja{sz_5!9`-EX%GVB|MU1iu$4Evp7HyL(^Vcl|DqHlIG*v7D(4C`mu z5W~h9c7$QCF>IM(s|n&JYtbzN!lu~T64l@?cr?PA+kMWV=lzsL13dHYh*4V z-v(^%-GaVJU`Wh2MAphHdFbnBOff3;x)&LJ{ShF$B&EHwZd1lhV_lWs#QGT4&#*lV z8(`QV!}c<4AH()DEcQC0`r&m%F|Q+vc^y&A>xg1rM}Vcx%w1`6Op#UH1eINlVReRi zlMcRP-eLv^VqOTvyby|cAr$jMAcNK7+%Oa)&l)Wcl3gJ#+If)d3b~-22g$CGAKH14 z>|E3igdWZ>&97v)=E;9Fox0ym}`1>#EPT1w_W zt}sTDR0{WRR)d>ASTFg@9Lo~-QHSkiwIXY!)hx7=%zcP~Z{8m~V33Vx-YtVMkcH1g zWNve4R~s+3SDVayh<3F!t_08LB!tSYo;Z=$$Uz!k7mQW4(yn_!z*n-|^ToJ*p&c-P zf+=p+=eWwgp`F`dm0!>vW_CEt4`aB?MYk6-G2$Rb1$!2(E6LmjAs5Nq2c=|L;tn&$ zh1Hj|g1C|eaa*m_4-CG3g`I`$52NbZoM)){WRU8PyG9`-G-RAFo4c!O_V z9ZPd}It_DLG|Xwyu(oXwSn6#U;F4rcTWC$Jk~_^A<}`<_l^-hR*K}_VYAWSeHv%#&9|rS=Orr=ZV%~rKB$*J4C8{fEhs>CNBd}s69pv7&U0rUZeIIwcn`N31XwfHcV{e#5Pc@ zBFWoFvcpq=k^q%6LL~vJb`UBFP&J8A zNr0+#gi5Ldg-RJt5?WSAF*UX8rAunNYn*UrWh%H;a#}Do+FQ~U+EY4OtrxWqqzh^TXezh? zp^DtfDQUyurivhKrAVtS6jf;NM4I+Yq~%_TByDp@tDi)-q9;WDSZWXaF(5666HgHx zsURcx@oBd5dICEgspOtVv)C}Dz^-fN! literal 0 HcmV?d00001 diff --git a/c/cuentac/Makefile b/c/cuentac/Makefile new file mode 100755 index 0000000..4243940 --- /dev/null +++ b/c/cuentac/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/cuentac/main.asm b/c/cuentac/main.asm new file mode 100755 index 0000000..80ca08d --- /dev/null +++ b/c/cuentac/main.asm @@ -0,0 +1,472 @@ +;-------------------------------------------------------- +; 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 _sram_end + global _number_to_7seg + global _main + +;-------------------------------------------------------- +; 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 +PCL equ 0xff9 +PCLATH equ 0xffa +PCLATU equ 0xffb +WREG equ 0xfe8 +FSR1L equ 0xfe1 +FSR2L equ 0xfd9 +POSTINC1 equ 0xfe6 +POSTDEC1 equ 0xfe5 +PREINC1 equ 0xfe4 +PLUSW2 equ 0xfdb + + +; Internal registers +.registers udata_ovr 0x0000 +r0x00 res 1 + + +ustat_main_00 udata 0X07FF +_sram_end res 0 + +;-------------------------------------------------------- +; interrupt vector +;-------------------------------------------------------- + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- +; I code from now on! +; ; Starting pCode block +S_main__main code +_main: +; .line 57; main.c TRISD = 0; + CLRF _TRISD +; .line 58; main.c LATD = 0; + CLRF _LATD +; .line 59; main.c TRISE = 0; + CLRF _TRISE +; .line 60; main.c LATE = 0x04; + MOVLW 0x04 + MOVWF _LATE +_00145_DS_: +; .line 63; main.c for (i = 0; i < 15; i++) { + CLRF r0x00 +_00141_DS_: +; .line 64; main.c LATD = number_to_7seg(i); + MOVF r0x00, W + MOVWF POSTDEC1 + CALL _number_to_7seg + MOVWF _LATD + MOVF POSTINC1, F +; .line 65; main.c delay1ktcy(250); // 1s @ 1MHz + MOVLW 0xfa + CALL _delay1ktcy +; .line 63; main.c for (i = 0; i < 15; i++) { + INCF r0x00, F + MOVLW 0x0f + SUBWF r0x00, W + BNC _00141_DS_ + BRA _00145_DS_ +; .line 68; main.c } + RETURN + +; ; Starting pCode block +S_main__number_to_7seg code +_number_to_7seg: +; .line 15; 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 16; main.c switch (number) { + MOVLW 0x10 + SUBWF r0x00, W + BTFSC STATUS, 0 + BRA _00121_DS_ + CLRF PCLATH + CLRF PCLATU + RLCF r0x00, W + RLCF PCLATH, F + RLCF WREG, W + RLCF PCLATH, F + ANDLW 0xfc + ADDLW LOW(_00132_DS_) + MOVWF POSTDEC1 + MOVLW HIGH(_00132_DS_) + ADDWFC PCLATH, F + MOVLW UPPER(_00132_DS_) + ADDWFC PCLATU, F + MOVF PREINC1, W + MOVWF PCL +_00132_DS_: + GOTO _00105_DS_ + GOTO _00106_DS_ + GOTO _00107_DS_ + GOTO _00108_DS_ + GOTO _00109_DS_ + GOTO _00110_DS_ + GOTO _00111_DS_ + GOTO _00112_DS_ + GOTO _00113_DS_ + GOTO _00114_DS_ + GOTO _00115_DS_ + GOTO _00116_DS_ + GOTO _00117_DS_ + GOTO _00118_DS_ + GOTO _00119_DS_ + GOTO _00120_DS_ +_00105_DS_: +; .line 18; main.c return 0x3F; + MOVLW 0x3f + BRA _00123_DS_ +_00106_DS_: +; .line 20; main.c return 0x06; + MOVLW 0x06 + BRA _00123_DS_ +_00107_DS_: +; .line 22; main.c return 0x5B; + MOVLW 0x5b + BRA _00123_DS_ +_00108_DS_: +; .line 24; main.c return 0x4F; + MOVLW 0x4f + BRA _00123_DS_ +_00109_DS_: +; .line 26; main.c return 0x66; + MOVLW 0x66 + BRA _00123_DS_ +_00110_DS_: +; .line 28; main.c return 0x6D; + MOVLW 0x6d + BRA _00123_DS_ +_00111_DS_: +; .line 30; main.c return 0x7D; + MOVLW 0x7d + BRA _00123_DS_ +_00112_DS_: +; .line 32; main.c return 0x07; + MOVLW 0x07 + BRA _00123_DS_ +_00113_DS_: +; .line 34; main.c return 0x7F; + MOVLW 0x7f + BRA _00123_DS_ +_00114_DS_: +; .line 36; main.c return 0x6F; + MOVLW 0x6f + BRA _00123_DS_ +_00115_DS_: +; .line 38; main.c return 0x77; + MOVLW 0x77 + BRA _00123_DS_ +_00116_DS_: +; .line 40; main.c return 0x7c; + MOVLW 0x7c + BRA _00123_DS_ +_00117_DS_: +; .line 42; main.c return 0x39; + MOVLW 0x39 + BRA _00123_DS_ +_00118_DS_: +; .line 44; main.c return 0x5e; + MOVLW 0x5e + BRA _00123_DS_ +_00119_DS_: +; .line 46; main.c return 0x79; + MOVLW 0x79 + BRA _00123_DS_ +_00120_DS_: +; .line 48; main.c return 0x71; + MOVLW 0x71 + BRA _00123_DS_ +_00121_DS_: +; .line 50; main.c return 0; + CLRF WREG +_00123_DS_: +; .line 52; main.c } + MOVFF PREINC1, r0x00 + MOVFF PREINC1, FSR2L + RETURN + + + +; Statistics: +; code size: 238 (0x00ee) bytes ( 0.18%) +; 119 (0x0077) words +; udata size: 0 (0x0000) bytes ( 0.00%) +; access size: 1 (0x0001) bytes + + + end diff --git a/c/cuentac/main.c b/c/cuentac/main.c new file mode 100755 index 0000000..8519423 --- /dev/null +++ b/c/cuentac/main.c @@ -0,0 +1,73 @@ +#include +#include +#include + +/* Configs options */ +#pragma config XINST = OFF /* Extended instruction set */ +#pragma config FOSC = HS /* Internal osc */ +#pragma config WDT = OFF /* Watchdog timer */ +#pragma config LVP = OFF /* Single Supply ICSP OFF */ +#pragma config MCLRE = OFF + +#define LED_LAT LATDbits.LATD1 +#define LED_TRIS TRISDbits.TRISD1 + +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 main(void) { + uint8_t i; + + TRISD = 0; + LATD = 0; + TRISE = 0; + LATE = 0x04; + + while (1) { + for (i = 0; i < 15; i++) { + LATD = number_to_7seg(i); + delay1ktcy(250); // 1s @ 1MHz + } + } +} + + +/* NOTES + * Looks like I can treat register like normal variables + */ diff --git a/c/cuentac/main.hex b/c/cuentac/main.hex new file mode 100755 index 0000000..14fe31b --- /dev/null +++ b/c/cuentac/main.hex @@ -0,0 +1,37 @@ +:020000040000FA +:1000000064EF00F0D9CFE5FFE1CFD9FF00C0E5FFF5 +:10001000020EDBCF00F0100E005CD8B04FD0FA6AB1 +:10002000FB6A0034FA36E834FA36FC0B3C0FE56E16 +:10003000000EFA22000EFB22E450F96E3EEF00F0B3 +:1000400040EF00F042EF00F044EF00F046EF00F028 +:1000500048EF00F04AEF00F04CEF00F04EEF00F0F8 +:1000600050EF00F052EF00F054EF00F056EF00F0C8 +:1000700058EF00F05AEF00F05CEF00F03F0E1FD099 +:10008000060E1DD05B0E1BD04F0E19D0660E17D07A +:100090006D0E15D07D0E13D0070E11D07F0E0FD030 +:1000A0006F0E0DD0770E0BD07C0E09D0390E07D015 +:1000B0005E0E05D0790E03D0710E01D0E86AE4CF50 +:1000C00000F0E4CFD9FF120011EEFFF021EEFFF0B7 +:1000D000F86AA68EA69C07EEFFF00068ED6A005055 +:1000E000FDE1DA0EF66E010EF76E000EF86E0900F5 +:1000F000F5CF05F00900F5CF06F034D00900F5CFB3 +:1001000000F00900F5CF01F00900F5CF02F0090079 +:100110000900F5CFE9FF0900F5CFEAFF0900090062 +:100120000900F5CF03F00900F5CF04F0090009003C +:10013000F6CF07F0F7CF08F0F8CF09F000C0F6FFD0 +:1001400001C0F7FF02C0F8FF03D00900F5CFEEFFB2 +:100150000306FBE20406F9E207C0F6FF08C0F7FF5A +:1001600009C0F8FF0506CAE20606C8E2D8EC00F0AE +:10017000FFD7E806E56E630ECCEC00F0E4500BE030 +:1001800000D0E56E630ECCEC00F000D000D0000093 +:10019000E450E82EF6D71200E8060000E85007E029 +:1001A00000D000D000D000D00000E82EFAD7120016 +:1001B000956A8C6A966A040E8D6E006A0050E56E30 +:1001C00002EC00F08C6EE652FA0EB9EC00F0002A58 +:1001D0000F0E005CF3E3F1D712000100E80100000C +:0A01E00060000000010000000000B4 +:020000040030CA +:010001000CF2 +:010003001EDE +:02000500038175 +:00000001FF diff --git a/c/cuentac/main.o b/c/cuentac/main.o new file mode 100755 index 0000000000000000000000000000000000000000..2b69a1c66dac11a88a9209573519080706d824a3 GIT binary patch literal 10959 zcmbuFYiwM_702f|!K6;ugoJE?@=`>hO)G1!ohMDxti5Y&NbK$I+CdbuiHRL-Vh3y! zl8_fkfPex@Q9ytw1Vj=b|3ON-t|rYDuF~r>oiOJae6{rRil9`_XUHB&GIY zjPI#_>zBuCjVh-zx~MAFMd=XUnNmnjrEjHHVg~f%tW>Y@I~w?npx-3)qfGVn8Nb&8 zzukE4B=n(7ek+aNyT0GB!he%9Y81aqAC9U|)n{t-qw?{LR&%Fk)D`M4>W!J|?bkm% z@&4;?pHRm>JkgMO=XLej47~Q|!|ILW!(R-mdB+!gjQPu{YC6`EIX*{azL@ht>0hJj z?^xsik$;d;Z!}{55#}DugP2D!Z^L{t<{g+fV7>wKR?Lerufn_;^L3a%9{vE^`T@3l zrn+g`IXFHzLiC}U^e5}AqRycnBkpuo&#pTSr?LWH0hdXcyNqpj}FaXPEcME)ga@;}S!j5-H(8rSKpn&WY&v+8{0C+oPU zsS8jyYCTKe7uPdgw~h4--JZ05Y7gryJ`qZtWy-p^ORaeDRr^d<-?f_NZ^~z@ zMX0A~p9Xc2)fu$}^(lrgwK}7gq0SiIW_3mtP)|3!!|IIcL_NdsORUbQ<)}|JyxZ!G zqD5n-;bp5cs)~A+;eA$T)McnoGyHO^>G4r&w&AO+&ZyO>vxfIuol$F1f8Fpwt263q z)TbLhY;{JhM}3CjqgH3swW!ZDe9Y>Mnn3*x!#7%;QCm=-t@$jq-P5}~eT%1W_cT2d zY1z9xeUGQ__w<9Fe#Fy{dHP9DKkeyfJblE|M^UG96{WgJ-wP>DOQ0c@`gVXdjb{+dn3>a>(WNJ$Qh_^09t8X zx&f9t1Jx#27T9gV-VC(zy0jTOoPlZ!&(2dr`is-3Vpu=|C56VS@-(oHbv3{<;- zR&bYg!LTz>?FL%OUD^$!&Oo&XXhnBv4~#hj)y+UFyGu92MrWYf3!8*}8*CBwKG-Vk zJ7Bx8_rp$M{}^@&`vB|__T6xcu9_EYenun)sQVgDQ+5%#n2sIZ@d$AtYnJTB}P;7MU0g+s!A z5uO(IF*q#jm*5#;zYNa``!{ez*uR74h5ai0GO&*d`!)DgU>_6qAK=%*{+d4DIMjsu z)0{KaRDE7?;1qo>VY_*7X#Ie>^dJ34d>!29T!oUo-k`6^o?<5Nj@c`sCT4F2tk&CA z?jM>Mcep_zD~61&zw4Y(aeW^}*k=*;MTDIs{>E~Byk||Fneo0(vhyQlnk_GW~=6JdXiuzy6@zawnQB>TXiV24=|c5Z}yC&Cs*STVvX5w<$QMj~uWgxwlp zcSqR65%yGsy%1rqMA#oA?7ay4B*H$AF#STu4hfIPw8<9OF*+l{z8PUjge{4%&Is#` zu>J@e4Op#GDi!k8ylXZ7jY8Jmaj`=<*N7EMl{(hm(=AzVM|p)uXr9)Hi7mNdVjEAa zOK!w<*)DuX>nHLn29C_6Be6;~FShc;WQ)0d`9eWN)_$S~*soaf_aP}u{O0L47fUS> z)*4~+B5ZzyEr_s%5wWTmd6mnhbVEGwpqDO<;|Y#l2W z@xkK#qg&~T3-^0kpwaFbZ5c5 z(#)?A+oGAjP-<2#`rS-%arPA}L0rv(xRpvt2F9|?yui%lUoK|&SIQeCW^KJ4l2zqs z@ER*eLo=Lfeh)B9M9-&wUgIzp#>KLtn^WfBF0o*i>ar^fRT%{RI+yp=&9x9weYjrL zm96F^GHvlkEp2noAEMMRY%_IyuRp*Tx1%DbE|nz~mMtyst*rEW75z%(Vpn&&2l;us zGnmgbi1!Ap*416;@Jj0YXseXH0q60+w$zOWv1t4J(X{RJAh++4pe+>hP{4HiyplY= z!P05^s;=*`eYt4+{E@Tm^B}kHNYEB)-?4z{_IV|B`?|Vm{&~wW#$e|4v}IJSNxCgP zh1AsFhK2L0RPHH+_g2lf;nu_}jb*EC%S%;%I4$#Pw9Ko~vR+pqvXa;^;3dtxy2zVZ zzUozHnO7aLO7+tE_VxG=2iI5a5v!k$fy|GPGCu+_O1}@rjaZ6+3^fA$tquDzmfMs| zhnKHU($~^oXK?K!v7*}VEet}x;$T1iOnj|KH|I9OG1E^hVxiXCb4v@IJc` z+0KBqAlnnL?<3nAuuf$A0#-q`KVYkn9SGPEGJ0d~w`Bquy(RbA4rB)dc000119msE z#{+f{*`a{_4B6p;9YOYNz+OT|Z?yfkyoQY4`}!=8HvRerFJVgOWc~C?e|^KF^S}Ml zU*F&q{L1=v<5l|Q&6Kb3YaZAzs4wFOzxTdI{Rtb|JT|ayXnbN|Y+PMGKCxy(&)ph6 zHWgMpms4Z(`jP&DvD(Cj+QRXHb*lNQ4WolY>uRkzObco&@?G7{J(4C-+8U+vQ%cWI z^P2II^i6|)A#UCij$3@oqsK-*D@QkE`7)yPIGEyI%jMhgc*5;_>F5nr-yJ9VKEaFS%JY);e z*4rAim-cF~79T$N3LiQ=ZRU$PDDVYyLa+wyP}$IXeIs2s+I2JJy*6vJ$7X{!*Q|L{ z&024!S@J%Zwb?WIMmivRH0Ql}XM?69?-}T)j!FbC~C(i +#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 = 1; + INTCON2bits.RBPU = 0; + INTCON2bits.RBIP = 1; + RCONbits.IPEN = 1; + + INTCONbits.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 (;;) { + //LATD = PORTB; + } + return 0; +} + diff --git a/c/interrupt/main.hex b/c/interrupt/main.hex new file mode 100755 index 0000000..aa041ff --- /dev/null +++ b/c/interrupt/main.hex @@ -0,0 +1,33 @@ +:020000040000FA +:0600000006EF00F0000015 +:080008005BEF00F011EEFFF0C8 +:1000100021EEFFF0F86AA68EA69C07EEFFF00068BE +:10002000ED6A0050FDE1800EF66E010EF76E000ED7 +:10003000F86E0900F5CF05F00900F5CF06F034D0D1 +:100040000900F5CF00F00900F5CF01F00900F5CF68 +:1000500002F009000900F5CFE9FF0900F5CFEAFF3A +:10006000090009000900F5CF03F00900F5CF04F0FD +:1000700009000900F6CF07F0F7CF08F0F8CF09F034 +:1000800000C0F6FF01C0F7FF02C0F8FF03D009006F +:10009000F5CFEEFF0306FBE20406F9E207C0F6FF28 +:1000A00008C0F7FF09C0F8FF0506CAE20606C8E265 +:1000B000C7EC00F0FFD7D8CFE5FFE0CFE5FFE56E56 +:1000C000F3CFE5FFF4CFE5FFE9CFE5FFEACFE5FFAA +:1000D000FACFE5FFFBCFE5FFD9CFE5FFE1CFD9FFB1 +:1000E000F2A005D081508C1EFA0E8CEC00F0F2903C +:1000F000E4CFD9FFE4CFFBFFE4CFFAFFE4CFEAFF80 +:10010000E4CFE9FFE4CFF4FFE4CFF3FFE450E4CF22 +:10011000E0FFE4CFD8FF1000E806E56E630E9FEC29 +:1001200000F0E4500BE000D0E56E630E9FEC00F0B1 +:1001300000D000D00000E450E82EF6D71200E80608 +:100140000000E85007E000D000D000D000D0000050 +:10015000E82EFAD71200D9CFE5FFE1CFD9FF8C6A9C +:10016000956AFF0E936E8A6A0F0EC16EF28EF28C44 +:10017000F286F19EF180D08EF288E4CFD9FF120092 +:100180000100040000006000000001000000ABEC72 +:0601900000F0FFD7120091 +:020000040030CA +:010001000CF2 +:010003001EDE +:02000500038175 +:00000001FF diff --git a/c/interrupt/main.o b/c/interrupt/main.o new file mode 100755 index 0000000000000000000000000000000000000000..f7b84fde74da70c9d3033709cf10e9f8a8fb8ccc GIT binary patch literal 9189 zcmaKxU2I&%6~|}n5U@!MxUirKrEb**8Y*kAO&o$s!+ts5#NNHRdu>ucY;4C4YqBO_ zhb9qi6QQO+ONxs6!UF<{KB4jkYI#8*wNfjjAS$&`iBAQ!M5$UeNNq!ed(NDhJ0JIy zvBvv9zk6oR-1)dWv-kGFKJni4HTU-S3306yVo(TiWCnzYYeHNGpO`VNgS>VrWd(wN z$FC%SHJEZ(<`h)6rALTMN5&V|G z?{X1kemfk$Eub%g-&ycG25r7hT$A}t!L{|Gs4}>S&ESLS59&sNTt)Ugd`R%4EW{1k z?=OMhQSj>pKg?L)joR;Q;P*4Qb_w`kM!#=rzYDJ4Kg2)9ImmAginmXHy!HX)kC)HG z|4$)*0{JZD3y?p9{0`&~PrtJ!o)vG3SZum5pvpdZ2H2U?pFzF=`7Gp5Ab$$^{MwoL z%;^t6y}fp&$jUE?rL_UEES9do|EI)H#YypuI1cJjtZPu5*s!S=nk@RT;c66(9zY;A zDlXxQ(F1C}tXKR?0>|S{bQJxLE{Ja-(LTeVA4V7OvAO`gCB!3|TU`)01G}iW6l0kl z5VwFfv8*nrIce&_E+<`pXaa5+Q@^7N0`Kfm&8;p7oW3VCx4Iy%2KKV%Ru@D8m}!sI z1(=hTTU`)ecDU6AaXs+wLdJGlT@afbZgoKn0p9}|{fFQ`>4NwgXwx36v1LMxNi`Xj zCL4RlrrXq5xwf9f8tssm5sook97X(l0*|l%EL7*Ms)$l79Pk$qin--4aL6 zrri=p%%(|+Pb-@yC61g;Qb zw+5&^(tS#zeWQ21C2?ihluBGtHqA&}NjB}3xPolDQ;t{z)Ljx+l}&faF>8RjN8*aI zX`j5+8ld*cZ+rHv{7zus?%8v)9N1OQo|of+J>l8=<*vY<^y~%M2<+Ii7iALIsb?RM zGoF2~+#A@mk__y~yNy(z9eIyuFUftLeJEHDhl2I+K(HPj2-d?&upSNv>*0IBdN>lS zhhxEdcsN)O-w)Qq4}{upSU#`BTt-Vow8BFhV{~r>X9d7Bg3v`*jE{L z6T`MLYzM=3F)U?Rn_(S>tupKf410`WPciHnhP}YBml*ac!+y`OKQioHhW(Xc=Na}n z!}`=t-7I!;xSC;KVc1O!+s3de!}c(&&9H+EJIb(=410=U&oS&*4Eqhke#@}881_EH z&N1xY4D0c>#55io7VU!*Fa(;40C@2G4=U7bt=1+DeLdx$!{Cu=kM&vZ#&}` zc{f6Sk#{4Sc{ie&cO#m4H=>z$Bf#Qj;?6YH2gu591GQg;VO55CgAQdUy~zv(h2xkq)<$#p?rl}poAF9?)XEcMD_+>y`^m_NW2HyLq?s(V8} z_l9-*g8Hy!PloNo818g2^+imKD2P$QI}7HOVs3@d7RB5LrD93V?PiP%v#-_);wl!z zZM9-QFq9?c1SaNxa}k4YDQA#~m8ad`R)D4cXwWm(9}UG|uDLxxEb@BZ_&JS(_!wg< z@w(YC_jZv5vs9J6qni3bz;9x5CO6kYg!RGmDpxiw`bf9M9W~SDqB}&!FKjb*{Iom3 z5O=)gPhBjFEG!#OPPguGdlmfRq*iZK97yZ!>0mzNz&;5O5uI;platHxBHnuYT!PMX#5-qKPTwkA$#D4Uii zONu#lp*OKo>Qt98r#fVh8k_v6zIB%f z^&X5E)o0$1!X-#u_2vNIi@K@3vaovi5E1gD`s_PXyw;V}srjy*hpQ6a*g^Myp`UqY zihcM+^_h33@N)Y9`VBAKzo;(5Kl#^jp6zGmlrz++M`8CW9_L@y)oPr9*tN!%F?Zd;#?S>UFn)rv-)utPtb5$ z&NMu6NaN{v(#i=f;XIou`gxent{U3ncu+NPe5WZB7c&)QY9v#mnYuYsTQfD5sco6M zB~#lo6*)m{l*opOY@EmjigYA(_M^(wkcR-M1gPsls3kyMB|e>-%sZUS3$#85kD$xp$NQTvPKfzH-D?9|zRXX~R zR>u~S>a?OI9x6zx^MID>7@)P<{*%_*etQA-`_7fj(p!AGr1$n&A>2l02JQ=;8ZwJE z(sYG3(2mygMQ?iPg5K?B2JW`VQ2SObZ8+RP5~O`2X}w=0gEoq!X@f{wZ461$o{qHs z{&x*CAZlk|O5isiY1N&0WNIq~ErM^_W-G1MU|Xk@+Ta-$WlSsZD`pJT{)L0HN2B{z g=Z}i^%7e4r_QLXh;XTseQ5Qwq+tpTEC>bgFKjmq?@Bjb+ literal 0 HcmV?d00001 diff --git a/c/interrupt/makefile b/c/interrupt/makefile new file mode 100755 index 0000000..4243940 --- /dev/null +++ b/c/interrupt/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/rotac/Makefile b/c/rotac/Makefile new file mode 100755 index 0000000..f7a4d90 --- /dev/null +++ b/c/rotac/Makefile @@ -0,0 +1,34 @@ +# 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 + +compp: comp program + +.PHONY: all clean diff --git a/c/rotac/compile_commands.json b/c/rotac/compile_commands.json new file mode 100755 index 0000000..fe51488 --- /dev/null +++ b/c/rotac/compile_commands.json @@ -0,0 +1 @@ +[] diff --git a/c/rotac/main.asm b/c/rotac/main.asm new file mode 100755 index 0000000..12862e5 --- /dev/null +++ b/c/rotac/main.asm @@ -0,0 +1,710 @@ +;-------------------------------------------------------- +; 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 _main + global _rota1 + global _rota2 + global _rota3 + global _rota4 + global _rota5 + 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 +FSR1L equ 0xfe1 +FSR2L equ 0xfd9 +POSTDEC1 equ 0xfe5 +PREINC1 equ 0xfe4 + + +; Internal registers +.registers udata_ovr 0x0000 +r0x00 res 1 +r0x01 res 1 + + +ustat_main_00 udata 0X07FF +_sram_end res 0 + +;-------------------------------------------------------- +; interrupt vector +;-------------------------------------------------------- + +;-------------------------------------------------------- +; global & static initialisations +;-------------------------------------------------------- +; I code from now on! +; ; Starting pCode block +S_main__main code +_main: +; .line 23; main.c TRISD = 0; + CLRF _TRISD +; .line 24; main.c LATD = 0; + CLRF _LATD +; .line 25; main.c TRISE = 0; + CLRF _TRISE +; .line 26; main.c LATE = 0x04; + MOVLW 0x04 + MOVWF _LATE +; .line 27; main.c TRISB = 0xff; + MOVLW 0xff + MOVWF _TRISB +; .line 30; main.c INTCON2bits.RBPU = 0; + BCF _INTCON2bits, 7 +; .line 31; main.c ADCON1 = 0x0f; + MOVLW 0x0f + MOVWF _ADCON1 +_00112_DS_: +; .line 35; main.c port = PORTB; + MOVFF _PORTB, r0x00 +; .line 36; main.c switch (port) { + MOVF r0x00, W + XORLW 0x01 + BZ _00105_DS_ + MOVF r0x00, W + XORLW 0x02 + BZ _00106_DS_ + MOVF r0x00, W + XORLW 0x04 + BZ _00107_DS_ + MOVF r0x00, W + XORLW 0x08 + BZ _00108_DS_ + MOVF r0x00, W + XORLW 0x10 + BZ _00109_DS_ + BRA _00110_DS_ +_00105_DS_: +; .line 38; main.c rota1(); + CALL _rota1 +; .line 39; main.c break; + BRA _00110_DS_ +_00106_DS_: +; .line 41; main.c rota2(); + CALL _rota2 +; .line 42; main.c break; + BRA _00110_DS_ +_00107_DS_: +; .line 44; main.c rota3(); + CALL _rota3 +; .line 45; main.c break; + BRA _00110_DS_ +_00108_DS_: +; .line 47; main.c rota4(); + CALL _rota4 +; .line 48; main.c break; + BRA _00110_DS_ +_00109_DS_: +; .line 50; main.c rota5(); + CALL _rota5 +_00110_DS_: +; .line 53; main.c delay1ktcy(50); // 1s @ 1MHz + MOVLW 0x32 + CALL _delay1ktcy + BRA _00112_DS_ +; .line 55; main.c } + RETURN + +; ; Starting pCode block +S_main__rota5 code +_rota5: +; .line 134; main.c void rota5(void) { + MOVFF FSR2L, POSTDEC1 + MOVFF FSR1L, FSR2L +; .line 135; main.c LATD = 0x55; + MOVLW 0x55 + MOVWF _LATD +; .line 136; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 137; main.c LATD = 0xAA; + MOVLW 0xaa + MOVWF _LATD +; .line 138; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 139; main.c } + MOVFF PREINC1, FSR2L + RETURN + +; ; Starting pCode block +S_main__rota4 code +_rota4: +; .line 122; main.c void rota4(void) { + MOVFF FSR2L, POSTDEC1 + MOVFF FSR1L, FSR2L + MOVFF r0x00, POSTDEC1 + MOVFF r0x01, POSTDEC1 +; .line 123; main.c LATD = 1; + MOVLW 0x01 + MOVWF _LATD +_00343_DS_: +; .line 124; main.c while (LATD != 0x80) { + MOVF _LATD, W + XORLW 0x80 + BZ _00345_DS_ +; .line 125; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 126; main.c RLCF(LATD); + RLNCF _LATD, W + ANDLW 0xfe + MOVWF r0x00 + RLNCF _LATD, W + ANDLW 0x01 + MOVWF r0x01 + MOVF r0x01, W + IORWF r0x00, W + MOVWF _LATD + BRA _00343_DS_ +_00345_DS_: +; .line 128; main.c LATD = 0x80; + MOVLW 0x80 + MOVWF _LATD +_00346_DS_: +; .line 129; main.c while (LATD != 0x01) { + MOVF _LATD, W + XORLW 0x01 + BZ _00349_DS_ +; .line 130; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 131; main.c RRCF(LATD); + RRNCF _LATD, W + ANDLW 0x7f + MOVWF r0x00 + RRNCF _LATD, W + ANDLW 0x80 + MOVWF r0x01 + MOVF r0x01, W + IORWF r0x00, W + MOVWF _LATD + BRA _00346_DS_ +_00349_DS_: +; .line 133; main.c } + MOVFF PREINC1, r0x01 + MOVFF PREINC1, r0x00 + MOVFF PREINC1, FSR2L + RETURN + +; ; Starting pCode block +S_main__rota3 code +_rota3: +; .line 73; main.c void rota3(void) { + MOVFF FSR2L, POSTDEC1 + MOVFF FSR1L, FSR2L + MOVFF r0x00, POSTDEC1 + MOVFF r0x01, POSTDEC1 +; .line 74; main.c LATD = 0x01; + MOVLW 0x01 + MOVWF _LATD +_00212_DS_: +; .line 75; main.c while (LATD != 0x80) { + MOVF _LATD, W + XORLW 0x80 + BZ _00214_DS_ +; .line 76; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 77; main.c RLCF(LATD); + RLNCF _LATD, W + ANDLW 0xfe + MOVWF r0x00 + RLNCF _LATD, W + ANDLW 0x01 + MOVWF r0x01 + MOVF r0x01, W + IORWF r0x00, W + MOVWF _LATD + BRA _00212_DS_ +_00214_DS_: +; .line 79; main.c LATD = 0x81; + MOVLW 0x81 + MOVWF _LATD +_00215_DS_: +; .line 80; main.c while (LATD != 0xC0) { + MOVF _LATD, W + XORLW 0xc0 + BZ _00217_DS_ +; .line 81; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 82; main.c LATD = LATD << 1; + BCF STATUS, 0 + RLCF _LATD, F +; .line 83; main.c LATD |= 0x80; + BSF _LATD, 7 + BRA _00215_DS_ +_00217_DS_: +; .line 85; main.c LATD = 0xC1; + MOVLW 0xc1 + MOVWF _LATD +_00218_DS_: +; .line 86; main.c while (LATD != 0xE0) { + MOVF _LATD, W + XORLW 0xe0 + BZ _00220_DS_ +; .line 87; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 88; main.c LATD = LATD << 1; + BCF STATUS, 0 + RLCF _LATD, F +; .line 89; main.c LATD |= 0xC0; + MOVLW 0xc0 + IORWF _LATD, F + BRA _00218_DS_ +_00220_DS_: +; .line 91; main.c LATD = 0xE1; + MOVLW 0xe1 + MOVWF _LATD +_00221_DS_: +; .line 92; main.c while (LATD != 0xF0) { + MOVF _LATD, W + XORLW 0xf0 + BZ _00223_DS_ +; .line 93; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 94; main.c LATD = LATD << 1; + BCF STATUS, 0 + RLCF _LATD, F +; .line 95; main.c LATD |= 0xE0; + MOVLW 0xe0 + IORWF _LATD, F + BRA _00221_DS_ +_00223_DS_: +; .line 97; main.c LATD = 0xF1; + MOVLW 0xf1 + MOVWF _LATD +_00224_DS_: +; .line 98; main.c while (LATD != 0xF8) { + MOVF _LATD, W + XORLW 0xf8 + BZ _00226_DS_ +; .line 99; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 100; main.c LATD = LATD << 1; + BCF STATUS, 0 + RLCF _LATD, F +; .line 101; main.c LATD |= 0xF0; + MOVLW 0xf0 + IORWF _LATD, F + BRA _00224_DS_ +_00226_DS_: +; .line 103; main.c LATD = 0xF9; + MOVLW 0xf9 + MOVWF _LATD +_00227_DS_: +; .line 104; main.c while (LATD != 0xFC) { + MOVF _LATD, W + XORLW 0xfc + BZ _00229_DS_ +; .line 105; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 106; main.c LATD = LATD << 1; + BCF STATUS, 0 + RLCF _LATD, F +; .line 107; main.c LATD |= 0xF8; + MOVLW 0xf8 + IORWF _LATD, F + BRA _00227_DS_ +_00229_DS_: +; .line 109; main.c LATD = 0xFD; + MOVLW 0xfd + MOVWF _LATD +_00230_DS_: +; .line 110; main.c while (LATD != 0xFE) { + MOVF _LATD, W + XORLW 0xfe + BZ _00232_DS_ +; .line 111; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 112; main.c LATD = LATD << 1; + BCF STATUS, 0 + RLCF _LATD, F +; .line 113; main.c LATD |= 0xFC; + MOVLW 0xfc + IORWF _LATD, F + BRA _00230_DS_ +_00232_DS_: +; .line 115; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 116; main.c LATD = 0xFE; + MOVLW 0xfe + MOVWF _LATD +; .line 117; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 118; main.c LATD = 0xFF; + MOVLW 0xff + MOVWF _LATD +; .line 119; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 121; main.c } + MOVFF PREINC1, r0x01 + MOVFF PREINC1, r0x00 + MOVFF PREINC1, FSR2L + RETURN + +; ; Starting pCode block +S_main__rota2 code +_rota2: +; .line 65; main.c void rota2(void) { + MOVFF FSR2L, POSTDEC1 + MOVFF FSR1L, FSR2L + MOVFF r0x00, POSTDEC1 + MOVFF r0x01, POSTDEC1 +; .line 66; main.c LATD = 0x80; + MOVLW 0x80 + MOVWF _LATD +_00189_DS_: +; .line 67; main.c while (LATD != 0x01) { + MOVF _LATD, W + XORLW 0x01 + BZ _00192_DS_ +; .line 68; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 69; main.c RRCF(LATD); + RRNCF _LATD, W + ANDLW 0x7f + MOVWF r0x00 + RRNCF _LATD, W + ANDLW 0x80 + MOVWF r0x01 + MOVF r0x01, W + IORWF r0x00, W + MOVWF _LATD + BRA _00189_DS_ +_00192_DS_: +; .line 72; main.c } + MOVFF PREINC1, r0x01 + MOVFF PREINC1, r0x00 + MOVFF PREINC1, FSR2L + RETURN + +; ; Starting pCode block +S_main__rota1 code +_rota1: +; .line 57; main.c void rota1(void) { + MOVFF FSR2L, POSTDEC1 + MOVFF FSR1L, FSR2L + MOVFF r0x00, POSTDEC1 + MOVFF r0x01, POSTDEC1 +; .line 58; main.c LATD = 1; + MOVLW 0x01 + MOVWF _LATD +_00166_DS_: +; .line 59; main.c while (LATD != 0x80) { + MOVF _LATD, W + XORLW 0x80 + BZ _00169_DS_ +; .line 60; main.c delay1ktcy(150); + MOVLW 0x96 + CALL _delay1ktcy +; .line 61; main.c RLCF(LATD); + RLNCF _LATD, W + ANDLW 0xfe + MOVWF r0x00 + RLNCF _LATD, W + ANDLW 0x01 + MOVWF r0x01 + MOVF r0x01, W + IORWF r0x00, W + MOVWF _LATD + BRA _00166_DS_ +_00169_DS_: +; .line 64; main.c } + MOVFF PREINC1, r0x01 + MOVFF PREINC1, r0x00 + MOVFF PREINC1, FSR2L + RETURN + + + +; Statistics: +; code size: 608 (0x0260) bytes ( 0.46%) +; 304 (0x0130) words +; udata size: 0 (0x0000) bytes ( 0.00%) +; access size: 2 (0x0002) bytes + + + end diff --git a/c/rotac/main.c b/c/rotac/main.c new file mode 100755 index 0000000..ed77231 --- /dev/null +++ b/c/rotac/main.c @@ -0,0 +1,145 @@ +#include +#include +#include + +/* Configs options */ +#pragma config XINST = OFF /* Extended instruction set */ +#pragma config FOSC = HS /* Internal osc */ +#pragma config WDT = OFF /* Watchdog timer */ +#pragma config LVP = OFF /* Single Supply ICSP OFF */ +#pragma config MCLRE = OFF + +#define RRCF(F) F = ((F >> 1) | (F << 7)) +#define RLCF(F) F = ((F << 1) | (F >> 7)) + +void rota1(void); +void rota2(void); +void rota3(void); +void rota4(void); +void rota5(void); +void main(void); + +void main(void) { + TRISD = 0; + LATD = 0; + TRISE = 0; + LATE = 0x04; + TRISB = 0xff; + //LATB = 0; + + INTCON2bits.RBPU = 0; + ADCON1 = 0x0f; + uint8_t port = 0; + + while (1) { + port = PORTB; + switch (port) { + case 0x01: + rota1(); + break; + case 0x02: + rota2(); + break; + case 0x04: + rota3(); + break; + case 0x08: + rota4(); + break; + case 0x10: + rota5(); + break; + } + delay1ktcy(50); // 1s @ 1MHz + } +} + +void rota1(void) { + LATD = 1; + while (LATD != 0x80) { + delay1ktcy(150); + RLCF(LATD); + } + return; +} +void rota2(void) { + LATD = 0x80; + while (LATD != 0x01) { + delay1ktcy(150); + RRCF(LATD); + } + return; +} +void rota3(void) { + LATD = 0x01; + while (LATD != 0x80) { + delay1ktcy(150); + RLCF(LATD); + } + LATD = 0x81; + while (LATD != 0xC0) { + delay1ktcy(150); + LATD = LATD << 1; + LATD |= 0x80; + } + LATD = 0xC1; + while (LATD != 0xE0) { + delay1ktcy(150); + LATD = LATD << 1; + LATD |= 0xC0; + } + LATD = 0xE1; + while (LATD != 0xF0) { + delay1ktcy(150); + LATD = LATD << 1; + LATD |= 0xE0; + } + LATD = 0xF1; + while (LATD != 0xF8) { + delay1ktcy(150); + LATD = LATD << 1; + LATD |= 0xF0; + } + LATD = 0xF9; + while (LATD != 0xFC) { + delay1ktcy(150); + LATD = LATD << 1; + LATD |= 0xF8; + } + LATD = 0xFD; + while (LATD != 0xFE) { + delay1ktcy(150); + LATD = LATD << 1; + LATD |= 0xFC; + } + delay1ktcy(150); + LATD = 0xFE; + delay1ktcy(150); + LATD = 0xFF; + delay1ktcy(150); + return; +} +void rota4(void) { + LATD = 1; + while (LATD != 0x80) { + delay1ktcy(150); + RLCF(LATD); + } + LATD = 0x80; + while (LATD != 0x01) { + delay1ktcy(150); + RRCF(LATD); + } +} +void rota5(void) { + LATD = 0x55; + delay1ktcy(150); + LATD = 0xAA; + delay1ktcy(150); +} + +/* NOTES + * Looks like I can treat register like normal variables + * Use PORT instead of LAT for reading + * != doesnt work + */ diff --git a/c/rotac/main.hex b/c/rotac/main.hex new file mode 100755 index 0000000..bd9d01d --- /dev/null +++ b/c/rotac/main.hex @@ -0,0 +1,60 @@ +:020000040000FA +:100000007DEF00F0D9CFE5FFE1CFD9FF00C0E5FFDC +:1000100001C0E5FF010E8C6E8C50800A0DE0960E3B +:1000200076EC01F08C44FE0B006E8C44010B016EEB +:10003000015000108C6EF0D7810E8C6E8C50C00A6F +:1000400007E0960E76EC01F0D8908C368C8EF6D7C1 +:10005000C10E8C6E8C50E00A08E0960E76EC01F032 +:10006000D8908C36C00E8C12F5D7E10E8C6E8C5069 +:10007000F00A08E0960E76EC01F0D8908C36E00E8F +:100080008C12F5D7F10E8C6E8C50F80A08E0960EA3 +:1000900076EC01F0D8908C36F00E8C12F5D7F90E74 +:1000A0008C6E8C50FC0A08E0960E76EC01F0D8902D +:1000B0008C36F80E8C12F5D7FD0E8C6E8C50FE0A25 +:1000C00008E0960E76EC01F0D8908C36FC0E8C127F +:1000D000F5D7960E76EC01F0FE0E8C6E960E76EC51 +:1000E00001F0FF0E8C6E960E76EC01F0E4CF01F07D +:1000F000E4CF00F0E4CFD9FF120011EEFFF021EEC3 +:10010000FFF0F86AA68EA69C07EEFFF00068ED6A85 +:100110000050FDE14C0EF66E030EF76E000EF86E09 +:100120000900F5CF05F00900F5CF06F034D009003D +:10013000F5CF00F00900F5CF01F00900F5CF02F08E +:1001400009000900F5CFE9FF0900F5CFEAFF090032 +:1001500009000900F5CF03F00900F5CF04F009000C +:100160000900F6CF07F0F7CF08F0F8CF09F000C08C +:10017000F6FF01C0F7FF02C0F8FF03D00900F5CF7A +:10018000EEFF0306FBE20406F9E207C0F6FF08C033 +:10019000F7FF09C0F8FF0506CAE20606C8E205EC4B +:1001A00001F0FFD7D9CFE5FFE1CFD9FF00C0E5FFD0 +:1001B00001C0E5FF010E8C6E8C50800A0DE0960E9A +:1001C00076EC01F08C44FE0B006E8C44010B016E4A +:1001D000015000108C6EF0D7800E8C6E8C50010A8E +:1001E0000DE0960E76EC01F08C407F0B006E8C409B +:1001F000800B016E015000108C6EF0D7E4CF01F03F +:10020000E4CF00F0E4CFD9FF1200956A8C6A966AB9 +:10021000040E8D6EFF0E936EF19E0F0EC16E81CF98 +:1002200000F00050010A0DE00050020A0DE00050FD +:10023000040A0DE00050080A0DE00050100A0DE01D +:100240000ED055EC01F00BD034EC01F008D002ECEC +:1002500000F005D0D2EC00F002D095EC01F0320EA7 +:1002600076EC01F0DCD71200D9CFE5FFE1CFD9FF62 +:1002700000C0E5FF01C0E5FF800E8C6E8C50010AC6 +:100280000DE0960E76EC01F08C407F0B006E8C40FA +:10029000800B016E015000108C6EF0D7E4CF01F09E +:1002A000E4CF00F0E4CFD9FF1200D9CFE5FFE1CFD2 +:1002B000D9FF00C0E5FF01C0E5FF010E8C6E8C5038 +:1002C000800A0DE0960E76EC01F08C44FE0B006E79 +:1002D0008C44010B016E015000108C6EF0D7E4CFFE +:1002E00001F0E4CF00F0E4CFD9FF1200E806E56E9C +:1002F000630E89EC01F0E4500BE000D0E56E630E74 +:1003000089EC01F000D000D00000E450E82EF6D7D0 +:100310001200E8060000E85007E000D000D000D04E +:1003200000D00000E82EFAD71200D9CFE5FFE1CFC8 +:10033000D9FF550E8C6E960E76EC01F0AA0E8C6EDF +:10034000960E76EC01F0E4CFD9FF120001005A03BB +:0C03500000006000000001000000000040 +:020000040030CA +:010001000CF2 +:010003001EDE +:02000500038175 +:00000001FF diff --git a/c/rotac/main.o b/c/rotac/main.o new file mode 100755 index 0000000000000000000000000000000000000000..a1963be5a2d2104168839b8a1ab7ac279956489d GIT binary patch literal 17172 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 literal 0 HcmV?d00001 diff --git a/c/test/Makefile b/c/test/Makefile new file mode 100755 index 0000000..4243940 --- /dev/null +++ b/c/test/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 new file mode 100755 index 0000000..5f6cf68 --- /dev/null +++ b/c/test/main.c @@ -0,0 +1,31 @@ +#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.) + } +} + diff --git a/eventc/Makefile b/eventc/Makefile new file mode 100755 index 0000000..0d8bf79 --- /dev/null +++ b/eventc/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} -X -Fmain.hex + +asm: *.asm + gpasm -p ${ASMPROC} -o main.hex $^ + +asmp: asm program + +.PHONY: all clean diff --git a/eventc/main.asm b/eventc/main.asm new file mode 100755 index 0000000..b763585 --- /dev/null +++ b/eventc/main.asm @@ -0,0 +1,210 @@ +LIST P=18F4550 +#include + +CONFIG FOSC = HS ; Use internal oscillator, RA6 as clock output +CONFIG WDT = OFF ; Watchdog Timer off +CONFIG LVP = OFF ; Low-Voltage Programming off +CONFIG MCLRE = ON ; MCLR pin disabled, RE3 input enabled + +;mem +R1 EQU 0x020 +R2 EQU 0x021 +R3 EQU 0x024 +R4 EQU 0x026 +R5 EQU 0x027 +TEMP EQU 0x23 +CUENTA EQU 0x022 +CUENTA2 EQU 0x034 +DISP0 EQU 0x30 +DISP1 EQU 0x31 +DISP2 EQU 0x32 +DISP3 EQU 0x33 + + ORG 0x00 + GOTO INIT + + ORG 0x08 ; Interrupt vector for high-priority interrupts + goto ISR ; Jump to Interrupt Service Routine + +INIT: + ; === Configure RB4-RB7 as Input === + movlw 0xff + movwf TRISB + clrf TRISD + clrf LATD + + movlw 0x0f + movwf ADCON1 + + clrf CUENTA + clrf CUENTA2 + + clrf TRISE + clrf LATE + clrf TRISA + clrf LATA + + ; === Enable RB Port Change Interrupt === + BSF RCON, IPEN + BCF INTCON2, RBPU ; Enable PORTB pull-ups + BSF INTCON2, 0 ; Set interrupt on high priority RBIP + ;BSF INTCON, RBIE ; Enable RB Port Change Interrupt + BSF INTCON, GIE ; Enable Global Interrupts + BSF INTCON, PEIE ; Enable Peripheral Interrupts + ; INT0 + BSF INTCON, INT0IE + BCF INTCON2, INTEDG0 + ;BSF INTCON, INT1IE + ;BSF INTCON2, INTEDG1 + + movlw 0x00 + movwf CUENTA + call splitDigit + +MAIN_LOOP: + ;MOVFF PORTB, PORTD + call Delay + GOTO MAIN_LOOP ; Stay in loop, wait for interrupts + +; === Interrupt Service Routine === +ISR: + ;BTFSS INTCON, RBIF ; Check if RB Change interrupt occurred + ;RETFIE; Return if not triggered + BTFSS INTCON, INT0IF + RETFIE + MOVF PORTB, W ; Read PORTB (necessary to clear mismatch condition) + ; Interrupt code + incf CUENTA, W + daw + movwf CUENTA + call splitDigit + call SDelay + + ;BCF INTCON, RBIF ; Clear the RBIF flag + BCF INTCON, INT0IF + ;BCF INTCON, INT1IF + RETFIE; Return from interrupt + +splitDigit: + movf CUENTA, W + andlw 0x0f + movwf DISP0 + swapf CUENTA, W + andlw 0x0f + movwf DISP1 + movf CUENTA2, W + andlw 0x0f + movwf DISP2 + swapf CUENTA2, W + andlw 0x0f + movwf DISP3 + return + +disp_delay: + movlw D'250' + movwf R3 +disp_delay_inner: + NOP + NOP + NOP + NOP + decfsz R3, F + goto disp_delay_inner + return + +sevensw: + movlw high(sevenjmp) + movwf PCLATH + movf TEMP, W + addwf TEMP, W + addlw low(sevenjmp) + btfsc STATUS, 0 + incf PCLATH, 1 + movwf PCL +sevenjmp: + retlw 3Fh + retlw 06h + retlw 5Bh + retlw 4Fh + retlw 66h + retlw 6Dh + retlw 7Dh + retlw 07h ; siete + retlw 7Fh ; ocho + retlw 6Fh ; nueve + retlw 77h ; A + retlw 7Ch ; B + retlw 39h ; C + retlw 5Eh ; D + retlw 79h ; E + retlw 71h ; F + +Delay: + MOVLW D'250' ; Outer loop count + MOVWF R1 +Delay_Outer: + MOVLW D'250' ; Inner loop count + MOVWF R2 +Delay_Inner: + NOP ; Do nothing (No Operation) + NOP + DECFSZ R2, F ; Decrement inner loop counter + GOTO Delay_Inner ; Repeat inner loop + call display + DECFSZ R1, F ; Decrement outer loop counter + GOTO Delay_Outer ; Repeat outer loop + RETURN ; Return from delay + +SDelay: + MOVLW D'150' ; Outer loop count + MOVWF R4 +SDelay_Outer: + MOVLW D'250' ; Inner loop count + MOVWF R5 +SDelay_Inner: + NOP ; Do nothing (No Operation) + NOP + DECFSZ R5, F ; Decrement inner loop counter + GOTO SDelay_Inner ; Repeat inner loop + call display + DECFSZ R4, F ; Decrement outer loop counter + GOTO SDelay_Outer ; Repeat outer loop + RETURN ; Return from delay + +display: + clrf PORTD + movff DISP0, TEMP + call sevensw + movwf PORTD + movlw 0x04 + movwf PORTE + call disp_delay + + clrf PORTD + movff DISP1, TEMP + call sevensw + movwf PORTD + movlw 0x02 + movwf PORTE + call disp_delay + + clrf PORTD + movff DISP2, TEMP + call sevensw + movwf PORTD + movlw 0x01 + movwf PORTE + call disp_delay + + clrf PORTD + clrf PORTE + movff DISP3, TEMP + call sevensw + movwf PORTD + movlw 0x10 + movwf PORTA + call disp_delay + clrf PORTA + return + + END diff --git a/eventc/main.hex b/eventc/main.hex new file mode 100755 index 0000000..290f1e6 --- /dev/null +++ b/eventc/main.hex @@ -0,0 +1,28 @@ +:020000040000FA +:0400000006EF00F017 +:0800080021EF00F0FF0E936EE2 +:10001000956A8C6A0F0EC16E226A346A966A8D6A7E +:10002000926A896AD08EF19EF180F28EF28CF2880B +:10003000F19C000E226E2DEC00F05CEC00F01DEF48 +:1000400000F0F2A21000815022280700226E2DEC51 +:1000500000F06BEC00F0F292100022500F0B306EAB +:1000600022380F0B316E34500F0B326E34380F0BB9 +:10007000336E1200FA0E246E000000000000000033 +:10008000242E3CEF00F01200000EFA6E23502324C1 +:10009000980FD8B0FA2AF96E3F0C060C5B0C4F0C87 +:1000A000660C6D0C7D0C070C7F0C6F0C770C7C0CB8 +:1000B000390C5E0C790C710CFA0E206EFA0E216E62 +:1000C00000000000212E60EF00F07AEC00F0202EFE +:1000D0005EEF00F01200960E266EFA0E276E0000FC +:1000E0000000272E6FEF00F07AEC00F0262E6DEF67 +:1000F00000F01200836A30C023F044EC00F0836EFD +:10010000040E846E3AEC00F0836A31C023F044ECB4 +:1001100000F0836E020E846E3AEC00F0836A32C007 +:1001200023F044EC00F0836E010E846E3AEC00F094 +:10013000836A846A33C023F044EC00F0836E100EAF +:0A014000806E3AEC00F0806A1200B5 +:020000040030CA +:04000000000C1F1EB3 +:020005008381F5 +:060008000FC00FE00F40E5 +:00000001FF diff --git a/keypad/Makefile b/keypad/Makefile new file mode 100755 index 0000000..4243940 --- /dev/null +++ b/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/keypad/main.asm b/keypad/main.asm new file mode 100755 index 0000000..63b4683 --- /dev/null +++ b/keypad/main.asm @@ -0,0 +1,201 @@ + LIST P=18F4550 + #include + + CONFIG FOSC = HS ; Use internal oscillator, RA6 as clock output + CONFIG WDT = OFF ; Watchdog Timer off + CONFIG LVP = OFF ; Low-Voltage Programming off + CONFIG MCLRE = OFF ; MCLR pin disabled, RE3 input enabled + +; Definitions +R3 EQU 0x024 +R4 EQU 0x025 +R5 EQU 0x026 +TEMP EQU 0x038 +COL EQU 0x039 +READ EQU 0x03A +SHIFT EQU 0x03B + + ORG 0x00 + GOTO INIT + + ORG 0x08 + GOTO ISR + +INIT: + CLRF LATB + movlw 0xf0 ; PORTB setup + MOVWF TRISB + + movlw 0x0f + movwf ADCON1 + + clrf TRISD ; Set port D as output + clrf LATD + CLRF TRISE + CLRF LATE + + BSF PORTE, 2 + CLRF TEMP + CLRF COL + CLRF SHIFT + CLRF READ + + ; Configure interrupts + BSF RCON, IPEN ; + BSF INTCON, GIE ; Enable Global Interrupts + BSF INTCON, PEIE ; Enable Peripheral Interrupts + BSF INTCON, RBIE ; Enable RB Port Change Interrupt + BCF INTCON2, RBPU ; Enable PORTB pull-ups + BSF INTCON2, RBIP ; Set interrupt on high priority RBIP + +LOOP: + MOVLW 0x0E + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + MOVLW 0x0D + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + MOVLW 0x0B + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + MOVLW 0x07 + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + GOTO LOOP + +ISR: + BTFSS INTCON, RBIF + RETFIE + + MOVF PORTB, W + NOP + ANDLW 0xf0 + MOVWF COL + SWAPF COL + SUBLW 0xf0 + BTFSC STATUS, Z + GOTO ret + CALL decode + MOVWF TEMP + CALL sevensw + MOVWF PORTD + CALL SDelay + CALL SDelay + CALL SDelay + CALL SDelay + CALL SDelay +ret: + BCF INTCON, RBIF + RETFIE + + +decode: + BTFSC SHIFT, 0 ; Check if row 1 is active + GOTO col1 + BTFSS COL, 0 ; Check every column + RETLW 0x01 + BTFSS COL, 1 + RETLW 0x02 + BTFSS COL, 2 + RETLW 0x03 + BTFSS COL, 3 + RETLW 0x0A +col1: + BTFSC SHIFT, 1 + GOTO col2 + BTFSS COL, 0 ; Check every column + RETLW 0x04 + BTFSS COL, 1 + RETLW 0x05 + BTFSS COL, 2 + RETLW 0x06 + BTFSS COL, 3 + RETLW 0x0B +col2: + BTFSC SHIFT, 2 + GOTO col3 + BTFSS COL, 0 ; Check every column + RETLW 0x07 + BTFSS COL, 1 + RETLW 0x08 + BTFSS COL, 2 + RETLW 0x09 + BTFSS COL, 3 + RETLW 0x0C +col3 + BTFSC SHIFT, 3 + RETLW 0x00 + BTFSS COL, 0 ; Check every column + RETLW 0x00 + BTFSS COL, 1 + RETLW 0x00 + BTFSS COL, 2 + RETLW 0x00 + BTFSS COL, 3 + RETLW 0x0D + RETLW 0x00 + + +SDelay: + MOVLW D'250' + MOVWF R4 +SDelay_Outer: + MOVLW D'250' + MOVWF R5 +SDelay_Inner: + NOP + NOP + DECFSZ R5, F ; Decrement inner loop counter + GOTO SDelay_Inner ; Repeat inner loop + DECFSZ R4, F ; Decrement outer loop counter + GOTO SDelay_Outer ; Repeat outer loop + RETURN ; Return from delay + +disp_delay: + movlw D'250' + movwf R3 +disp_delay_inner: + NOP + NOP + NOP + NOP + decfsz R3, F + goto disp_delay_inner + return + +sevensw: + movlw high(sevenjmp) + movwf PCLATH + movf TEMP, W + addwf TEMP, W + addlw low(sevenjmp) + btfsc STATUS, 0 + incf PCLATH, 1 + movwf PCL +sevenjmp: + retlw 3Fh + retlw 06h + retlw 5Bh + retlw 4Fh + retlw 66h + retlw 6Dh + retlw 7Dh + retlw 07h ; siete + retlw 7Fh ; ocho + retlw 6Fh ; nueve + retlw 77h ; A + retlw 7Ch ; B + retlw 39h ; C + retlw 5Eh ; D + retlw 79h ; E + retlw 71h ; F + + END diff --git a/keypad/main.hex b/keypad/main.hex new file mode 100755 index 0000000..800cf76 --- /dev/null +++ b/keypad/main.hex @@ -0,0 +1,28 @@ +:020000040000FA +:0400000006EF00F017 +:0800080030EF00F08A6AF00EEF +:10001000936E0F0EC16E956A8C6A966A8D6A84849F +:10002000386A396A3B6A3A6AD08EF28EF28CF2866E +:10003000F19EF1800E0E3B6E816E86EC00F00D0E8F +:100040003B6E816E86EC00F00B0E3B6E816E86EC93 +:1000500000F0070E3B6E816E86EC00F01AEF00F0A8 +:10006000F2A0100081500000F00B396E393AF00810 +:10007000D8B44BEF00F04DEC00F0386E90EC00F08F +:10008000836E79EC00F079EC00F079EC00F079EC1B +:1000900000F079EC00F0F29010003BB058EF00F067 +:1000A00039A0010C39A2020C39A4030C39A60A0CA0 +:1000B0003BB263EF00F039A0040C39A2050C39A45F +:1000C000060C39A60B0C3BB46EEF00F039A0070C00 +:1000D00039A2080C39A4090C39A60C0C3BB6000C4B +:1000E00039A0000C39A2000C39A4000C39A60D0C63 +:1000F000000CFA0E256EFA0E266E00000000262E69 +:100100007DEF00F0252E7BEF00F01200FA0E246E3A +:100110000000000000000000242E88EF00F0120014 +:10012000010EFA6E38503824300FD8B0FA2AF96E22 +:100130003F0C060C5B0C4F0C660C6D0C7D0C070C19 +:100140007F0C6F0C770C7C0C390C5E0C790C710CED +:020000040030CA +:04000000000C1F1EB3 +:02000500038175 +:060008000FC00FE00F40E5 +:00000001FF diff --git a/keypad/main.sync-conflict-20250319-154528-N4N5JQ7.asm b/keypad/main.sync-conflict-20250319-154528-N4N5JQ7.asm new file mode 100755 index 0000000..3bef196 --- /dev/null +++ b/keypad/main.sync-conflict-20250319-154528-N4N5JQ7.asm @@ -0,0 +1,200 @@ + LIST P=18F4550 + #include + + CONFIG FOSC = HS ; Use internal oscillator, RA6 as clock output + CONFIG WDT = OFF ; Watchdog Timer off + CONFIG LVP = OFF ; Low-Voltage Programming off + CONFIG MCLRE = OFF ; MCLR pin disabled, RE3 input enabled + +; Definitions +R3 EQU 0x024 +R4 EQU 0x025 +R5 EQU 0x026 +TEMP EQU 0x038 +COL EQU 0x039 +READ EQU 0x03A +SHIFT EQU 0x03B + + ORG 0x00 + GOTO INIT + + ORG 0x08 + GOTO ISR + +INIT: + CLRF LATB + movlw 0xf0 ; PORTB setup + MOVWF TRISB + + movlw 0x0f + movwf ADCON1 + + clrf TRISD ; Set port D as output + clrf LATD + CLRF TRISE + CLRF LATE + + BSF PORTE, 2 + CLRF TEMP + CLRF COL + CLRF SHIFT + CLRF READ + + ; Configure interrupts + BSF RCON, IPEN + BSF INTCON, GIE ; Enable Global Interrupts + BSF INTCON, PEIE ; Enable Peripheral Interrupts + BSF INTCON, RBIE ; Enable RB Port Change Interrupt + BCF INTCON2, RBPU ; Enable PORTB pull-ups + BSF INTCON2, RBIP ; Set interrupt on high priority RBIP + +LOOP: + MOVLW 0x0E + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + MOVLW 0x0D + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + MOVLW 0x0B + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + MOVLW 0x07 + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + GOTO LOOP + +ISR: + BTFSS INTCON, RBIF + RETFIE + + MOVF PORTB, W + NOP + ANDLW 0xf0 + MOVWF COL + SWAPF COL + CPFSEQ READ + CALL decode + MOVWF TEMP + CALL sevensw + MOVWF PORTD + CALL SDelay + CALL SDelay + CALL SDelay + CALL SDelay + CALL SDelay + + BCF INTCON, RBIF + RETFIE + +display: + +decode: + BTFSC SHIFT, 0 ; Check if row 1 is active + GOTO col1 + BTFSS COL, 0 ; Check every column + RETLW 0x01 + BTFSS COL, 1 + RETLW 0x02 + BTFSS COL, 2 + RETLW 0x03 + BTFSS COL, 3 + RETLW 0x0A +col1: + BTFSC SHIFT, 1 + GOTO col2 + BTFSS COL, 0 ; Check every column + RETLW 0x04 + BTFSS COL, 1 + RETLW 0x05 + BTFSS COL, 2 + RETLW 0x06 + BTFSS COL, 3 + RETLW 0x0B +col2: + BTFSC SHIFT, 2 + GOTO col3 + BTFSS COL, 0 ; Check every column + RETLW 0x07 + BTFSS COL, 1 + RETLW 0x08 + BTFSS COL, 2 + RETLW 0x09 + BTFSS COL, 3 + RETLW 0x0C +col3 + BTFSC SHIFT, 3 + RETLW 0x00 + BTFSS COL, 0 ; Check every column + RETLW 0x00 + BTFSS COL, 1 + RETLW 0x00 + BTFSS COL, 2 + RETLW 0x00 + BTFSS COL, 3 + RETLW 0x0D + RETLW 0x00 + + +SDelay: + MOVLW D'250' + MOVWF R4 +SDelay_Outer: + MOVLW D'250' + MOVWF R5 +SDelay_Inner: + NOP + NOP + DECFSZ R5, F ; Decrement inner loop counter + GOTO SDelay_Inner ; Repeat inner loop + DECFSZ R4, F ; Decrement outer loop counter + GOTO SDelay_Outer ; Repeat outer loop + RETURN ; Return from delay + +disp_delay: + movlw D'250' + movwf R3 +disp_delay_inner: + NOP + NOP + NOP + NOP + decfsz R3, F + goto disp_delay_inner + return + +sevensw: + movlw high(sevenjmp) + movwf PCLATH + movf TEMP, W + addwf TEMP, W + addlw low(sevenjmp) + btfsc STATUS, 0 + incf PCLATH, 1 + movwf PCL +sevenjmp: + retlw 3Fh + retlw 06h + retlw 5Bh + retlw 4Fh + retlw 66h + retlw 6Dh + retlw 7Dh + retlw 07h ; siete + retlw 7Fh ; ocho + retlw 6Fh ; nueve + retlw 77h ; A + retlw 7Ch ; B + retlw 39h ; C + retlw 5Eh ; D + retlw 79h ; E + retlw 71h ; F + + END diff --git a/keypad/main.sync-conflict-20250319-154528-N4N5JQ7.hex b/keypad/main.sync-conflict-20250319-154528-N4N5JQ7.hex new file mode 100755 index 0000000..19e76a2 --- /dev/null +++ b/keypad/main.sync-conflict-20250319-154528-N4N5JQ7.hex @@ -0,0 +1,28 @@ +:020000040000FA +:0400000006EF00F017 +:0800080030EF00F08A6AF00EEF +:10001000936E0F0EC16E956A8C6A966A8D6A84849F +:10002000386A396A3B6A3A6AD08EF28EF28CF2866E +:10003000F19EF1800E0E3B6E816E83EC00F00D0E92 +:100040003B6E816E83EC00F00B0E3B6E816E83EC99 +:1000500000F0070E3B6E816E83EC00F01AEF00F0AB +:10006000F2A0100081500000F00B396E393A3A626C +:100070004AEC00F0386E8DEC00F0836E76EC00F008 +:1000800076EC00F076EC00F076EC00F076EC00F028 +:10009000F29010003BB055EF00F039A0010C39A2EE +:1000A000020C39A4030C39A60A0C3BB260EF00F035 +:1000B00039A0040C39A2050C39A4060C39A60B0C86 +:1000C0003BB46BEF00F039A0070C39A2080C39A43F +:1000D000090C39A60C0C3BB6000C39A0000C39A257 +:1000E000000C39A4000C39A60D0C000CFA0E256E7C +:1000F000FA0E266E00000000262E7AEF00F0252E64 +:1001000078EF00F01200FA0E246E000000000000EC +:100110000000242E85EF00F01200010EFA6E385018 +:1001200038242A0FD8B0FA2AF96E3F0C060C5B0C63 +:100130004F0C660C6D0C7D0C070C7F0C6F0C770C54 +:0A0140007C0C390C5E0C790C710C7C +:020000040030CA +:04000000000C1F1EB3 +:02000500038175 +:060008000FC00FE00F40E5 +:00000001FF diff --git a/keypad/main.sync-conflict-20250319-155715-N4N5JQ7.asm b/keypad/main.sync-conflict-20250319-155715-N4N5JQ7.asm new file mode 100755 index 0000000..3bef196 --- /dev/null +++ b/keypad/main.sync-conflict-20250319-155715-N4N5JQ7.asm @@ -0,0 +1,200 @@ + LIST P=18F4550 + #include + + CONFIG FOSC = HS ; Use internal oscillator, RA6 as clock output + CONFIG WDT = OFF ; Watchdog Timer off + CONFIG LVP = OFF ; Low-Voltage Programming off + CONFIG MCLRE = OFF ; MCLR pin disabled, RE3 input enabled + +; Definitions +R3 EQU 0x024 +R4 EQU 0x025 +R5 EQU 0x026 +TEMP EQU 0x038 +COL EQU 0x039 +READ EQU 0x03A +SHIFT EQU 0x03B + + ORG 0x00 + GOTO INIT + + ORG 0x08 + GOTO ISR + +INIT: + CLRF LATB + movlw 0xf0 ; PORTB setup + MOVWF TRISB + + movlw 0x0f + movwf ADCON1 + + clrf TRISD ; Set port D as output + clrf LATD + CLRF TRISE + CLRF LATE + + BSF PORTE, 2 + CLRF TEMP + CLRF COL + CLRF SHIFT + CLRF READ + + ; Configure interrupts + BSF RCON, IPEN + BSF INTCON, GIE ; Enable Global Interrupts + BSF INTCON, PEIE ; Enable Peripheral Interrupts + BSF INTCON, RBIE ; Enable RB Port Change Interrupt + BCF INTCON2, RBPU ; Enable PORTB pull-ups + BSF INTCON2, RBIP ; Set interrupt on high priority RBIP + +LOOP: + MOVLW 0x0E + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + MOVLW 0x0D + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + MOVLW 0x0B + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + MOVLW 0x07 + MOVWF SHIFT + MOVWF PORTB + + CALL disp_delay + GOTO LOOP + +ISR: + BTFSS INTCON, RBIF + RETFIE + + MOVF PORTB, W + NOP + ANDLW 0xf0 + MOVWF COL + SWAPF COL + CPFSEQ READ + CALL decode + MOVWF TEMP + CALL sevensw + MOVWF PORTD + CALL SDelay + CALL SDelay + CALL SDelay + CALL SDelay + CALL SDelay + + BCF INTCON, RBIF + RETFIE + +display: + +decode: + BTFSC SHIFT, 0 ; Check if row 1 is active + GOTO col1 + BTFSS COL, 0 ; Check every column + RETLW 0x01 + BTFSS COL, 1 + RETLW 0x02 + BTFSS COL, 2 + RETLW 0x03 + BTFSS COL, 3 + RETLW 0x0A +col1: + BTFSC SHIFT, 1 + GOTO col2 + BTFSS COL, 0 ; Check every column + RETLW 0x04 + BTFSS COL, 1 + RETLW 0x05 + BTFSS COL, 2 + RETLW 0x06 + BTFSS COL, 3 + RETLW 0x0B +col2: + BTFSC SHIFT, 2 + GOTO col3 + BTFSS COL, 0 ; Check every column + RETLW 0x07 + BTFSS COL, 1 + RETLW 0x08 + BTFSS COL, 2 + RETLW 0x09 + BTFSS COL, 3 + RETLW 0x0C +col3 + BTFSC SHIFT, 3 + RETLW 0x00 + BTFSS COL, 0 ; Check every column + RETLW 0x00 + BTFSS COL, 1 + RETLW 0x00 + BTFSS COL, 2 + RETLW 0x00 + BTFSS COL, 3 + RETLW 0x0D + RETLW 0x00 + + +SDelay: + MOVLW D'250' + MOVWF R4 +SDelay_Outer: + MOVLW D'250' + MOVWF R5 +SDelay_Inner: + NOP + NOP + DECFSZ R5, F ; Decrement inner loop counter + GOTO SDelay_Inner ; Repeat inner loop + DECFSZ R4, F ; Decrement outer loop counter + GOTO SDelay_Outer ; Repeat outer loop + RETURN ; Return from delay + +disp_delay: + movlw D'250' + movwf R3 +disp_delay_inner: + NOP + NOP + NOP + NOP + decfsz R3, F + goto disp_delay_inner + return + +sevensw: + movlw high(sevenjmp) + movwf PCLATH + movf TEMP, W + addwf TEMP, W + addlw low(sevenjmp) + btfsc STATUS, 0 + incf PCLATH, 1 + movwf PCL +sevenjmp: + retlw 3Fh + retlw 06h + retlw 5Bh + retlw 4Fh + retlw 66h + retlw 6Dh + retlw 7Dh + retlw 07h ; siete + retlw 7Fh ; ocho + retlw 6Fh ; nueve + retlw 77h ; A + retlw 7Ch ; B + retlw 39h ; C + retlw 5Eh ; D + retlw 79h ; E + retlw 71h ; F + + END diff --git a/keypad/main.sync-conflict-20250319-155715-N4N5JQ7.hex b/keypad/main.sync-conflict-20250319-155715-N4N5JQ7.hex new file mode 100755 index 0000000..19e76a2 --- /dev/null +++ b/keypad/main.sync-conflict-20250319-155715-N4N5JQ7.hex @@ -0,0 +1,28 @@ +:020000040000FA +:0400000006EF00F017 +:0800080030EF00F08A6AF00EEF +:10001000936E0F0EC16E956A8C6A966A8D6A84849F +:10002000386A396A3B6A3A6AD08EF28EF28CF2866E +:10003000F19EF1800E0E3B6E816E83EC00F00D0E92 +:100040003B6E816E83EC00F00B0E3B6E816E83EC99 +:1000500000F0070E3B6E816E83EC00F01AEF00F0AB +:10006000F2A0100081500000F00B396E393A3A626C +:100070004AEC00F0386E8DEC00F0836E76EC00F008 +:1000800076EC00F076EC00F076EC00F076EC00F028 +:10009000F29010003BB055EF00F039A0010C39A2EE +:1000A000020C39A4030C39A60A0C3BB260EF00F035 +:1000B00039A0040C39A2050C39A4060C39A60B0C86 +:1000C0003BB46BEF00F039A0070C39A2080C39A43F +:1000D000090C39A60C0C3BB6000C39A0000C39A257 +:1000E000000C39A4000C39A60D0C000CFA0E256E7C +:1000F000FA0E266E00000000262E7AEF00F0252E64 +:1001000078EF00F01200FA0E246E000000000000EC +:100110000000242E85EF00F01200010EFA6E385018 +:1001200038242A0FD8B0FA2AF96E3F0C060C5B0C63 +:100130004F0C660C6D0C7D0C070C7F0C6F0C770C54 +:0A0140007C0C390C5E0C790C710C7C +:020000040030CA +:04000000000C1F1EB3 +:02000500038175 +:060008000FC00FE00F40E5 +:00000001FF diff --git a/test/main.asm b/test/main.asm index 3609444..de1fc2e 100755 --- a/test/main.asm +++ b/test/main.asm @@ -20,7 +20,7 @@ Start: BCF INTCON2, 7 MOVLW 0fh ; Set all pins to digital I/0 MOVWF ADCON1 - MOVLW 0xF0 + MOVLW 0xFF MOVWF TRISB CLRF LATB ;MOVLW 0x0E diff --git a/test/main.hex b/test/main.hex index c5323ca..2eab937 100755 --- a/test/main.hex +++ b/test/main.hex @@ -1,5 +1,5 @@ :020000040000FA -:10000000956A8C6AF19E0F0EC16EF00E936E8A6A2D +:10000000956A8C6AF19E0F0EC16EFF0E936E8A6A1E :0400100081CF83FF1A :020000040030CA :04000000000C1F1EB3