ASSEMBLY
.include .\reg51.def
.var_org $20 iram
status .ds.b 1
statusser .ds.b 1
statusb .ds.b 1
statush .ds.b 1
vacio .ds.b 1
modelo .ds.b 1
rmod .ds.b 1
bloser .ds.b 1
indice .ds.b 1
bufer .ds.b 1
addsl .ds.b 1
addsh .ds.b 1
octetos .ds.b 1
lectura .ds.b 1
datam .ds.b 1
ind_h .ds.b 1 ;indice del conversor
crchx .ds.b 1
bufhex .ds.b 1
NULO .DS.B 1
lengt .ds.b 2 ;largo del paquete de tx
lengtg .ds.b 2 ;ciclos de grabado
mdptrp .ds.b 2 ;datapointer de tx
mdptr .ds.b 2 ;datapointer de grabado
mdpth .ds.b 2 ;datapointer del conversor
pila:
.text_org $0000
RESET: ljmp arranca
INT0: ljmp teclado
.ds.b 5
TIMER0 ljmp arranca
.ds.b 5
INT1: ljmp ARRANCA
.ds.b 5
TIMER1: ljmp arranca
.ds.b 5
SERIE0: ljmp lee
.ds.b 5
TIMER2: ljmp arranca
.ds.b 13
SERIE1: ljmp arranca
.ds.b 5
INT2: ljmp arranca
.ds.b 5
INT3: ljmp arranca
.ds.b 5
INT4: ljmp arranca
.ds.b 5
INT5: ljmp arranca
.ds.b 5
WDT1: ljmp arranca;
arranca: mov sp,#pila
jnb p3.2,p2400
mov tmod,#%00000001
mov t2con,#%00110100 ;generador de baudios ;ok
mov th2,#$ff
mov tl2,#$dd
mov rcap2h,#$ff
mov rcap2l,#$dd ;dd 9600 baudios
mov SCON,#%01010000 ;Configura el puerto serie:
sjmp confr
p2400: jnb p3.2,!
mov tmod,#%00000001
mov t2con,#%00110100 ;generador de baudios ;ok
mov th2,#$ff
mov tl2,#$b8
mov rcap2h,#$ff
mov rcap2l,#$b8 ;b8 4800 baudios
mov SCON,#%01010000 ;Configura el puerto serie:
lcall espera2
lcall espera2
confr: clr psw.1
mov rmod,#$00
mov nulo,#$40
mov status,#$00
mov statusser,#$00
mov statusb,#$00
mov statush,#$00
mov vacio,#$00
mov auxr,#%00000001
mov r3,#$00
mov bloser,#$00
mov ip,#%00010001
mov dptr,#$0000 ;uno adelantado (+1) para compenzar
mov mdptrp+0,dpl ;aumento adelantado de dptr en la lectura
mov mdptrp+1,dph
mov lengt+0,#$00
mov lengt+1,#$04 ;1kbyte
setb ie.7
setb ie.4
setb ie.1
setb ie.0 ;int ext 0
setb status.5 ;por defecto 5vpp
mov modelo,#$01 ;registro de modelos
mov indice,#$00
mov a,#$8
mov r0,#octetos
mov @r0,a
mov addsl,#$ff ;inicio de grabado menos uno (-1)
mov addsh,#$7f ;
mov datam,#%00000000
mov lengtg+0,#$ff
mov lengtg+1,#$1f
mov dptr,#$0000
mov mdptr+0,dpl
mov mdptr+1,dph
REP_MENU lcall envia_menu
MOV P1,#%00100000
nop
nop
sjmp !
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
envia_menu:
mov dptr,#menu
lcall envia_texto
reti
menu:
.dc.b ,10,10,10,10,10,10,10,10,10,13
.dc.b " iA",10,10,13
.dc.b " AT89C2051-AT89C4051-AT89C51-AT89C52",10,13
.dc.b " AT89S51-AT89S52- AT89C8252-AT89LV52",10,13
.dc.b " AT89LV52-AT89LV55-AT89LS52-89LS51",10,10,13
.dc.b " * MENU DE USO *",10,10,10,13
.dc.b " (M) SELECCION DE MODELO",10,13
.dc.b " (C) CONFIRMACION DE MODELO",10,13
.dc.b " (L) LECTURA DE MEMORIA",10,13
.dc.b " (X) HABILITA ALMACENAR EN RAM Y/O COPIAR A PC ",10,13
.dc.b " (B) BORRADO TOTAL DE MEMORIA",10,13
.dc.b " (G) GRABAR CHIP",10,13
.dc.b " (E) GRABA 2k eeprom AT89c8253",10,13
.dc.b " (T) TRANSFERIR MEMORIA DEL CHIP A PC",10,13
.dc.b " PAQUETES DE 1K con cheksum 1K xmodem",10,13
.dc.b " - 8K SIN PROTOCOLO SI (X) FUE ACTIVADO",10,13
.dc.b " (F) LECTURA FABRICANTE MODELO Y VPP",10,13
.dc.b " (V) COMPARA MEMORIA RAM CON CHIP",10,13
.dc.b " (Z) BLOQUEOS NIVEL1 NIVEL2 NIVEL3",10,13
.dc.b " (H) TX-RX 19200 BAUDIOS",10,13,13,13,0
envia_texto:
clr a
movc a,@a+dptr
jz f_pres
inc dptr
lcall tx
sjmp envia_texto
f_pres: ret
lee: jnb scon.0,!
mov A,SBUF ;Lee caracter del buffer
clr SCON.0 ;Indica que es tenido en cuenta
mov bufer,a
jnb statusser.5,recepcion
jb statusser.7,cheq
lcall recepcion_bin
reti
cheq: lcall cheqsu
reti
tx: mov SBUF,A ;Se mete en el buffer de la UART
jnb SCON.1,! ;Espera a que haya sido enviado
clr SCON.1 ;Se va a transmitir un byte
ret
recepcion:
clr c
mov a,bufer
mov b,#'M' ;header 0x02 1kb bytes packet
xrl a,b
jz modser
clr c
mov a,bufer
mov b,#'L' ;header 0x02 1kb bytes packet
xrl a,b
jz lectser
clr c
mov a,bufer
mov b,#'C' ;header 0x02 1kb bytes packet
xrl a,b
jz confser
mov a,bufer
mov b,#'R' ;header 0x02 1kb bytes packet
xrl a,b
jz repi_menu
mov a,bufer
mov b,#'F' ;header 0x02 1kb bytes packet
xrl a,b
jz fabtt
mov a,bufer
mov b,#'B' ;header 0x02 1kb bytes packet
xrl a,b
jz borr
mov a,bufer
mov b,#'G' ;header 0x02 1kb bytes packet
xrl a,b
jz grrrr
mov a,bufer
mov b,#'X' ;header 0x02 1kb bytes packet
xrl a,b
jz permite_entrada
mov a,bufer
mov b,#'T' ;header 0x02 1kb bytes packet
xrl a,b
jz transf
mov a,bufer
mov b,#'V' ;header 0x02 1kb bytes packet
xrl a,b
jz VER
mov a,bufer
mov b,#'Z' ;header 0x02 1kb bytes packet
xrl a,b
jz BLOK
mov a,bufer
mov b,#'H' ;header 0x02 1kb bytes packet
xrl a,b
jz HEXA
mov a,bufer
mov b,#'E' ;header 0x02 1kb bytes packet
xrl a,b
jz eep
reti
eep: ljmp eeprom
BLOK: LJMP BLOQUEOS
VER: LJMP VERIFICA
transf: ljmp cero
modser: ljmp fun4
lectser: ljmp fun5
confser: ljmp fun1
repi_menu:
clr statusser.5
ljmp rep_menu
fabtt: ljmp fun6
borr: ljmp fun3
grrrr: ljmp fun2
HEXA: mov dptr,#IBIN
lcall envia_texto
mov tmod,#%00000001
mov t2con,#%00110100 ;generador de baudios ;ok
mov th2,#$ff
mov tl2,#$ee
mov rcap2h,#$ff
mov rcap2l,#$ee ;b8 4800 baudios
mov SCON,#%01010000 ;Configura el puerto serie:
reti
permite_entrada:
cpl status.6 ;permite lectura y almacenamiento de memoria de chip
jnb status.6,slec
mov dptr,#cylectura
lcall envia_texto
reti
slec: mov dptr,#xlectura
lcall envia_texto
reti
recepcion_bin:
jb statusser.4,packet
jb statusser.2,pnum
jb statusser.1,pnum
clr c
mov a,bufer
mov b,#%00000010 ;header 0x02 1kb bytes packet
xrl a,b
jz atr
clr c
mov a,bufer
mov b,#%00000100 ;?EOF recibido responde 0x06 rx completado
xrl a,b
jz eof
header_error:
clr statusser.1
clr statusser.2
clr statusser.3
clr statusser.4
clr statusser.7
mov r3,#$00
mov a,#$15
acall tx
ret
eof: mov a,#$06
acall tx
mov statush,#$00
mov vacio,#$00
clr statusser.5
clr statusser.1
clr statusser.2
clr statusser.3
clr statusser.4
clr statusser.7
mov dptr,#$0000
mov mdptrp+0,dpl
mov mdptrp+1,dph
ret
atr: setb statusser.2
mov lengt+0,#$00
mov lengt+1,#$04 ;1kbyte
ret
pnum: jb statusser.4,packet
jb statusser.3,num
mov bloser,bufer
setb statusser.3
ret
num: mov a,bufer
cpl a
xrl a,bloser
jz numok
erroblocke:
clr statusser.1
clr statusser.2
clr statusser.3
clr statusser.4
clr statusser.7
mov a,#$15
acall tx
ret
numok: setb statusser.4
ret
packet: mov p1,#%10111110 ;set ESTADO DE LECTURA vpp 5 en espera
jb vacio.4,bin_puro
jb statush.7,hexai
mov b,#$3a
mov a,bufer
clr c
xrl a,b
jz authex ; autodeteccion de hexa intel
setb vacio.4
clr statush.7
sjmp bin_puro
authex:
setb statush.7
clr vacio.4
sjmp hexai
bin_puro:
mov dpl,mdptrp+0
mov dph,mdptrp+1 ;carga puntero virtual
mov a,bufer
movx @dptr,a ;carga dato apuntado por puntero virtual
mov b,r3
add a,b
mov r3,a
inc dptr ;incrementa direcion
mov mdptrp+0,dpl
mov mdptrp+1,dph ;guarda direccion
jnb statush.7,binp
HEXAI:
mov a,bufer
mov b,r3
add a,b
mov r3,a
lcall decodificador
binp:
ljmp rxx?
rxxs:
ret
rxx?: mov r0,lengt+0
mov r1,lengt+1
djnz r0,rxx52 ;decrementa byte bajo
djnz r1,rx52 ;decrementa byte alto
setb statusser.7
RET
rxx52: mov lengt+0,r0 ;devuelve valor y retorna a grabacion
RET ;otro siclo
rx52: mov lengt+1,r1 ;devuelve valor y retorna a grabacion
mov lengt+0,r0
RET ;otro siclo
cheqsu: mov a,bufer
xrl a,r3
jz okcrc
clr statusser.1
clr statusser.2
clr statusser.3
clr statusser.4
clr statusser.7
mov r3,#$00
mov a,#$15
mov SBUF,A ;Se mete en el buffer de la UART
jnb SCON.1,! ;Espera a que haya sido enviado
clr SCON.1 ;Se va a transmitir un byte
mov p1,#%00111110 ;set ESTADO DE LECTURA vpp 5 en espera
ret
okcrc:
clr ie.4
clr statusser.1
clr statusser.2
clr statusser.3
clr statusser.4
clr statusser.7
mov r3,#$00
djnz R0,!
djnz R0,!
djnz R0,!
setb ie.4
mov a,#$06
mov SBUF,A ;Se mete en el buffer de la UART
jnb SCON.1,! ;Espera a que haya sido enviado
clr SCON.1 ;Se va a transmitir un byte
ret
retorna_packete:
jb status.6,total
mov a,,#$02
acall tx
inc bloser
mov a,bloser
acall tx
mov bloser,a
cpl a
acall tx
mov R3,#$00
mov lengt+0,#$00
mov lengt+1,#$04 ;1kbyte
sjmp packetx
total: mov lengt+0,#$00
mov lengt+1,#$20 ;8kbyte
packetx:
mov dpl,mdptrp+0
mov dph,mdptrp+1 ;carga puntero virtual de tx
movx a,@dptr ;carga dato apuntado por puntero virtual
mov bufer,a
mov b,r3
add a,b
mov r3,a
inc dptr ;incrementa direcion
mov mdptrp+0,dpl
mov mdptrp+1,dph ;guarda direccion
mov a,bufer
acall tx
nop
mov r0,lengt+0
mov r1,lengt+1
djnz r0,rxxt52 ;decrementa byte bajo
djnz r1,rxt52 ;decrementa byte alto
jb status.6,src
mov a,r3
acall tx
src: mov r3,#$00
mov dptr,#$0000 ;uno adelantado (+1) para compenzar
mov mdptrp+0,dpl ;aumento adelantado de dptr en la lectura
mov mdptrp+1,dph
ret
rxxt52: mov lengt+0,r0 ;devuelve valor y retorna a grabacion
ljmp packetx ;otro siclo
rxt52: mov lengt+1,r1 ;devuelve valor y retorna a grabacion
mov lengt+0,r0
ljmp packetx ;otro siclo
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
teclado:
jnb p3.2,!
lcall espera2
lcall espera2
lcall espera2
lcall espera2
lcall espera2
lcall espera2
setb statusser.5
mov a,#$15
lcall tx
mov statusb,#00
reti
cero:
setb p1.7
mov dptr,#$0000 ;uno adelantado (+1) para compenzar
mov mdptrp+0,dpl ;aumento adelantado de dptr en la lectura
mov mdptrp+1,dph
lcall retorna_packete
clr p1.7
mov statusb,#00
reti
uno:
setb statusser.5
mov a,#$15
lcall tx
mov statusb,#00
ret
FUN1:
lcall configura
mov statusb,#00
reti
FUN2:
clr ie.0
clr p3.2
lcall espera2
lcall espera2
setb p3.2
setb ie.0
mov a,#$00
xrl a,statusb
jnz bks
clr status.6
mov dptr,#g_disp
lcall envia_texto
jb status.3,g8252
lcall graba89c52
clr status.7
reti
g8252:
clr ie.0
clr p3.2
lcall espera2
lcall espera2
setb p3.2
setb ie.0
lcall graba89c8252
clr status.7
reti
bks:
lcall ale_puls52
mov statusb,#$00
mov dptr,#bcomp
lcall envia_texto
reti
FUN3: setb status.0 ;condicion de borrado
clr status.6
mov dptr,#borrado
lcall envia_texto
jb status.3,b8253
lcall borra89c52
lcall espera2
lcall espera2
lcall borra89c52
clr ie.0
clr p3.2
lcall espera2
lcall espera2
setb p3.2
setb ie.0
lcall lectura_chip
clr status.0
mov statusb,#00
reti
b8253:
lcall borra89c8253
lcall espera2
lcall espera2
lcall borra89c8253
clr ie.0
clr p3.2
lcall espera2
lcall espera2
setb p3.2
setb ie.0
lcall lectura_chip
clr status.0
mov statusb,#00
reti
FUN4:
clr ie.0
clr p3.2
lcall espera2
lcall espera2
setb p3.2
setb ie.0
mov a,modelo
mov b,#$04
cjne a,b,pxm
mov modelo,#$00
pxm: inc modelo
lcall c_modelo
mov statusb,#00
reti
bufer_copia = $0000
FUN5:
clr ie.0
clr p3.2
lcall espera2
lcall espera2
setb p3.2
setb ie.0
clr status.7 ;solo lectura (anula diferencia con ff)
setb status.2 ;pemita escritura en linea superior lectura)
jnb status.6,slectura
mov dptr,#bufer_copia
swp: mov mdptr+0,dpl
mov mdptr+1,dph
slectura:
mov dptr,#lecturas
lcall envia_texto
lcall lectura_chip
clr status.2
clr status.7
mov statusb,#00
reti
FUN6:
clr ie.0
clr p3.2
lcall espera2
setb p3.2
setb ie.0
clr status.6
mov indice,#$00
lcall codigo?
lcall c_modelo
mov statusb,#00
reti
VERIFICA:
clr status.7 ;solo lectura (anula diferencia con ff)
setb status.2 ;pemita escritura en linea superior lectura)
mov dptr,#bufer_copia
mov mdptr+0,dpl
mov mdptr+1,dph
mov dptr,#verificacion
lcall envia_texto
clr ie.0
clr p3.2
lcall espera2 ; pone a cero conunter 4051
setb p3.2
setb ie.0
mov dptr,#compar
lcall envia_texto
lcall verifica_grabado
clr status.2
clr status.7
mov statusb,#00
reti
BLOQUEOS:
inc statusb
mov b,statusb
mov a,#$01
xrl a,b
jz niv1
mov a,#$02
xrl a,b
jz niv2
mov a,#$03
xrl a,b
jz niv3
mov statusb,#$00
reti
niv1: mov dptr,#bloc1
mov p1,#00111111
lcall envia_texto
reti
niv2: mov dptr,#bloc2
mov p1,#00110011
lcall envia_texto
reti
niv3: mov dptr,#bloc3
mov p1,#00110101
lcall envia_texto
reti
eeprom:
clr status.7 ;solo lectura (anula diferencia con ff)
setb status.2 ;pemita escritura en linea superior lectura)
mov addsl,#$ff
mov addsh,#$7f
mov lengtg+0,#$00
mov lengtg+1,#$08 ;2k
mov dptr,#$0000 ;ajusta para grabado de eeprom 2 k memoria
mov mdptr+0,dpl
mov mdptr+1,dph
mov dptr,#teeprom
lcall envia_texto
lcall graba89c8252ex
clr status.2
clr status.7
reti
;///////////////////////////////////////////////////////////////////////////
borra89c52:
setb status.7
lcall contr_borrado52
jb status.5,ale5b ;BORRADO EN 5VPP
lcall ale_borrado52
ret
ale5b: lcall ale_borrado52_v5
ret ; falta retorno hacia control de programa
borra89c8253:
setb status.7
lcall contr_borrado8253
lcall ale_borrado8252
ret ; falta retorno hacia control de programa
graba89c8252ex:
clr status.7
gbaex:
lcall adres_data ;dato y direccion reajuste cada siclo
lcall contr_esc8252ex ;seteo incial
lcall espera1
jnb p1.1,! ;ESPERA BUSY
lcall adds_escl ;direcciones bajas puesta en lach
lcall adds_esch ;direcciones altas puesta en lach
lcall data_esc ;dato en lach de escritura
lcall ale_puls8252 ;pulso en bajo de ale/-prog
lcall muestra_lcd_g ;lach lcd direcion origen,destino y dato grabado
lcall espera2
ljmp fin82ex?
graba89c8252:
clr status.7
gbaz:
lcall adres_data ;dato y direccion reajuste cada siclo
lcall contr_esc8252 ;seteo incial
jnb p1.1,! ;ESPERA BUSY
lcall adds_escl ;direcciones bajas puesta en lach
lcall adds_esch ;direcciones altas puesta en lach
lcall data_esc ;dato en lach de escritura
lcall ale_puls8252 ;pulso en bajo de ale/-prog
lcall muestra_lcd_g ;lach lcd direcion origen,destino y dato grabado
ljmp fin82?
graba89c52:
clr status.7
lcall contr_esc52 ;seteo incial
gaa:
lcall adres_data ;dato y direccion reajuste cada siclo
lcall adds_escl ;direcciones bajas puesta en lach
lcall adds_esch ;direcciones altas puesta en lach
lcall data_esc ;dato en lach de escritura
jb status.5,vpplow ;sino 5, 12
lcall ale_puls52 ;pulso en bajo de ale/-prog
ljmp cta
vpplow:
lcall ale_puls52_v5 ;pulso en bajo de ale/-prog
cta:
lcall muestra_lcd_g ;lach lcd direcion origen,destino y dato grabado
setb p1.6 ;incrementa puntero 4051
clr p1.6
ljmp fin52?
codigo?: mov addsl,#$00
mov addsh,#$80
codigo??:
lcall adres_code?? ; ajusta direcciones de lectura de codigo de fabrica
lcall adds_escl ; lachea direcciones bajas
lcall adds_esch ; lachea direcciones altas
lcall contr_lec_cod_device52 ;
lcall cff
setb p1.6 ;incrementa puntero 4051
clr p1.6
mov r0,addsh
cjne r0,#$82,codigo??
ret
lectura_chip:
lcall adres_data_l ;dato y direccion reajuste cada siclo
lcall adds_escl ;direcciones bajas puesta en lach
lcall adds_esch ;direcciones altas puesta en lach
jb status.3,l8252
lcall contr_lec52 ;leer lo grabado
sjmp norml
l8252:
lcall contr_lec8252 ;leer lo grabado
norml:
lcall adres_data_ll ;almacena lo grabado
lcall add_destino ;lach lcd direcion origen,destino y dato grabado
setb p1.6 ;incrementa puntero 4051
clr p1.6
jnb status.7,s_error
jnb status.1,s_error
ret
s_error: ljmp fin52l?
verifica_grabadoex:
lcall adres_data_l ;dato y direccion reajuste cada siclo
lcall adds_escl ;direcciones bajas puesta en lach
lcall adds_esch ;direcciones altas puesta en lach
lcall contr_lec8252ex ;leer lo grabado
lcall adres_data_lll ;almacena lo grabado
lcall muestra_lcd ;lach lcd direcion origen,destino y dato grabado
jnb status.7,s_errorc
jnb status.1,s_errorc
ret
s_errorc:
ljmp fin52Vex?
verifica_grabado:
lcall adres_data_l ;dato y direccion reajuste cada siclo
lcall adds_escl ;direcciones bajas puesta en lach
lcall adds_esch ;direcciones altas puesta en lach
jb status.3,v8252
lcall contr_lec52 ;leer lo grabado
sjmp normv
v8252:
lcall contr_lec8252 ;leer lo grabado
normv
lcall adres_data_lll ;almacena lo grabado
lcall muestra_lcd ;lach lcd direcion origen,destino y dato grabado
setb p1.6 ;incrementa puntero 4051
clr p1.6
jnb status.7,s_errorcex
jnb status.1,s_errorcex
ret
s_errorcex:
ljmp fin52V?
c_modelo: mov dptr,#xis8952-51
mov a,modelo
mov b,#$33
mul ab
jb psw.2,ovf
clr c
addc a,dpl
mov dpl,a
jnc cres
inc dph
sjmp cres
ovf: addc a,dpl
mov dpl,a
jc audph
mov a,b
add a,dph
mov dph,a
sjmp cres
audph: inc dph
mov a,b
clr c
addc a,dph
jc udphn
mov dph,a
sjmp cres
udphn: mov dph,a
inc dph
cres: lcall envia_texto
ret
xIS8952: .dc.b "8K flash AT89-C52-LS52-",10,13
.dc.b "LS8252-LV52-S52-IS89C52",10,13,0
xAT8952: .dc.b "4K flash AT89C4051 ",10,13
.dc.b " AT89LV51- C51 - S51 ",10,13,0
xra2: .dc.b "12K flash AT89LS8253 ",10,13
.dc.b " 2K eeprom ",10,13,0
xAT898252: .dc.b "2K flash AT89c2051 ",10,13
.dc.b " ",10,13,0
;----------------------------------------------------------------------------
;
;funciones del control de grabacion bit 4 del puerto b acceso al 74573
; P1.
; | 0 | p2.6 H | L | L |
; | 1 | p2.7 L | H | L |
; | 2 | p3.6 L | H | H |
; | 3 | p3.7 L | H | H |
; | 4 | p3.3 L | H | H |
; | 5 | EA/Vpp puls L| puls L| H |
; | 6 | clock para 89c2051 - 4051
; | 7 | ale especial conmuta bancos combinado con A15
:
; P3.
; | 5 | ALE/prog H(12v)| H(12v)| H(12v)|
; | 2 | RESET 89C4051
;----------------------------------------------------------------------------
contr_borrado52:
clr p3.3
setb p3.4
mov p1,#%00110001
ret
contr_borrado8253:
clr p3.3
setb p3.4
mov p1,#%00010001 ; 12 vpp permanente
ret
contr_esc8252:
mov p1,#%00001110 ; 12 VPP PERMANENTE
setb p3.3 ;
setb p3.4 ;
ret
contr_esc8252ex:
mov p1,#%00001100 ; 12 VPP PERMANENTE
setb p3.3
clr p3.4
ret
contr_esc52:
setb p3.3
setb p3.4
mov p1,#%00101110
ret
contr_lec8252:
mov p1,#%00001100 ;12 vpp seteado permanente
setb p3.4
clr p3.3
mov P0,#%11111111
lcall espera
mov a,p0
mov lectura,a
ret
contr_lec8252ex:
mov p1,#%00001100 ;12 vpp seteado permanente
clr p3.4
clr p3.3
mov P0,#%11111111
lcall espera
mov a,p0
mov lectura,a
ret
contr_lec52:
clr p3.3
setb p3.4
mov p1,#%00101100 ;set ESTADO DE LECTURA VPP 5v en espera
mov P0,#%11111111
lcall espera
mov a,p0
mov lectura,a
ret
contr_lec_cod_device52:
jb status.3,l8253c ; modelos 8252 8253
mov p1,#%00111111 ;set ESTADO DE LECTURA vpp 5 en espera
mov p1,#%00100000 ;set ESTADO DE LECTURA vpp 5 en espera
mov P0,#%11111111
lcall espera
mov a,p0
mov lectura,a
ret
l8253c:
mov p1,#%00011111 ;set ESTADO DE LECTURA vpp 12
mov p1,#%00000000 ;set ESTADO DE LECTURA vpp 12
mov P0,#%11111111
lcall espera
mov a,p0
mov lectura,a
ret
contr_ini:
mov P1,#%00100000 ;vpp activo en estado bajo
ret
;----carga direcciones y datos---
adds_escl:
SETB P1.7
mov P0,ADDSL ;address Low luego @ alguna variable
CLR P1.7
MOV P0,#%11111111
ret
adds_esch:
mov P2,ADDSH ;address Hi luego @ alguna variable
ret
fin52Vex?:
mov r0,lengtg+0
mov r1,lengtg+1
djnz r0,ld52Vex ;decrementa byte bajo
djnz r1,hd52Vex ;decrementa byte alto
mov dptr,#compar
lcall envia_texto
lcall fin_lectura
ret
ld52Vex:
mov lengtg+0,r0 ;devuelve valor y retorna a grabacion
ljmp verifica_grabadoex ;otro siclo
hd52Vex:
mov lengtg+1,r1 ;devuelve valor y retorna a grabacion
mov lengtg+0,r0
ljmp verifica_grabadoex ;otro siclo
fin52V?:
mov r0,lengtg+0
mov r1,lengtg+1
djnz r0,ld52V ;decrementa byte bajo
djnz r1,hd52V ;decrementa byte alto
lcall fin_lectura
ret
ld52V: mov lengtg+0,r0 ;devuelve valor y retorna a grabacion
ljmp verifica_grabado ;otro siclo
hd52V: mov lengtg+1,r1 ;devuelve valor y retorna a grabacion
mov lengtg+0,r0
ljmp verifica_grabado ;otro siclo
fin52l?: mov r0,lengtg+0
mov r1,lengtg+1
djnz r0,ld52l ;decrementa byte bajo
djnz r1,hd52l ;decrementa byte alto
lcall fin_lectura
ret
ld52l: mov lengtg+0,r0 ;devuelve valor y retorna a grabacion
ljmp lectura_chip ;otro siclo
hd52l: mov lengtg+1,r1 ;devuelve valor y retorna a grabacion
mov lengtg+0,r0
ljmp lectura_chip ;otro siclo
fin52?: mov r0,lengtg+0
mov r1,lengtg+1
djnz r0,ld52 ;decrementa byte bajo
djnz r1,hd52 ;decrementa byte alto
lcall fin_grab
ret
ld52: mov lengtg+0,r0 ;devuelve valor y retorna a grabacion
ljmp gaa ;otro siclo
hd52: mov lengtg+1,r1 ;devuelve valor y retorna a grabacion
mov lengtg+0,r0
ljmp gaa ;otro siclo
fin82?: mov r0,lengtg+0
mov r1,lengtg+1
djnz r0,ld82 ;decrementa byte bajo
djnz r1,hd82 ;decrementa byte alto
lcall fin_grab
ret
ld82: mov lengtg+0,r0 ;devuelve valor y retorna a grabacion
ljmp gbaz ;otro siclo
hd82: mov lengtg+1,r1 ;devuelve valor y retorna a grabacion
mov lengtg+0,r0
ljmp gbaz ;otro siclo
fin82ex?:
mov r0,lengtg+0
mov r1,lengtg+1
djnz r0,ld82ex ;decrementa byte bajo
djnz r1,hd82ex ;decrementa byte alto
lcall fin_grabex
ret
ld82ex: mov lengtg+0,r0 ;devuelve valor y retorna a grabacion
ljmp gbaex ;otro siclo
hd82ex: mov lengtg+1,r1 ;devuelve valor y retorna a grabacion
mov lengtg+0,r0
ljmp gbaex ;otro siclo
;----coloca datos----
data_esc:
mov P0,datam ;dato a grabar
ret
;---ALE/PROG pulso en bajo,
ale_puls8252:
CLR P3.5
lcall espera1
SETB P3.5
ret
ale_puls52_v5:
CLR P3.5
lcall espera1
SETB P3.5
ret
ale_puls52:
CLR P1.5 ;vpp 12v
lcall espera1
CLR P3.5
lcall espera1
SETB P3.5
lcall espera1
SETB P1.5
ret
ale_borrado52:
CLR P1.5 ; set vpp 12
lcall espera1
lcall espera1
lcall espera1
lcall espera1
CLR P3.5
lcall espera2
SETB P3.5
lcall espera1
lcall espera1
lcall espera1
lcall espera1
SETB P1.5
ret
ale_borrado52_v5:
lcall espera1
lcall espera1
CLR P3.5
lcall espera1
lcall espera1
lcall espera1
lcall espera1
lcall espera1
lcall espera1
SETB P3.5
lcall espera1
lcall espera1
ret
ale_borrado8252
lcall espera2
lcall espera1
CLR P3.5
lcall espera1
lcall espera2
lcall espera1
SETB P3.5
lcall espera1
lcall espera2
ret
fin_grabex:
lcall contr_ini
mov dptr,#GF
lcall envia_texto
mov addsl,#$ff
mov addsh,#$7f
mov lengtg+0,#$00
mov lengtg+1,#$08 ;2k
mov dptr,#$0000 ;ajusta para grabado-lectura de eeprom 2k
mov mdptr+0,dpl
mov mdptr+1,dph
lcall verifica_grabadoex
ret
fin_grab: lcall contr_ini
mov dptr,#GF
lcall envia_texto
lcall configura
clr ie.0
clr p3.2
lcall espera2
setb p3.2
setb ie.0
lcall verifica
ret
fin_lectura:
lcall contr_ini
jnb status.2,lect ;( status.7)
mov dptr,#oasd
sjmp ao1
lect: mov dptr,#GFL
lcall envia_texto
lcall configura
ret
ao1: lcall envia_texto
lcall configura
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
espera: mov acc,#$03
rty: djnz acc,rty
ret
espera1: mov acc,#$00
mov b,#$01 ;1.1 Mseg
rty1: djnz acc,rty1
djnz b,rty1
ret
espera2: mov acc,#$00
mov b,#$06 ;8.0 Mseg
rty2: djnz acc,rty2
djnz b,rty2
ret
adres_data_l: ;carga direciones y datos a grabar
mov dpl,addsl
mov dph,addsh
inc dptr
mov addsl,dpl ;guarda direccion incrementada
mov addsh,dph
ret
adres_data_ll:
jnb status.6,salm
jb status.3,vppa
mov p1,#%10111110
sjmp clra
vppa:
clr p1.5
setb p1.7
clra:
mov dpl,mdptr+0
mov dph,mdptr+1 ;carga puntero virtual
mov a,lectura
movx @dptr,a ;carga dato apuntado por puntero virtual
inc dptr ;incrementa direcion
mov mdptr+0,dpl
mov mdptr+1,dph ;guarda direccion
jb status.3,salm
mov p1,#%00111110
salm:
clr p1.7
ret
adres_data_lll
jb status.3,vppb
mov p1,#%10111110 ;set ESTADO DE LECTURA vpp 5 en espera
sjmp nclrb
vppb:
clr p1.5
setb p1.7
nclrb:
mov dpl,mdptr+0
mov dph,mdptr+1 ;carga puntero virtual
movx a,@dptr ;carga dato apuntado por puntero virtual
mov datam,a
inc dptr ;incrementa direcion
mov mdptr+0,dpl
mov mdptr+1,dph ;guarda direccion
jb status.3,sclrb
mov p1,#%00111110
sclrb:
clr p1.7
ret
adres_data: ;carga direciones y datos a grabar
jb status.3,vppc
mov p1,#%10111110 ;set ESTADO DE LECTURA vpp 5 en espera
sjmp nclrc
vppc:
clr p1.5
setb p1.7
nclrc:
mov dpl,addsl
mov dph,addsh
inc dptr
mov addsl,dpl ;guarda direccion incrementada
mov addsh,dph
mov dpl,mdptr+0
mov dph,mdptr+1 ;carga puntero virtual
movx a,@dptr ;carga dato apuntado por puntero virtual
mov datam,a
inc dptr ;incrementa direcion
mov mdptr+0,dpl
mov mdptr+1,dph ;guarda direccion
jb status.3,sclrc
mov p1,#%00111110
sclrc:
clr p1.7
ret
adres_code??: ; solo direcciones de lectura de codigo de fabrica
mov dpl,addsl
mov dph,addsh
inc dptr ; incrementa para proxima direccion leida
mov addsl,dpl
mov addsh,dph
ret
muestra_lcd:
mov a,datam ;lectura
mov b,lectura
clr c
xrl a,b
jz gok
setb status.4
sjmp gcont
nop
gok: clr status.4
nop
gcont: mov r0,#octetos
mov a,@r0
mov r0,a
djnz r0,noctg
mov octetos,#$80
sjmp octg
noctg: mov r1,#octetos
mov a,r0
mov @r1,a
ret
octg: jb status.4,erg
mov a,#'©'
lcall tx
sjmp fcont
erg: mov a,#'±'
lcall tx
fcont: ret
muestra_lcd_g:
mov r0,#octetos
mov a,@r0
mov r0,a
djnz r0,noctgg
mov octetos,#$80
sjmp octgg
noctgg:
mov r1,#octetos
mov a,r0
mov @r1,a
ret
octgg:
mov a,#'¯'
lcall tx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
add_destino:
clr status.1
mov b,#$ff
mov a,lectura
xrl a,b
jz ncoded
clr status.4 ;datos en estado ff en memoria leida
sjmp boludo
ncoded: ;dato difiere de ff en memoria leida
setb status.4
boludo: jnb status.7,spb
mov b,#$ff
mov a,lectura
xrl a,b
jz spb
falla_borrado:
mov dptr,#f_borrado
lcall envia_texto
setb status.1
spb: mov r0,#octetos
mov a,@r0
mov r0,a
djnz r0,noct
mov octetos,#$80
jb status.7,soct
sjmp oct
noct: mov r1,#octetos
mov a,r0
mov @r1,a
ret
oct: jb status.0,octx
jb status.4,codes
mov a,#'¸'
lcall tx
sjmp sadf
codes: mov a,#'±'
lcall tx
sadf: ret
jnb status.7,octx
ljmp soct
octx: jb status.2,soct
ocx: jb status.4,codesb
mov a,#'¸'
lcall tx
sjmp sadf
codesb: mov a,#'±'
lcall tx
ret
soct: jb status.2,ocx
jb status.0,ocx
ret
;////////////////////////////////////////////////////////////////////////////
cff:
mov a,addsl
xrl a,#$30
jz cffa
mov a,addsl
xrl a,#$31
jz cffb3
mov a,addsl
xrl a,#$32
jz xcffc
mov a,addsl
xrl a,#$00
jz cffa
mov a,addsh
xrl a,#$81
jz cffb100
mov a,addsh
xrl a,#$82
jz xcffc
ret
cffb3: ljmp cffb31
xcffc: ljmp cffc
cffa:
mov a,lectura
mov b,#$1e ;1E atmel
clr c
xrl a,b
jz atm
mov a,lectura
mov b,#$De ;D5 ISSI
clr c
xrl a,b
jz issi
ret
atm: mov dptr,#atmel
lcall envia_texto
ret
issi: mov dptr,#issiy
lcall envia_texto
ret
cffb100:
mov a,lectura
mov b,#$21 ;21 89C2051 100
clr c
xrl a,b
jz model4
mov a,lectura
mov b,#$41 ;41 89C4051 100
clr c
xrl a,b
jz model5
mov a,lectura
mov b,#$61 ;61 89LS51 100
clr c
xrl a,b
jz model6
mov a,lectura
mov b,#$62 ;62 89LS52 100
clr c
xrl a,b
jz model7
mov a,lectura
mov b,#$51 ;62 89S51 100
clr c
xrl a,b
jz model11
ret
model1: mov modelo,#$01 ;8k
mov dptr,#AT89C52
lcall envia_texto
ret
model3: mov modelo,#$01 ;8k
setb status.3
mov dptr,#AT89ls8252
lcall envia_texto
ret
model4: mov modelo,#$04 ;2k
mov dptr,#AT89C2051
lcall envia_texto
clr status.3
ret
model5: mov modelo,#$02 ;4k
mov dptr,#AT89C4051
lcall envia_texto
ret
model6: mov modelo,#$02 ;4k
mov dptr,#AT89ls51
lcall envia_texto
ret
model7: mov modelo,#$01 ;8k
mov dptr,#AT89ls52
lcall envia_texto
ret
model8: mov modelo,#$01 ;8k
mov dptr,#AT89lv52
lcall envia_texto
ret
model10: mov modelo,#$03 ;12k
mov dptr,#AT89s8253
lcall envia_texto
setb status.3
ret
model11: mov modelo,#$02 ;4k
mov dptr,#AT89s51
lcall envia_texto
ret
model12: mov modelo,#$01 ;8k
ret
model2: mov modelo,#$01 ;8k
ret
cffb31:
mov a,lectura
mov b,#$52 ;52 model 52 31
clr c
xrl a,b
jz model1
mov a,lectura
mov b,#$51 ;51 model ISSI89C52 31
clr c
xrl a,b
jz model2
mov a,lectura
mov b,#$82 ;82 model 8252 31
clr c
xrl a,b
jz model3
mov a,lectura
mov b,#$62 ;62 89LV52 31
clr c
xrl a,b
jz model8
mov a,lectura
mov b,#$73 ;73 89S8253 31
clr c
xrl a,b
jz model10
RET
cffc: mov a,lectura
mov b,#%11111111
clr c
xrl a,b
jz v12v
mov a,lectura
mov b,#%00000110
clr c
xrl a,b
jz v12v
mov a,lectura
mov b,#%00000101
clr c
xrl a,b
jz v5v
mov a,lectura
mov b,#%01010101
clr c
xrl a,b
jz v5v
mov a,lectura
mov b,#%10101010
clr c
xrl a,b
jz v12v
ret
v12v: mov dptr,#VPP12
lcall envia_texto
clr status.5 ;vpp 12 v
ret
v5v: mov dptr,#vpp5
lcall envia_texto
setb status.5 ; status.5 5 vpp seleccion
ret
configura:
mov a,#$01
cjne a,modelo,cnfat
ljmp m8k
cnfat mov a,#$02
cjne a,modelo,cnfa
ljmp m4k
cnfa: mov a,#$03
cjne a,modelo,cnfb
ljmp m12k
cnfb: mov a,#$04
cjne a,modelo,configurado
ljmp m2k
configurado:
ret
m8k:
mov addsl,#$ff
mov addsh,#$7f
mov lengtg+0,#$ff
mov lengtg+1,#$1f ;8k
mov dptr,#$0000 ;cambiar en el modelo a hacer binario
mov mdptr+0,dpl
mov mdptr+1,dph
clr status.3
jb status.1,s_er1
mov dptr,#mconf
lcall envia_texto
mov dptr,#kba
lcall envia_texto
ljmp configurado
s_er1 ret
m4k:
mov addsl,#$ff
mov addsh,#$7f
mov lengtg+0,#$00
mov lengtg+1,#$10 ;4k
mov dptr,#$0000 ;cambiar en el modelo a hacer binario
mov mdptr+0,dpl
mov mdptr+1,dph
clr status.3
jb status.1,s_er3
mov dptr,#mconf
lcall envia_texto
mov dptr,#kbb
lcall envia_texto
ljmp configurado
s_er3: ret
m2k:
mov addsl,#$ff
mov addsh,#$7f
mov lengtg+0,#$00
mov lengtg+1,#$08 ;2k
mov dptr,#$0000 ;cambiar en el modelo a hacer binario
mov mdptr+0,dpl
mov mdptr+1,dph
clr status.3
jb status.1,s_er4
mov dptr,#mconf
lcall envia_texto
mov dptr,#kbc
lcall envia_texto
ljmp configurado
s_er4: ret
m12k: mov addsl,#$ff
mov addsh,#$7f
mov lengtg+0,#$00
mov lengtg+1,#$30 ;12k
mov dptr,#$0000 ;cambiar en el modelo a hacer binario
mov mdptr+0,dpl
mov mdptr+1,dph
setb status.3
jb status.1,s_er5
mov dptr,#mconf
lcall envia_texto
mov dptr,#kbd
lcall envia_texto
ljmp configurado
s_er5: ret
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; STATUSH.7 ACTIVA DECODIFICADOR HEX INTEL
; mdpth .ds.b 2 ;datapointer del conversor
; ind_h .ds.b 1 ;indice del conversor
decodificador:
mov b,#$3a
mov a,bufer
xrl a,b
jz dosp
jb vacio.3,inch
jb vacio.0,inicio
dosp:
clr vacio.1
setb vacio.0
mov crchx,#$00
ret
inicio:
mov b,#$0d
mov a,bufer
xrl a,b
jz inch
mov b,#$0a
mov a,bufer
xrl a,b
jz inch
cpl vacio.1
lcall ascii_exa ;CONVIERTE ASCII EN EXADECIMAL GUARDA EN R5
jb vacio.1,inch ;FALTA COMPLETAR NIBLE SUPERIOR
jb statush.6,crc
jb statush.5,crc ;ultimo byte recibido
mov b,bufhex
mov a,crchx ;INTERCAMBIA
clr c
subb a,b
mov crchx,a ;GUARDA CRC
jb statush.4,codigo
jb statush.3,tipo
jb statush.2,puntero_l
jb statush.1,puntero_h
mov a,bufhex
mov ind_h,a
setb statush.1 ;INDICE DE CANTIDAD RECIBIDO
inch:
ret
tipo: mov a,bufhex
mov b,#$00
xrl a,b
jz normal
setb statush.6 ;LINEA FINAL RECIBIDA
ret
normal: setb statush.4 ;TIPO DE LINA RECIBIDA
ret
puntero_h:
mov a,bufhex
mov mdpth+1,A
setb statush.2 ;DPTR H RECIBIDO
ret
puntero_l:
mov a,bufhex
mov mdpth+0,a
setb statush.3 ;DPTR L RECIBIDO
ret
codigo: mov dph,mdpth+1
mov dpl,mdpth+0
mov a,bufhex
movx @dptr,a
inc dptr
mov mdpth+1,dph
mov mdpth+0,dpl
djnz ind_h,inch
setb statush.5 ;ULTIMO BYTE DE CODIGO
ret
crc: mov a,crchx
mov b,bufhex
xrl a,b
jz okhx
clr statush.7
ret
okhx: jb statush.6,crcf
clr vacio.0
clr vacio.1
mov statush,#%10000000
ret
crcf: clr vacio.0
clr vacio.1
setb vacio.3
mov statush,#%10000000
ret
ASCII_EXA:
mov a,bufer
jnb acc.6,numeros
mov b,#$37 ;RESTO 55
clr c
subb a,b
jb vacio.1,supn ;BIT ACTIVO = PRIMER NIBLE
anl a,#%00001111
orl a,bufhex ;AGRGO SUPERIOR GUARDADO
mov bufhex,a ;RETORNO DATO A R5
ret
NUMEROS:
mov b,#$30 ;RESTO 48
clr c
subb a,b
jb vacio.1,supn
anl a,#%00001111
orl a,bufhex ;AGREGO SUPERIOR GUARDADO
mov bufhex,a ;GUARDO
ret
SUPN:
swap a ;PRIMER NIBLE SUPERIOR
mov bufhex,a ;DEJO SUPERIO LIMPIO INFERIOR
ret
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
issiy .dc.b " ISSI",10,10,13,0
atmel: .dc.b ,10,10," ATMEL",10,10,13,0
VPP12: .dc.b " 12v VPP",10,10,13,0
VPP5: .dc.b " 5v VPP",10,10,13,0
AT89C52: .dc.b " AT89C52",10,10,13,0
AT89C2051: .dc.b " AT89C2051",10,10,13,0
AT89C4051: .dc.b " AT89C4051",10,10,13,0
AT89ls52: .dc.b " AT89LS52",10,10,13,0
AT89ls51: .dc.b " AT89LS51",10,10,13,0
AT89LV52: .dc.b " AT89LV52",10,10,13,0
AT89s51: .dc.b " AT89S52",10,10,13,0
AT89s52: .dc.b " AT89S52",10,10,13,0
AT89ls8252: .dc.b " AT89ls8252",10,10,13,0
AT89s8253: .dc.b " AT89s8253",10,10,13,0
ISSI8952 .Dc.B ,10," IS89C52",10,10,13,0
AT898252: .dc.b ,10," 89c8252",10,10,13,0
oasd: .dc.b ,10,10,13," LECTURA COMPLETA",10,10,13,0
kba: .dc.b " 8k (G) graba (B) borra (L) lee...",10,10,13,0
kbb: .dc.b " 4k (G) graba (B) borra (L) lee...",10,10,13,0
kbc: .dc.b " 2k (G) graba (B) borra (L) lee...",10,10,13,0
kbd: .dc.b " 12k (G) graba (B) borra (L) lee...",10,10,13,0
GF: .dc.b ,10,10,13," F I N GRABACION",10,10,13,0
blanco: .dc.b " CHIP DESCONOCIDO, DESCONECTADO o ABERIADO",10,10,13,0
GFL: .dc.b ,10,10,13," CHIP CONTROLADO Y BORRADO!!!!!!",10,10,13,0
f_borrado .dc.b " falla borrado!!! reintentar? (b)",10,10,13,0
borrado: .dc.b " CHIP-BORRADO?",10,10,13,0
mconf: .dc.b " CONFIGURADO",10,10,13,0
lecturas: .dc.b " LEYENDO MEMORIA ± /ff ¸ /code ",10,10,13,0
xlectura: .dc.b ,10,10,13," solo lectura para verificacion",10,10,13,0
cylectura: .dc.b ,10,10,13," lee y guarda memoria de chip en ram",10,10,13,0
verificacion: .dc.b ,10,10,13," compara datos en memorias origen / destino",10,10,13,0
COMPAR .dc.b ,10,10,13," © ok ± bloke distinto",10,10,13,0
g_disp .dc.b ,10,10,13," GRABANDO DISPOSITIVO",10,10,13,0
bloc1 .dc.b ,10,10,13,"SET LB1 (Z)PROXIMO (G) ACTIVA ",10,10,13,0
bloc2 .dc.b ,10,10,13,"SET LB1 & LB2 (Z)PROXIMO (G) ACTIVA ",10,10,13,0
bloc3 .dc.b ,10,10,13,"SET LB1 & LB2 & LB3 (Z)PROXIMO (G) ACTIVA ",10,10,13,0
BCOMP .dc.b ,10,10,13,"BLOQUEO COMPLETADO",10,10,13,0
IBIN .dc.b ,10,10,13,"CONFIGURADO 19200 BPS",10,10,13,0
teeprom .dc.b ,10,10,13,"GRABANDO EEPROM 2KB 89S8253",10,10,13,0
.END