En el hardware de la figura 4.1.1 se observa que se han colocado 4 dip
switch al puerto B y estos
no poseen resistencia de pull up lo cual nos obliga a habilitar las
resistencias internas con las que
cuenta el microcontrolador PIC16F84, el programa debe entonces en un
repetitivo infinito leer el
nivel lógico que colocan los switch y pasar este resultado al
puerto A complementando el estado de
la información puesto que de acuerdo a la disposición
de los LEDs un estado bajo en el puerto
enciende el LED correspondiente y por ende un estado alto en el puerto,
apaga el LED.
Programa:
status equ 03h
optionr equ 81h
trisa equ 85h
porta equ 05h
trisb equ 86h
portb equ 06h
;
Inicio:
bsf status,5
;se pasa al banco 1 de RAM
clrf trisa
;se programa el puerto A como salida
movlw 0Fh
;dato para la programación del puerto B
movwf trisb
;parte alta como salida y parte baja como entrada
bcf optionr,7 ;se
habilitan resistencias de Pull Up
bcf status,5 ;se
pasa al banco 0 de RAM
Loop:
comf portb,0 ;se
lee el puerto B, se complementa su valor y el ;resultado
pasa a W
movwf porta ;se
pasa el resultado de W al puerto A
goto Loop
;ejecuta un ciclo infinito
end
En un proceso de lectura de interruptores, casi siempre cuando se detecta un cambio en el estado, es aconsejable amortiguar la lectura de estos con un retardo de software.
Dependiendo de la calidad del interruptor el tiempo del retardo puede estar al rededor de 50 mS. En el caso de este ejercicio en particular no es requerido puesto que un cambio en el interruptor debe reflejarse inmediatamente en el puerto de salida. Se debe tener en cuenta que nunca una entrada debe quedar al aire puesto que los microcontroladores PIC son hechos con tecnología CMOS. Es por este motivo que en el programa se programó la parte alta del puerto B como salida.