Académique Documents
Professionnel Documents
Culture Documents
LED
BOTON O PULSADOR
SENSOR DIGITAL (DE RESPUESTA 1 o 0)
MOTOR DC (PREVIA ETAPA DE PUENTE H)
MOTOR PASO A PASO (PREVIA ETAPA DE AMPLIFICACION DE CORRIENTE)
SENSOR ANALÓGICO (PREVIA ETAPA DE CONVERSION A/D)
Se debe tomar en cuenta que el diseño de computador básico con el que se cuenta para esta práctica
solo cuenta con dos puertos paralelos de 8 bits y un puerto serie con protocolo RS-232.
Para que ésta práctica sea más dinámica, se contará con un simulador de dicho diseño de
computador básico, como se muestra en la figura:
LED
a) Encender un led.-
El objetivo de esta práctica cambiar a estado alto todos los bits del puerto B
Para ello, debe dimensionarse que bits necesitamos que sean entradas y que bits salidas; en
este caso todo el puerto B debe ser salidas. También debe determinarse que bits deben
encenderse; en este caso todos.
255 decimal
11111111 binario
11111111 FF hexadecimal
clra
staa crb ;ingresar a configuracion pines pb
ldaa #%11111111 ; 1 salida
staa pb ; pb como salida
ldaa #04 ;no hay interrupciones
staa crb ;salir de configuracion pines pb
;-----programa principal-----
inicio:
ldaa #255
staa pb
jmp inicio
;---------VECTORES DE INTERRUPCION-----------------
Se puede apreciar en el área de “nombrar puertos” se dimensionó todo el puerto B como salida
En el área de “programa principal” se cargó el acumulador A con el número 255 decimal y ese
número se guardó al registro pb; esto equivale a escribir el número 11111111 binario en el puerto B.
El resto de las áreas deben escribirse siempre, para darle un mayor orden y óptimo funcionamiento
del programa
En el simulador se apreciará:
Se puede apreciar que al dimensionar el puerto B como salida, en el simulador no se habilitan los
botones para el puerto B, esto a que una salida no puede modificarse exteriormente. Además el
simulador ha puesto en color rojo intenso a todos los bits del puerto B, lo cual representa que todos
están en estado alto. Si se conecta a cada bit, una resistencia en serie a un led con cátodo a tierra, se
podrá apreciar que queda encendido.
b) Encender leds pares de un puerto
En esta práctica se cambiará a estado alto solo los pines pares del puerto B.
85 decimal
01010101 binario
01010101 55 hexadecimal
Como el programa hace casi lo mismo, solo se debe modificar una instrucción en el área de
“programa principal”
;-----programa principal-----
inicio:
ldaa #85
staa pb
jmp inicio
inicio:
ldaa #%01010101
staa pb
jmp inicio
;-----programa principal-----
inicio:
ldaa #$55
staa pb
jmp inicio
A menudo se irá mezclando los tres tipos de escritura para que el programa sea más fácil de
entender para el programador.
En el simulador se podrá apreciar:
c) Parpadeo de un led.
Esta práctica tiene como objetivo lograr mantener en estado alto a todo el puerto B, y luego de
0,5 segundos llevarlo a estado bajo, repitiendo este proceso infinitamente
0,5 seg
clra
staa crb ;ingresar a configuracion pines pb
ldaa #%11111111 ; 1 salida
staa pb ; pb como salida
ldaa #04 ;no hay interrupciones
staa crb ;salir de configuracion pines pb
;-----programa principal-----
inicio:
ldaa #255
staa pb
jsr delay_500m
clra
staa pb
jsr delay_500m
jmp inicio
;---------SUBRUTINAS----------------------
delay_500m:
;clr equ a 256 en bucle
clr $0010 ;(b)6~
ldab #194 ;(c)4~
stab $0011 ;(d)5~
loop1:
dec $0010 ;(e)6~
bne loop1 ;(f)4~
;(f+e)x256=2560
;~t=b+c+d+(h+g+2560)x194+i=498600~
; crital osc de 4 MHz equ a 1 us por ciclo de trabajo
;tiempo delay=1usx498600=0,49s
;---------VECTORES DE INTERRUPCION-----------------
Se puede apreciar que se agregó una nueva área llamada “subrutinas” debajo de “programa
principal”, en los comentarios de la subrutina “delay_500m” se hizo el cálculo para que dicho
retardo dure 0,5 segundos aproximadamente.
El programa principal se modificó de tal modo que el puerto B esté en estado alto y luego de 0,5
segundos pase a estado bajo, luego espera otros 0,5 segundos y repite la secuencia.
0,5 seg
Si se quisiera realizar retardos de mayor tiempo utilizando la subrutina de 0,5 segundos de retardo,
se podría hacer lo siguiente:
inicio:
ldaa #255
staa pb
jsr delay_500m
jsr delay_500m
jsr delay_500m
jsr delay_500m
jsr delay_500m
jsr delay_500m
clra
Se podría crear otra subrutina donde un contador repita las veces que sea necesario la
subrutina de delay_500m; por ejemplo si se desea un delay de 20 segundos, se tendría que
repetir 40 veces la subrutina delay_500m
;-----programa principal-----
inicio:
ldaa #255
staa pb
jsr delay_20s
jmp inicio
;---------SUBRUTINAS----------------------
delay_20s:
clr cont
for_1-40:
jsr delay_500m
inc cont
ldaa cont
cmpa #40
bne for_1-40
rts
;----------------------------------------------------------------
delay_500m:
;clr equ a 256 en bucle
clr $0010 ;(b)6~
ldab #194 ;(c)4~
stab $0011 ;(d)5~
loop1:
dec $0010 ;(e)6~
bne loop1 ;(f)4~
rts ;(i)5~
ACTIVIDADES:
Realizar un parpadeo de leds en el puerto B de tal modo que 1 segundo queden encendidos
los bits pares y apagados los bits impares, luego durante 3 segundos queden encendidos los
bits impares y apagados los bits pares, repitiendo este proceso de manera cíclica.
Cambiar la configuración de puertos de modo que puerto A y B estén como salidas.
Además realizar un parpadeo de modo que el puerto A permanezca con todos los bits
encendidos durante 5 segundos y el puerto B completamente apagado. Después de ese
tiempo, en el puerto A se debe apagar los 4 bits menos significativos, y deben encenderse
los 4 bits más significativos del puerto B, durante 5 segundos. Luego debe apagarse por
completo todo el puerto A, y debe encenderse por completo el puerto B por 5 segundos.
Finalmente ambos puertos deben apagarse y permanecer así por otros 5 segundos,
repitiendo el proceso de manera cíclica.