1. Controlando el tiempo.
Esquema de Montaje
Descripción: Programa que ilustra cómo realizar una temporización sin emplear
interrupciones.
Programa en Assembler:
Código:
LIST P=16f84
RADIX HEX
; ------------------------------------------------------------------------
PUERTAA EQU 0x06
OPTION EQU 0x01
ESTADO EQU 0x03
TMR EQU 0x01
; ------------------------------------------------------------------------
ORG 0 ; Inicio del programa en
; dirección 0
; ------------------------------------------------------------------------
bsf ESTADO,5 ; Banco 1
movlw b 1101 0110 ; Valor a cargar en
; OPTION
movwf OPTION
movlw 0x00
movwf PUERTAB ; La Puerta B salida
bcf ESTADO,5 ; Banco 0
clrf PUERTAB ; Las líneas de salida
2. ; de PB a 0
parpa bsf PUERTAB,7 ; Enciende el led RB7 = 1
call retardo ; Llamada a subrutina de
; RETARDO
bcf PUERTAB,7 ; Apaga el led, RB7 = 0
call retardo
goto parpa
retardo clrf TMR0 ; TMR0 = 0 y empieza su
; incremento
explora btfss TMR0,4; TMR0<4> = 1?
goto explora ; No ha llegado TMR0 a 16d
return ; Ha llegado TMR0 al
; valor 16d y retorna
; al programa principal
END
Programa en C:
Código:
#include <16C84.H>
#use delay( clock = 1000000 ) /* Especifica reloj de 1 MHz */
#byte puertab = 06 /* Dirección de la puerta B */
void main( void )
{
set_tris_b( 0x00 );
puertab = 0;
do
{
delay_us( 8700 ); /* Crea un bucle de espera de 8700 microsegundos */
bit_set(puertab,7); /* Enciende el LED */
delay_us(8700); /* Espera */
bit_clear(puertab,7);/* Apaga el LED */
}while(true); /* Repetir siempre */