;+-------------------------------------------------+ ;| Test de la placa PICENT1 | ;| LED conectado a RB1 ( PORTB: xxxx - xxLx ) | ;| Pulasador conectado a RB0 ( PORTB: xxxx - xxxP )| ;| Display conectado a PORTC ( PORTC: DDDD - DDDD )| ;| | ;| Autor: Alfonso Alejandre | ;| 26 - 10 - 2005 | ;+-------------------------------------------------+ ; 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_OFF & _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_OFF & _CPD_OFF ; constantes del programa #define TICKS 20 ; Ticks entre parpadeo cada tick = 20 mS. = 0,4 segundos cada cambio Tiempo equ 0x20 ; Primera posicion de memoria libre para usuario org 0 nop ; Este byte está reservado para el ICD clrf PCLATH ; Si en un reset PCLATH <> 0 lo ponemos a 0 goto Inicio ; Aquí se podrían colocar las rutinas de atención a interrupción Inicio banksel TRISB ; Seleccionamos el Banco1 ; Configuración puertos movlw B'00000001' movwf TRISB ; Bit 0 de PORTB entrada, el resto como salida clrf TRISC ; PORTC configurado como salidas en todos sus bits ; 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 banksel PORTB ; Seleccionamos el Banco0 ; Pongo a cero el puerto B clrf PORTB ; empieza el bucle del programa principal Bucle bsf PORTB,1 ; enciende led clrf PORTC ; Apagar display call Pausa btfsc PORTB, 0; Si pulsador=0 no apagar el LED bcf PORTB,1 ; apaga led comf PORTC ; Enciendo todos los segmentos del display 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