Aqui va otro ejemplito mas, esta vez usaremos dos perifericos(switch"s y display 7 segmentos), el programa consiste en que cada switch controla un display que cada vez que pulsemos un switch se va incrementando el correspondiente display en una unidad:
;-------------------------------------------------------------------------------------------
; VsZeNeR"04 16/julio/04
;Programa: Switch y 7 segmentos
;Simulador MC68000: IDE68K(vs1.35)
;
;Entrada: D0: Registro encargado almacenar direccion de switch
; A0: Almacena direccion de tabla e ilumina 1º 7 segmentos
; A1: Almacena direccion de tabla e ilumina 2º 7 segmentos
; A2: Almacena direccion de tabla e ilumina 3º 7 segmentos
; A3: Almacena direccion de tabla e ilumina 4º 7 segmentos
;
;Resumen: Programa que enciende 7 segmento adecuado segun switch y lo incrementa de 0-9
; Solo estan activos los 4 switch de 0-3, del 4-7 no actuan
;-------------------------------------------------------------------------------------------
org $400 ;inicio programa
*****VARIABLES*************************
TABLA dc.b %00111111 ;0 on: A0=$400 ->inicio tabla
dc.b %00000110 ;1 on: A0=$401
dc.b %01011011 ;2 on: A0=$402
dc.b %01001111 ;3 on: A0=$403
dc.b %01100110 ;4 on: A0=$404
dc.b %01101101 ;5 on: A0=$405
dc.b %01111101 ;6 on: A0=$406
dc.b %00000111 ;7 on: A0=$407
dc.b %01111111 ;8 on: A0=$408
dc.b %01100111 ;9 on: A0=$409 ->fin tabla
SWITCH equ $E001 ;direccion efectiva de los switches
*****PROGRAMA**************************
main move.b #%00111111,$E017 ;ilumino 0 en 1º 7 segmentos
lea TABLA+1,A0 ;cargo direccion segunda TABLA en A0(carga 2º direccion ya que esta iluminado 0)
move.b #%00111111,$E015 ;ilumino 0 en 2º 7 segmentos
lea TABLA+1,A1 ;cargo direccion segunda TABLA en A1(carga 2º direccion ya que esta iluminado 0)
move.b #%00111111,$E013 ;ilumino 0 en 3º 7 segmentos
lea TABLA+1,A2 ;cargo direccion segunda TABLA en A2(carga 2º direccion ya que esta iluminado 0)
move.b #%00111111,$E011 ;ilumino 0 en 4º 7 segmentos
lea TABLA+1,A3 ;cargo direccion segunda TABLA en A3(carga 2º direccion ya que esta iluminado 0)
progr move.b SWITCH,D0 ;cargo direccion de SWITCH en registro D0
CMP #%00000001,D0 ;¿primer switch on?
BNE second ;no ->ve a second
move.b (A0)+,$E017 ;si ->ilumina numero correspondiente en 1º 7 seg e incrementa direccion A0
clr.b D0 ;reset D0
clr.b SWITCH ;reset SWITCH
CMP #$40A,A0 ;¿A0 esta en fin TABLA?
BEQ uno ;si ->ve a uno
BRA progr ;no ->ve a progr
*****SEGUNDO 7 SEGMENTOS***************
second CMP #%00000010,D0 ;¿segundo switch on?
BNE third ;no ->ve a third
move.b (A1)+,$E015 ;si ->ilumina numero correspondiente en 2º 7 seg e incrementa direccion A1
clr.b D0 ;reset D0
clr.b SWITCH ;reset SWITCH
CMP #$40A,A1 ;¿A1 esta en fin TABLA?
BEQ dos ;si ->ve a dos
BRA progr ;no ->ve a progr
*****TERCER 7 SEGMENTOS****************
third CMP #%00000100,D0 ;¿tercer switch on?
BNE four ;no ->ve a four
move.b (A2)+,$E013 ;si ->ilumina numero correspondiente en 3º 7 seg e incrementa direccion A2
clr.b D0 ;reset D0
clr.b SWITCH ;reset SWITCH
CMP #$40A,A2 ;¿A2 esta en fin TABLA?
BEQ tres ;si ->ve a tres
BRA progr ;no ->ve a progr
*****CUARTO 7 SEGMENTOS****************
four CMP #%00001000,D0 ;¿cuarto switch on?
BNE five ;no ->ve a five
move.b (A3)+,$E011 ;si ->ilumina numero correspondiente en 4º 7 seg e incrementa direccion A3
clr.b D0 ;reset D0
clr.b SWITCH ;reset SWITCH
CMP #$40A,A3 ;¿A3 esta en fin TABLA?
BEQ cuatro ;si ->ve a cuatro
five BRA progr ;no ->ve a prog
*****SUBRUTINAS************************
uno BSR loop ;ve a subrutina uno
BRA progr ;ve a progr
dos BSR loop1 ;ve a subrutina dos
BRA progr ;ve a progr
tres BSR loop2 ;ve a subrutina tres
BRA progr ;ve a progr
cuatro BSR loop3 ;ve a subrutina cuatro
BRA progr ;ve a progr
loop lea TABLA,A0 ;carga direccion TABLA en A0(actualiza A0)
rts ;fin subrutina uno
loop1 lea TABLA,A1 ;carga direccion TABLA en A1(actualiza A1)
rts ;fin subrutina dos
loop2 lea TABLA,A2 ;carga direccion TABLA en A2(actualiza A2)
rts ;fin subrutina tres
loop3 lea TABLA,A3 ;carga direccion TABLA en A3(actualiza A3)
rts ;fin subrutina cuatro
***************************************
end main ;fin programa
Hasta el siguiente ejemplito!!!
