;******************************************* ; Extended opcodes for 8052 ; V1.1 ; There are only macros with useful functions ;******************************************* ;Macros accesing a bit in all the internal memory potencia macro bt btt set 1 ct set bt if ct btt set btt*2 ct set ct-1 endif if ct btt set btt*2 ct set ct-1 endif if ct btt set btt*2 ct set ct-1 endif if ct btt set btt*2 ct set ct-1 endif if ct btt set btt*2 ct set ct-1 endif if ct btt set btt*2 ct set ct-1 endif if ct btt set btt*2 ct set ct-1 endif if ct btt set btt*2 ct set ct-1 endif endm Xsetb macro dir,bt ;Activates every bit addresable or not potencia bt orl dir,#btt endm Xclrb macro dir,bt ;Clears every bit adresable or not potencia bt anl dir,#btt endm Xcpl macro dir,bt ;Complements evwry bit potencia bt xrl dir,#btt endm Xjb macro dir,bt,salt ;Jumps if bit=1 push acc mov a,dir mov c,acc.bt pop acc jc salt endm Xjnb macro dir,bt,salt ;jumps if bit=0 push acc mov a,dir mov c,acc.bt pop acc jnc salt endm Xjbc macro dir,bt,salt ;jumps if bit =1 and clears bit push acc mov a,dir mov c,acc.bt pop acc Xclrb dir,bt jc salt endm ;Macro for changing register bank nbank macro ;Returns bank# ina A mov a,psw anl a,#00011000b rl a swap a endm bank0 macro anl psw,#11100111b ; clr rs0 ; clr rs1 endm bank1 macro setb rs0 clr rs1 endm bank2 macro setb rs1 clr rs0 endm bank3 macro orl psw,#00011000b endm ;****************************************** ; Extended jump opcodes ;****************************************** ; CLJNE some sintax as CJNE but with long jump cljne MACRO dato1,dato2,salto cjne dato1,dato2,$+5 sjmp $+5 ljmp salto@2 ENDM ; CJE Jumps if equal, some sintaxis as CJNE cje MACRO dato1,dato2,salto cjne dato1,dato2,$+6 ljmp salto ENDM ; CJP jumps if arg1 > arg2 cjp MACRO dato1,dato2,salto cjne dato1,dato2,$+6 sjmp $+7 jc $+5 ljmp salto ENDM ; CJPE jumps if arg1 >= arg2 cjpe MACRO dato1,dato2,salto cjne dato1,dato2,$+3 jc $+5 ljmp salto ENDM ; CJM jumps if arg1 < arg2 cjm MACRO dato1,dato2,salto cjne dato1,dato2,$+3 jnc $+5 ljmp salto ENDM ; CJME jumps if arg1 <= arg2 cjme MACRO dato1,dato2,salto cjne dato1,dato2,$+6 ljmp salto jnc $+5 ljmp salto ENDM ;**************************************** ; Acces to external memory ;**************************************** ; LDA Load acumulator in absolute lda macro direcc push dph push dpl mov dptr,#direcc ; Carga la dirección de memoria externa movx a,@dptr pop dpl pop dph endm ; STA stores Acc in absolute sta macro direcc push dph push dpl mov dptr,#direcc ; Carga la dirección en el DPTR movx @dptr,a pop dpl pop dph endm ; LDAC loads acc in absolute from program memory ldac macro direc push dph push dpl mov dptr,#direcc clr a movc a,@a+dptr pop dpl pop dph endm ; LDACX loads acc from programa memory absolute indexing ldacx macro direc,x push dph push dpl mov dptr,#direcc mov a,x movc a,@a+dptr pop dpl pop dph endm