Anda di halaman 1dari 3

T-6 Microcontroladores. PIC16F84.

25

Ejemplo 6.5. Confeccionar un programa para el PIC 16F84 trabajando a 4MHz que produzca una seal cuadrada de periodo 50 ms (25 ms a nivel alto y 25 ms a nivel bajo) en el pin RB0. Para generar la seal cuadrada en la patilla del microcontrolador RB0 procederemos de la siguiente manera: pondremos el bit RB0 a 1 ejecutaremos un rutina (subprograma) encargada de realizar un retardo de 25 ms; pondremos de nuevo el bit RB0 a 0 y volveremos a ejecutar la subrutina anterior. Este proceso se repetir indefinidamente. Una de las funciones ms habituales en los programas de control suele ser determinar intervalos concretos de tiempo. Tambin suele ser frecuente contar impulsos producidos en el exterior del sistema. En el microcontrolador PIC16F84 estas funciones la realiza un temporizador/contador de 8 bits, llamado TMR0 que acta de dos maneras distintas: Como contador de sucesos, representados por los impulsos que se aplican a la patilla RA4/T0CKI. Al llegar al valor FFh se desbordar el contador y, con el siguiente impulso pasa a 00h, advirtiendo esta circunstancia activando un sealizador y/o provocando una interrupcin. Como temporizador, se incrementa con cada ciclo de instruccin (4/Freloj),o divisores del mismo, hasta que se desborda (pasa de 00h a FFh) y avisa poniendo a 1 un sealizador y/o provocando una interrupcin. Para que el TMR0 funcione como contador de impulsos aplicados en RA4/T0CKI hay que poner a 1 el bit T0CS, que es el que ocupa la posicin 5 del registro OPTION (figura 6.27). Para que el TMR0 funcione como temporizador el bit T0CS debe ponerse a 0. TMR0 es un registro de propsito especial ubicado en la posicin 01h del banco 0 de la memoria de datos RAM. En igual direccin pero en el banco 1 se encuentra el registro de configuracin OPTION. El tiempo de la temporizacin se calcula a partir del periodo de la seal de reloj (Treloj), el valor de un divisor de frecuencia definido en el registro OPTION y el valor del temporizador TMR0. Temporizacin = 4Treloj (255 - TMR0) Divisor 255 - TMR0 = Temporizacin / (4 Treloj Divisor) Si se desea temporizar 25ms (25000 s) y asignamos al divisor de frecuencia el valor 128 (PSA =0, PS2 = 1, PS1 =1, PS0 = 0), el temporizador TMR0 deber contar 195 eventos: 255 -TMR0 = 2510-3 / (110-6 128) = 195,3 El valor que hay que cargar en el temporizador TMR0 ser el complemento de 195, es decir, 255-195= 60, que equivale al cdigo hexadecimal 0x3c.
Registro OPTION (direccin 01h, Banco1) T0CS T0SE PSA
bit7

PS2

PS1

PS0
bit0

bit 5 : T0CS bit de seleccin de la fuente de reloj 1 = Transicin en el pin RA4/T0CKI 0 = Ciclo de instruccin interno bit 3 : PSA bit de asignacin del divisor 1 = Divisor asignado al WDT (watch dog) 0 = Divisor asignado a TMR0 bit 2-0 : PS2:PS0 bit de seleccin del divisor
PS2 PS1 PS0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 TMR0 1:2 1:4 1:8 1 : 16 1 : 32 1 : 64 1 : 128 1 : 256 WDT 1:1 1:2 1:4 1:8 1 : 16 1 : 32 1 : 64 1 : 128

Figura 6-28. Registro OPTION.

26 Al cargar en el registro TMR0 el valor 60, ste se incrementar cada 128s (ciclo definido por: Divisor 4 Treloj ). Cuando llegue al final de la cuenta (255), se habr incrementado 195 veces, generando un retardo de aproximadamente 25ms (195 128s). En ese instante se pondr 1 el bit T0IF del registro INTCON (registro de propsito especial 0x0B del banco 0, Figura 6-29).

T-6 Microcontroladores. PIC16F84.

Registro INTCON (direccin 0Bh, Banco 0) GIE


bit7

EEIE

T0IE

INTE RBIE T0IF INTF RBIF


bit0

bit 2 : T0IF flag de desbordamiento de TMR0 1 = Desbordamiento de TMR0 0 = TMR0 no se ha desbordado

Figura 6-29. Registro INTCON.

Aparecen en el cdigo las siguientes instrucciones: call k : guarda la direccin de la instruccin actual y salta a la direccin k (donde se encuentra la subrutina). return :retorna a la direccin almacenada. Una vez ejecutada la subrutina el programa vuelve a la posicin de la memoria de programa posterior a la llamada call. A continuacin se expone el cdigo ensamblador del programa y el diagrama de flujo (Figura 6-30).
INICIO RETARDO Declaracin de variables TMR0 = 3c

Configuracin de E/S y de TMR0

T0IF=1 Apagar led RB0=0 SI Retardo 25ms RETURN Encender led RB0=1

NO

Retardo 25ms

Figura 6-30. Diagrama de flujo del ejemplo 5.

T-6 Microcontroladores. PIC16F84.

27

STATUS PORTB TMR0 INTCON

List equ equ equ equ org goto org

p=16f84 0x03 0x06 0x01 0x0B 0x00 INICIO 0x05

INICIO bsf clrf movlw movwf bcf BUCLE bcf call bsf call goto RETARDO bcf INTCON,2 movlw 0x3c movwf TMR0 EXPLORA btfss INTCON,2 goto EXPLORA return end ;Se ha desbordado TMR0? ;bucle hasta que TMR0 llegue a 256 ;desconecta el flag de desbordamiento ;carga TMR0 PORTB,0 RETARDO PORTB,0 RETARDO BUCLE ;RB0 = 0 ;retardo ;RB0 = 1 ;retardo STATUS,5 PORTB b00000110 TMR0 STATUS,5 ;cambia al banco1 ;PORTB salidas ;configuracin OPTION ;cambia al banco0

Anda mungkin juga menyukai