;+------------------------------------------------+ ;| Ejemplo 3 (LED PARPADEANTE) | ;| LED conectado a RB1 ( PORTB: xxxx - xxLx ) | ;| | ;| Autor: Andrés Prieto-Moreno | ;| 18 - 06 - 2002 | ;| Revisión: Alfonso Alejandre | ;| 13 - 12 - 2002 | ;+------------------------------------------------+ ; código preparado para el 16F877 list p=16f877, r=dec ; Indicamos procesador destino y radix #include p16f877.inc ; Define gran cantidad de constantes ; relacionadas con este procesador __CONFIG _DEBUG_ON & _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_OFF & _CPD_OFF ; constantes del programa TIEMPO equ 0x30 ; posicion de memoria TICKS equ 20 ; Ticks entre parpadeo cada tick = 20 mS. = 0,4 segundos cada cambio org 0 nop ; Este byte está reservado para el ICD goto Inicio org 5 ; Accedemos al segundo banco de RAM de Datos Inicio bsf STATUS,RP0 ; Configuración puertos movlw B'00000001' movwf TRISB ; Bit 0 de PORTB entrada, el resto como salida ; Configuración del timer movlw b'01010111' ; bit 7 = 0 (Desactivar resistencias Pull-up de PORTB) ; bit 6 = 1 (Entrada RB0/INT activa por flanco de subida) ; bit 5 = 0 (Reloj interno, un pulso por cada 4 ciclos de reloj) ; bit 4 = 1 (Entrada de reloj activa por flanco de subida) ; bit 3 = 0 (Prescaler asignado al Timer 0) ; bits 2..0 = 111 (Prescaler = 256) ; Con un cristal de 4 MHz. se recibe un pulso cada 256 microSeg. movwf OPTION_REG ; Accedemos al primer banco de RAM bcf STATUS,RP0 ; Pongo a cero el puerto B clrf PORTB ; empieza el bucle del programa principal Bucle bsf PORTB,F ; enciende led call Pausa bcf PORTB,F ; apaga led call Pausa goto Bucle ; RUTINA DE ESPERA Pausa movlw TICKS ; tiempo_espera = TICKs * t_tic movwf TIEMPO ; guarda valor en memoria Otro_tic movlw 178 ; 256-178= 78 pulsos en Timer0 para desbordarse ; 78 pulsos * 256 microSeg. por pulso = 20 mS. aprox. movwf TMR0 ; t_tic = 20 mseg Sigue btfss INTCON,T0IF ; ¿desbordamiento ? goto Sigue ; no bcf INTCON,T0IF ; si -> repongo flag decfsz TIEMPO,f goto Otro_tic return END