Listado 1. Programa Ejemplo
*******************************************************
* Programa ejemplo 68HC05
* Lee el estado de un interruptor en el bit 0 del puerto A; 1 = cerrado
* Cuando se cierra, el LED se enciende 1 segundo; El LED se enciende
* cuando el bit 7 del Puerto A es 0. Espera a que se abra el interruptor,
* y entonces repetir. Rebotes del interruptor de 50mS
* NOTA: Tiempos basados en el tiempo de ejecución de las instrucciones
* Si usa un simulador o cristal menor de 4MHz, esta rutina correrá más
* lenta que la deseada
*******************************************************
$BASE 10T
0000
PORTA EQU $00
0004
DDRA
00E0
TEMP1 EQU $C0
0300
0300 A6 80
INIT
0302 B7 00
0304 B7 04
* El resto del puerto A se configura como entrada
0306 B6 00
TOP
0308 A4 01
030A 27 FA
030C CD 0323
030F 1F 00
0311 A6 14
0313 CD 0323
0316 4A
0317 26 FA
0319 1E 00
031B 00 00FD OFFLP BRSET 0,PORTA,OFFLP ;Lazo hasta interruptor abierto
031E CD 0323
0321 20 E3
***
* DLY50 — Subrutina de retardo ~50ms
* Guarda el valor original del acumulador
* pero X siempre estará a cero en el retorno
***
0323 B7 C0 DLY50
0325 A6 41
0327 5F
OUTLP
0328 5A
INNRLP
0329 26 FD
032B 4A
032C 26 F9
032E B6 C0
0330 81
; Díce al ensamblador que usa el modo decimal
; menos los valores $ o %
;Dirección Directa del puerto A
EQU $04
;Dirección control de dato, puerto A
;One byte temp storage location
ORG $0300
;El Programa empezará en $0300
LDA #$80
;Empieza la inicialización
STA PORTA
;El LED se apagará
STA DDRA
;Pone el bit 7 del puerto como salida
LDA PORTA
;Lee el interruptor en LSB del Puerto A
AND #$01
;Prueba el bit-0
BEQ TOP
;Lazo hasta bit-0 = 1
JSR DLY50
;Retardo de 50 ms para los rebotes
BCLR 7,PORTA ;Enciende el LED (bit-7 a 0)
LDA #20
;El Decimal 20 se ensambla como $14
DLYLP JSR DLY50 ;Retardo de 50 ms
DECA
;Contador de Lazo hasta 20 lazos
BNE DLYLP
;20 veces (20-19,19-18,...1-0)
BSET 7,PORTA ;Apaga el LED
JSR DLY50
;Retorno realizado
BRA TOP
;Mira al siguiente cierre del interruptor
STA TEMP1
;Guarda el acumulador en la RAM
LDA #65
;lazo externo de 65 veces
CLRX
;X se usa como lazo interno contador
DECX
;0-FF, FF-FE,...1-0 256 lazos
BNE INNRLP
;6 ciclos * 256 * 500ns/ciclo = 0.768ms
DECA
;65-64, 64-63,...1-0
BNE OUTLP
;1545 ciclos * 65 * 500ns/ciclo = 50.212ms
LDA TEMP1
;Recupera el valor guardado en el acumulador
RTS
;Retorno
36