Sie sind auf Seite 1von 4

- Escriba un programa para pic16f84a que controla en un horno el valor fijo de temperatura T.

por el pin RA0 se recibe


un lgico 1 de activacin del control. Un lgico 1 de salida por el pin RA1 significa activar la generacin de T cuando el
control est activo (se suministra corriente en un elemento calefactor). Por el pin RA2 se recibe un logico1 cuando T se
alcanza. El programa principal (MAIN) inicia habilitando interrupciones generales, luego habilitando las interrupciones
por el pin RB0 y poniendo a cero la bandera INTF en el registro INTCON. Seguidamente se configura la direccin de los
pines usados del puerto A y del PIN RB0 del puerto B y se pone a cero una variable INTR. Luego se comprueba si el
control est Activo (RA0=1). Si no lo esta se espera hasta que este. Si RA0=1 se activa la generacin de T y se comprueba
que T se alcance (se espera). Cuando T se alcanza se desactiva la generacin de T y se espere a que T decrezca (RA2=0).
Cuando T decrece se comprueba si el bit cero de la variable INTR es uno. Si es, se pone a cero dicho bit y se salta a
comprobar si el control est activo. Si el bit cero de INTR es cero se salta a activar de nuevo la generacin de T y se repite
el proceso. Un circuito externo detecta si la temperatura en el horno excede el valor de T por un valor anormal. Si esto
sucede el circuito genera una peticin de interrupcin por el pin RB0. La rutina de interrupcin solamente desatiba la
generacin de T, pone a cero la bandera INTF, pone en uno el bit cero de INTR y retorna (el circuito externo que activa
RB0 desactiva el lgico 1 aplicado RA0). Defina las direcciones de los registros a usar con los nombres correspondientes
de los registros. Comente el inicio de cada seccin de su programa.

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

;Configuracin de los puertos


bsf STATUS, 5
movlw 0x05 ; Pines RA0 y RA2 configurados
movwf TRISA ; como entradas, RA1 como salida
bsf TRISB, 0 ; Pin RB0 configurado como entrada
bcf STATUS, 5

;Hacer 0 el bit cero de INTR


bcf INTR, 0
go to LEER_PORTA

;Interrupcin por RB0


org 0x04
;Rutina de interrupcin que desactiva la generacin de T, INTF=0 , bit cero de INTR igual a 0
bcf PORTA, 1
bcf INTCON, 1
bsf INTR, 0
retie

;Inicio del programa


;Verificacin de activacin del control (RA0=1)
LEER_PORTA
btfss PORTA, 0
go to LEER_PORTA

;Inicia generacin de T
ACTIVAR_GENERACION
bsf PORTA, 1

;Espera que T sea alcanzado


DETECTAR_T
btfss PORTA, 2
go to DETECTAR_T

;Desactivar generacin de T
bcf PORTA, 1

;Espera el decremento de T
DETECTAR_DECREMENTO
btfsc PORTA, 2
go to DETECTAR_DECREMENTO

;Testeo del bit 0 de INTR


btfss INTR, 0
go to ACTIVAR_GENERACION
bcf INTR, 0
go to LEER_PORTA
end

- 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

;Asigna los valores a las variables


movlw 0xFF
movwf CONTADOR1
movwf CONTADOR2
movlw 0x10
movwf CONTADOR3

;Inicio del programa


;Encender el led
INICIO
movlw 0x02
movwf PORTA
;Comprobar si el interruptor est cerrado
movlw b00000010 ; variable usada en la xorwf de la subrutina
btfsc PORTA, 1 ; de ser cero se supondr el interruptor abierto por lo que se realizar una subrutina de delay
call SUBRUTINA ; de 3 segundos, en caso contrario se realizarn 2 subrutinas de delay de 3 segundos
call SUBRUTINA; cumpliendo con el retardo de 6 segundos que se solicita cuando el interruptor est cerrado
go to INICIO

;Subrutina de retardo de 3 segundos e intermitencia del led


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=10H
go to DELAY
return

end

Das könnte Ihnen auch gefallen