Sei sulla pagina 1di 4

;******************************** Int_Cuadradas_01.

asm *************************
*********
;
;
===================================================================
;
Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;
E. Palacios, F. Remiro y L. Lpez.
;
Editorial Ra-Ma. www.ra-ma.es
;
===================================================================
;
; Por la lnea 3 del puerto B se genera una onda cuadrada. La frecuencia de la ond
a cuadrada cambia
; mediante activacin del pulsador conectado al pin 7 del puerto B, de la siguient
e forma:
;
;
PULSACIN
FRECUENCIA
SEMIPERIODO
;
---------------------------------------;
(Inicial)
10 kHz
50 s. = 1 x 50 s
;
Primera
5 kHz
100 s. = 2 x 50 s
;
Segunda
2 kHz
250 s. = 5 x 50 s
;
Tercera
1 kHz
500 s. = 10 x 50 s
;
Cuarta
500 Hz
1000 s. = 20 x 50 s
;
Quinta
200 Hz
2500 s. = 50 x 50 s
;
Sexta
100 Hz
5000 s. = 100 x 50 s
;
Septima
50 Hz
10000 s. = 200 x 50 s
;
; Al conectarlo por primera vez se genera una frecuencia de 10 kHz, al activar e
l
; pulsador cambia a 5 kHz, al actuar una segunda vez cambia a 2 kHz, y as sucesiv
amente.
;
; El mdulo LCD visualizar la frecuencia generada. A la lnea de salida se puede cone
ctar
; un altavoz que producir un pitido.
; ZONA DE DATOS ****************************************************************
******
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST
P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
ApuntadorFrecuencia
Semiperiodo
ENDC
TMR0_Carga50us EQU
NumeroFrec
EQU
Hz, 2 kHz,

-d'42'
d'8'

; El semiperiodo patrn va a ser de 50 s.


; Ocho posibles frecuencias: 10 kHz, 5 k
; 1 kHz, 500 Hz, 200 Hz, 100 Hz y 50 Hz.

#DEFINE Salida PORTB,3


#DEFINE Pulsador PORTB,7
; ZONA DE CDIGOS ****************************************************************
****
ORG
goto
ORG
goto

0
Inicio
4
ServicioInterrupcion

; Subrutina "CargaContador" -----------------------------------------------------------CargaContador


addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

PCL,F
.1
.2
.5
.10
.20
.50
.100
.200

;
;
;
;
;
;
;
;

Semiperiodo
Semiperiodo
Semiperiodo
Semiperiodo
Semiperiodo
Semiperiodo
Semiperiodo
Semiperiodo

1
2
5
10
20
50
100
200

x
x
x
x
x
x
x
x

50
50
50
50
50
50
50
50

=
=
=
=
=
=
=
=

50
100
250
500
1000
2500
5000
10000

s,
s,
s,
s,
s,
s,
s,
s,

frecuencia
frecuencia
frecuencia
frecuencia
frecuencia
frecuencia
frecuencia
frecuencia

=
=
=
=
=
=
=
=

10
5
2
1
500
200
100
50

kHz.
kHz.
kHz.
kHz.
Hz.
Hz.
Hz.
Hz.

; Subrutina "CargaMensaje" -----------------------------------------------------------CargaMensaje


addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

PCL,F
Mensaje10kHz
Mensaje5kHz
Mensaje2kHz
Mensaje1kHz
Mensaje500Hz
Mensaje200Hz
Mensaje100Hz
Mensaje50Hz

; Subrutina "Mensajes" ----------------------------------------------------------------;


Mensajes
addwf PCL,F
MensajeFrecuencia
DT "Frec.: ", 0x00
Mensaje10kHz
DT "10 kHz. ", 0x00
Mensaje5kHz
DT "5 kHz. ", 0x00
Mensaje2kHz
DT "2 kHz. ", 0x00
Mensaje1kHz
DT "1 kHz. ", 0x00
Mensaje500Hz
DT "500 Hz. ", 0x00
Mensaje200Hz
DT "200 Hz. ", 0x00
Mensaje100Hz
DT "100 Hz. ", 0x00
Mensaje50Hz
DT "50 Hz. ", 0x00
; Programa Principal ----------------------------------------------------------------Inicio
call
bsf
bcf

LCD_Inicializa
STATUS,RP0
Salida

bsf
movlw
movwf
bcf
call
movlw
movwf
movlw
movwf
general.
Principal
goto

Pulsador
b'00001000'
OPTION_REG
STATUS,RP0
EstadoInicial
TMR0_Carga50us
TMR0
b'10101000'
INTCON

; TMR0 sin prescaler.


; Visualiza la frecuencia inicial.
; Carga el TMR0.
; Activa interrupciones del TMR0, RBI y

Principal

; Subrutina "ServicioInterrupcion" ----------------------------------------------------;


; Detecta qu ha producido la interrupcin y ejecuta la subrutina correspondiente.
ServicioInterrupcion
btfsc INTCON,T0IF
.
call
Timer0_Interrupcion
btfsc INTCON,RBIF
call
Pulsador_Interrupcion
bcf
INTCON,T0IF
bcf
INTCON,RBIF
retfie

; Interrupcin por desbordamiento del TMR0?


; Interrupcin por cambio en el Puerto B?.
; Repone flag del TMR0.
; Repone flag del RBI.

; Subrutina "Pulsador_Interrupcion" ---------------------------------------------------;


; Subrutina de atencin a la interrupcin por cambio en la lnea RB7 donde se ha
; conectado un pulsador.
; Incrementa el registro (ApuntadorFrecuencia) desde b'00000000' (que correspond
e a una
; frecuencia de 10 kHz) hasta b'00000111' (que corresponde a una frecuencia de 5
0 Hz), segn
; la tabla especificada en el enunciado del ejercicio.
;
Pulsador_Interrupcion
call
Retardo_20ms
btfsc Pulsador
goto
Fin_PulsadorInterrupcion
incf
ApuntadorFrecuencia,F ; Apunta a la siguiente frecuencia.
movlw NumeroFrec
; Va a comprobar si ha llegado al mximo.
subwf ApuntadorFrecuencia,W ; (W)=(ApuntadorFrecuencia)-NumeroFrec
btfsc STATUS,C
; Ha llegado a su mximo?
EstadoInicial
clrf
ApuntadorFrecuencia
; Si llega al mximo lo inicializa.
movf
ApuntadorFrecuencia,W ; Va a cargar el valor del factor de
call
CargaContador
; multiplicacin del semiperiodo segn la
movwf Semiperiodo
; tabla.
movwf Timer0_ContadorA
call
LCD_Linea1
; Visualiza la frecuencia seleccionada.
movlw MensajeFrecuencia
call
LCD_Mensaje
movf
ApuntadorFrecuencia,W
call
CargaMensaje
call
LCD_Mensaje
EsperaDejePulsar

btfss Pulsador
goto
EsperaDejePulsar
Fin_PulsadorInterrupcion
return
; Subrutina "Timer0_Interrupcion" -----------------------------------------------------;
CBLOCK
Timer0_ContadorA
ENDC
Timer0_Interrupcion
movlw TMR0_Carga50us
movwf TMR0
decfsz Timer0_ContadorA,F
goto
Fin_Timer0_Interrupcion
movf
Semiperiodo,W
movwf Timer0_ContadorA
btfsc Salida
goto
EstabaAlto
EstabaBajo
bsf
Salida
goto
Fin_Timer0_Interrupcion
EstabaAlto
bcf
Salida
Fin_Timer0_Interrupcion
return

; Recarga el TMR0.
; Decrementa el contador.
; Repone el contador nuevamente.
; Testea el ltimo estado de la salida.
; Estaba bajo y lo pasa a alto.
; Estaba alto y lo pasa a bajo.

INCLUDE <LCD_MENS.INC>
INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
END
;
;
;
;
;

====================================================================
Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS".
E. Palacios, F. Remiro y L. Lpez.
Editorial Ra-Ma. www.ra-ma.es
====================================================================

Potrebbero piacerti anche