Beruflich Dokumente
Kultur Dokumente
LIST P=16F84
;Declaracin de variables
INTCON equ 0BH
STATUS equ 03H
PORTA equ 05H
PORTB equ 06H
TRISA equ 85H
TRISB equ 86H
INTR equ 0DH
org 0
;Habilitar: interrupciones generales GIE=1, interrupciones por RB0 RBIE=1 y poner a cero la bandera INTF=0
movlw b10001000 ; tambin puede hacerse con las instrucciones para bits bsf y bcf
movwf INTCON
;Inicia generacin de T
ACTIVAR_GENERACION
bsf PORTA, 1
;Desactivar generacin de T
bcf PORTA, 1
;Espera el decremento de T
DETECTAR_DECREMENTO
btfsc PORTA, 2
go to DETECTAR_DECREMENTO
- Escriba un programa para el pic 16F84A que detecta por el pin RAO del puerto A si un switch conectado al pin est
cerrado o abierto. Si est cerrado (comprobar con la instruccin BTFSC) un led en el pin RA1 del puerto se enciende y se
apaga durante 6 segundos aproximadamente. Si el switch est abierto, el led se enciende y se apaga durante 3 segundos
aprox. Defina en una subrutina el retardo de tiempo bsico aprox. de 3 segs para encendido y apagado (use las
instrucciones DECFSZ y GO TO con 3 lazos controlados c/u por una variable correspondiente. Defina en memoria las 3
variables necesarias. Para los 2 primeros para que lazos, las variables con el valor FFH inicial por omisin. Para la 3ra
variable determinar su valor inicial para que con los 2 primeros lazos se obtenga aprox. 3 segs). Considere que se trabaja
con un reloj de 4Mhz y que el tiempo de ejecucin DECFSZ+GO TO = 3 microseg mientras decrece a cero la variable
correspondiente en los primeros lazos solamente ( valor inicial 3ra variable=3 segundos/tiempo en los 2 primeros lazos).
Escriba primero la subrutina e incluya el clculo del valor inicial de la 3ra variable, luego el programa (encienda 1ro el led
y compruebe luego si el switch est cerrado) incluyendo la subrutina.
;--------------------------------------------------------------------------------------------------------------------------------------------------------------
;Definicin de la subrutina
SUBRUTINA
DELAY
decfz CONTADOR1, 1 ; Valor inicial de CONTADOR1=FFH
go to DELAY
decfz CONTADOR2, 1 ; Valor inicial de CONTADOR2=FFH
go to DELAY
xorwf PORTA, 1 ; Asumiendo que w=b00000010 y que RBA sea una salida y PORTA= b00000010, esto para
darle intermitencia al led
decfz CONTADOR3, 1 ; Valor inicial de CONTADOR3=???
go to DELAY
return
;Clculo del valor de la 3ra variable (CONTADOR3)
CONTADOR= 3 segundos/ tiempo de los 2 primeros loops
tiempo de los 2 primeros loops= 3x10^-6 segundos (255)(255)* + 3x10^-6 segundos (255)**
*Es el tiempo de las instrucciones del primer loop 255 veces
**Es el tiempo de las instrucciones del segundo loop
tiempo de los 2 primeros loops= 0.19584 segundos
CONTADOR= 15.3186 CONTADOR= 15 16 (Usar 16)
;---------------------------------------------------------------------------------------------------------------------------------------------------------------
LIST P=16F84
;Declaracin de variables
STATUS equ 03H
PORTA equ 05H
TRISA equ 85H
CONTADOR1 equ 0DH
CONTADOR2 equ 0EH
CONTADOR3 equ 0FH
org 0x00
;Configura el puerto A
bsf STATUS, 5
bsf TRISA, 1 ; Pin RA1 configurado como entrada
bcf STATUS, 5
end