|
Mostrando mensaje 13
|
|
< Anterior | Siguiente >
|
|
|
Hola,
Tengo que hacer un dado digital con 7 leds y he hecho este programa. Como
es la primera vez que trabajo con micros, no sé si funcionará.
¿Podéis echarle un vistazo?
No sé si he definido los puertos bien ya que ni siquiera sé qué es
"pull-up", "open-drain" o "push-pull". ¿Cómo tengo que hacer las
conexiones exteriores?
Gracias.
.title "DADODIG"
.vers "ST6215"
.pp_on ;habilita la paginacion del espacio de programa
.section 1 ;coloca el codigo a partir de la direccion 0800h
;Declaracion de registros: (m: lo hace visible en la simulacion)
X .def 080h, 0ffh, 0ffh, m ;indirect register
Y .def 081h, 0ffh, 0ffh, m ;indirect register
V .def 082h, 0ffh, 0ffh, m ;short direct register
W .def 083h, 0ffh, 0ffh, m ;short direct register
A .def 0ffh, 0ffh, 0ffh, m ;acumulador
;puerto A:
DRA .def 0c0h, 0ffh, 0ffh ;registro de datos del puerto A
DDRA .def 0c4h, 0ffh, 0ffh ;registro de direccion de datos A
OPRA .def 0cch, 0ffh, 0ffh ;registro de opciones del puerto A
;puerto B:
DRB .def 0c1h, 0ffh, 0ffh ;registro de datos del puerto B
DDRB .def 0c5h, 0ffh, 0ffh ;registro de direccion de datos B
OPRB .def 0cdh, 0ffh, 0ffh ;registro de opciones del puerto B
;Configuracion de los puertos I/O:
LDI DDRA, #0fh ;A3-A0:salidas
LDI OPRA, #0fh ;A3-A0:push-pull ¿0: open-drain?
LDI DRA, #00h ;
LDI DDRB, #00h ;B7-B0:entradas
LDI OPRB, #00h ;B7-B0:sin interrup.
LDI DRB, #00h ;B7-B0:con pull-up ¿sin?
; L1 L5 A0->L4 B0<-inicio
; L2 L4 L6 A1->L3,L5 B1<-parada
; L3 L7 A2->L2,L6
; A3->L1,L7
; Dado LEDs A3 A2 A1 A0 HEX REG.
; 1 4 0 0 0 1 01h 084h
; 2 3,5 0 0 1 0 02h 085h
; 3 1,4,7 1 0 0 1 09h 086h
; 4 1,3,5,7 1 0 1 0 0Ah 087h
; 5 1,3,4,5,7 1 0 1 1 0Bh 088h
; 6 1,2,3,5,6,7 1 1 1 0 0Eh 089h
dd1 .def 084h
dd2 .def 085h
dd3 .def 086h
dd4 .def 087h
dd5 .def 088h
dd6 .def 089h
LDI dd1, #01h
LDI dd2, #02h
LDI dd3, #09h
LDI dd4, #0Ah
LDI dd5, #0Bh
LDI dd6, #0Eh
;; Se guarda en el registro X el valor 6
;; LDI A, #06h
;; LD X, A
;; Se guarda en el registro V el valor 1
;; LDI A, #01h
;; LD V, A
;** PROGRAMA PRINCIPAL: **
;esperar hasta que se pulse el boton de inicio (entrada B0):
aguaita JRS 0, DRB, egabrum ;iniciar si B0=1
JRR 0, DRB, aguaita ;seguir esperando si B0=0
egabrum LDI A, #00h ; ffh?
LD DRA, A ;inhibir los LEDs
JP allegro
allegro LDI A, #83h ;empieza la cuenta en 0
anillo INC A ;incrementa A
LD Y, A ;almacena el conteo en Y
;comprobar si se ha pulsado el botón de parada:
LD A, DRB ;
CPI A, #02h ;compara la entrada con el valor 10b
JRZ alto ;ir a alta (parada) si DRB y V son iguales a 1
;cerrar el bucle del conteo:
LD A, Y ;carga valor del contador en el acumulador
CPI A, #89h ;se compara con el final del bucle
JRNZ anillo ;si no ha alcanzado el final se sigue incrementando A
JRZ allegro ;si ha acabado se reinicia el conteo desde 83h
alto LD A, (Y)
LD DRA, A ;se lleva el valor a la salida
JP aguaita ;volvemos a empezar
NOP
.END
Jose Moreno
jmoreno@alcavia.net ----- a900302@gaviota.ceit.es
http://personales.alcavia.net/~jmoreno PGP key available
|