Anda di halaman 1dari 6

Cuando necesitamos que transcurra un determinado tiempo de espera antes de que ocurra un

evento como por ejemplo el encendido de una luz, LED, activacin de una bobina de un rel o
lectura de una determinada entrada, se suele recurrir a los retardos. Prcticamente casi todos
los programas de microcontroladores PIC usan en algun momento una rutina de retardo.
El tpico programa del parpadeo de un LED hace uso de estas rutinas para generar una
demora entre los cambios de estado de un LED que se enciende y se apaga, el tiempo que
tenemos entre el encendido y apagado viene determinado por la rutina de retardo..
Los retardos en los PIC los podemos generar de dos formas diferentes:

Por Software.

Por Hardware mediante el Timer TMR0.


Los retardos por Software consisten en que el pic se quede ejecutando unos bucles que van
decrementado unos contadores cargados previamente con el tiempo de retardo, cuando los
contadores llegan a 0 la rutina de retardo queda terminada y el microcontrolador sigue
ejecutando otros procesos.
Los retardos por Hardware se realizan mediante el temporizador/contador TMR0 que es un
registro de 8 bits, es decir, un particular tipo de registro cuyo contenido es incrementado con
una cadencia regular y programable directamente por el hardware del PIC. Como es de 8 bits,
el mximo de la cuenta est en 255.
El TMR0 tiene las siguientes modos de operacin:

Temporizador/Contador de 8 bits.

Divisor de 8 bits programable por software.

Seleccin de reloj interno y externo.

Interrupcin por desbordamiento.

Seleccin del flanco del reloj externo.


Este registro puede usarse para contar eventos externos por medio de un pin de entrada
especial que hace que trabaje en modo contador o para contar pulsos internos de reloj de
frecuencia constante en modo temporizador. Adems, en cualquiera de los dos modos, se
puede insertar un prescaler, es decir un divisor de frecuencia programable que puede dividir
por 2, 4, 8, 16, 32, 64, 128 o 256. Este divisor puede ser utilizado alternativamente como
prescaler o del TMR0 o como del Watch Dog Timer, segn se lo programe.
Caractersticas de la subrutina Delay:

Utiliza 3 contadores anidados. (c1,c2 y c3)


No permite realizar ninguna accin hasta que acaba la rutina.

Si queremos conseguir 5 segundos de retardo tendremos que consumir 5000000 ciclos de


reloj, esto sera valido solamente si el microcontrolador PIC trabaja con un Clock de 4 MHZ,
ejecutndose un ciclo de instruccin en 1 uS. Tendremos que tener en cuenta que
las instrucciones que realizan saltos consumen 2 ciclos de reloj cuando realizan un salto.
Modificando los registros de la subrutina Delay podremos programar cualquier tiempo.

; Delay = 5 seconds
; Clock frequency = 4 MHz
cblock
c1
c2
c3
endc

Delay

movlw

0x2C

movwf

c1

movlw

0xE7

movwf

c2

movlw

0x0B

movwf

c3

Delay_0
decfsz c1, f
goto

$+2

decfsz c2, f
goto

$+2

decfsz c3, f
goto

Delay_0

goto

$+1

nop

return

Programa de ejemplo de una rutina de retardo implementada en un PIC16F84 que hace


parpadear un LED por el Pin RB0,

;---------------Encabezado-------------

LIST

p=16f84

radix

hex

;------------mapa de memoria---------

estado equ

0x03

TRISB

equ

0x06

ptob

equ

0x06

; Haciendo asignaciones

reg1

equ

0x0C

; Estos 3 registros los utilizar

reg2

equ

0x0D

; para hacer el retardo

reg3

equ

0x0E

;-------Configuracin de puertos-------

reset

org

0x00

; Origen del programa, aqu comenzar

goto

inicio

; salta a la etiqueta inicio.

inicio bsf

estado,5

; Pone rp0 a 1 y pasa al banco1

movlw

b'00000000'

; Carga W con 00000000

movwf

TRISB

bcf

estado,5

; y pasa el valor a TRISB.


; pone rp0 a 0 y regresa al banco0

;----Aqu enciende y apaga el LED-----

ahora

bsf

ptob,0

; Pone un 1 en RB0 enciende el LED

call

retardo

; Llamamos a la subrutina retardo.

bcf

ptob,0

; Pone a 0 RB0 apaga el LED

call

retardo

; Llamamos a la subrutina retardo.

goto

ahora

; Repite el bucle infinitamente.

;**************** Rutina de Retardo ***************************

retardo movlw
de retardo.

tres

dos

10

movwf

reg1

movlw

20

movwf

reg2

movlw

30

movwf

reg3

uno
decfsz reg3,1
anidados.
goto

uno

decfsz reg2,1
goto

dos

decfsz reg1,1
goto

tres

retlw

00

; Cargamos los 3 registros con los valores

; Se van decrementando los registros

end

Anda mungkin juga menyukai