--- /dev/null
+org 0x0000
+ljmp main
+
+org 0x002b ;vector de interrupcion del timer 2
+clr tr2
+ljmp leoTabla ;mando a la rutina de leer tabla
+ ;(por si ocupa más de 8 bytes y no
+ ;entra en el vector 0x000b)
+
+; defino algunas variables
+
+comienzoTabla equ 0x1000
+intervalo equ 66; 0.1ms (por el clock de 24MHz)
+;intervalo equ 0x0010
+largo equ 16
+retardoms equ 28-(largo/2)
+latch1 equ 0x0080
+latch2 equ 0x00c0
+cero equ 0x00
+rcap2l equ 0xca
+rcap2h equ 0xcb
+t2con equ 0xc8
+tl2 equ 0xcc
+th2 equ 0xcd
+tr2 equ 0xca
+tf2 equ 0xcf
+
+; para futuras pruebas y cambios en los delays, recordar que funcionó con intervalo en 0xf0 e intervalob en 0x07
+; en cristal de 12 MHz
+
+; variables
+dseg at 0x30
+milisegs:
+ ds 1
+currcol:
+ ds 1
+
+cseg at 0x0030
+;org 0x0030
+
+using 0
+main:
+ mov a, #0x00
+ mov dptr, #latch1
+ movx @dptr, a
+ mov a, #0x55
+ mov dptr, #latch2
+ movx @dptr, a
+
+ ; Cargo milisegundos
+ mov milisegs, #retardoms
+ ; cargo los capture registers
+ mov rcap2l, #low(0x10000-intervalo) ; low byte del intervalo
+ mov rcap2h, #high(0x10000-intervalo) ; high byte del intervalo
+
+ ;cargo los timers
+ mov tl2, #low(0x10000-intervalo) ; low byte del intervalo
+ mov th2, #high(0x10000-intervalo) ; high byte del intervalo
+
+ mov ie, #10100000b ; habilito interrupcion timer 2
+ ; bits de IE (interrupt enable) en 1:
+ ; IE.7 (Global enable/disable)
+ ; IE.5 (Enable timer 2 interrupt)
+ mov t2con, #00000100b ; setup timer 2 (auto-reload y start)
+
+ mov currcol,#(largo) ; inicializo el contador (uso r0) para leer de atrás para adelante
+
+ sjmp $ ; aca me quedo
+ ; (aca quedaria leyendo de la red)
+
+
+
+
+
+
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; ;;;
+ ;;; Rutinas de interrupciones ;;;
+ ;;; ;;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; ;;;
+ ;;; Rutina para leer la tabla (matriz) ;;;
+ ;;; ;;;
+ ;;; Toma como parametros: -r0 ;;;
+ ;;; Se afectan: - dptr ;;;
+ ;;; - acc ;;;
+ ;;; ;;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+leoTabla:
+ djnz milisegs, fin
+ mov milisegs, #retardoms
+ push acc ; *always* protect estos
+ push psw
+ push ar0
+ push dpl
+ push dph
+
+ mov r0, currcol
+ cjne r0,#cero,sigoLeyendo ; si no se terminaron de leer todas las columnas (r0 = 0), sigo
+ ; leyendo
+ mov r0,#(largo) ; vuelvo a empezar la lectura
+sigoLeyendo:
+ mov dptr,#comienzoTabla ; ubico el dptr en el comienzo de la tabla
+ dec r0
+ mov a,r0
+ add a,r0 ; a = 2*R0 -> tomo 2*R0 porque son 2 bytes cada columna a leer
+ push acc ; guardo el puntero de la tabla
+ movc a,@a+dptr ; leo la tabla
+
+ ;imprimo en latch2
+ mov dptr,#latch2
+ cpl a ; complemento para ver encendidos los "1"
+ movx @dptr,a
+
+ pop acc ; recupero el puntero de la tabla
+ add a,#0x01 ; busco el 2do byte
+
+ mov dptr,#comienzoTabla ; vuelvo a apuntar al comienzo de la tabla
+ movc a,@a+dptr ; ya que el que me indica por donde voy en la tabla
+ ; es el offset del acumulador
+
+ ;imprimo en latch1
+ mov dptr,#latch1
+ cpl a
+ movx @dptr,a
+
+ mov currcol, r0
+
+ pop dph
+ pop dpl
+ pop ar0
+ pop psw
+ pop acc
+
+fin:
+ clr tf2 ; limpio el bit de interrupcion (el reti no lo hace...)
+ setb tr2 ; arranco nuevamente el timer
+
+ reti ; volvemos al programa...
+
+
+
+
+
+
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ;;; ;;;
+ ;;; Matriz a leer ;;;
+ ;;; ;;;
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+org 0x1000
+
+;MAT_D: db 0xff,0xff,0xff,0xff,0xe3,0xc7,0xe3,0xc7,0xe3,0xc7,0x00,0x00,0xe0,0x00,0x00,0x00
+; db 0x00,0x00,0xff,0xfc,0xff,0xfc,0xf0,0x00,0xf0,0x00,0x05,0xaa,0x03,0x04,0x01,0x02
+
+
+
+
+MAT_D:
+ db 00001111b, 11110000b ; columna 0 (0x40,0x00)
+ db 00111111b, 11111100b ; columna 1
+ db 01110000b, 00000110b ; columna 2
+ db 01100000b, 00000110b ; columna 3
+ db 11100000b, 00000111b ; columna 4
+ db 11100000b, 00000111b ; columna 5
+ db 11100000b, 00000111b ; columna 6
+ db 11100000b, 00000111b ; columna 7
+
+ db 11100000b, 00000111b ; columna 8
+ db 11100000b, 00000111b ; columna 9
+ db 11100000b, 00000111b ; columna 10
+ db 11100000b, 00000111b ; columna 11
+ db 01110000b, 00001110b ; columna 12
+ db 01111111b, 11111110b ; columna 13
+ db 00111111b, 11111100b ; columna 14
+ db 00001111b, 11110000b ; columna 15
+
+end