Código
LIST P=16F84A INCLUDE <P16F84A.INC> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC CBLOCK 0x0C TiempoDeseado Tiempo FlagsModo ENDC ORG 0x2100 DE 0x00 #DEFINE F_Temporizador_ON FlagsModo,2 #DEFINE F_Temporizador_Ajuste FlagsModo,1 #DEFINE F_Temporizador_OFF FlagsModo,0 #DEFINE SalidaTemporizador PORTB,1 #DEFINE Zumbador PORTB,2 #DEFINE AjustePulsador PORTB,7 #DEFINE IncrementarPulsador PORTB,6 ; ZONA DE CÓDIGOS ******************************************************************** ORG 0 goto Inicio ORG 4 goto ServicioInterrupcion Mensajes addwf PCL,F Mensaje_ON DT "EN FUNCION",0x00 Mensaje_Ajuste DT "TIEMPO DECEADO",0x00 Mensaje_OFF DT " RECARGAR",0x00 ;interrupcion de inicio Inicio call LCD_Inicializa movlw Mensaje_Inicio call LCD_MensajeMovimiento call Retardo_500ms call Retardo_500ms call Retardo_500ms movlw Mensaje_nollave call LCD_MensajeMovimiento call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms call Retardo_500ms bsf STATUS,RP0 movlw b'00000111' movwf OPTION_REG bsf AjustePulsador bsf IncrementarPulsador bcf SalidaTemporizador bcf Zumbador bcf STATUS,RP0 clrw call EEPROM_LeeDato movwf TiempoDeseado call ModoTemporizador_OFF movlw b'10001000' movwf INTCON Principal goto Principal ;subrrutinasdeservicioInterrupcion------------------------------------------ ServicioInterrupcion btfsc INTCON,T0IF call Temporizador btfss INTCON,RBIF goto FinInterrupcion btfss AjustePulsador call CambiarModo btfsc IncrementarPulsador goto FinInterrupcion call Retardo_20ms btfsc IncrementarPulsador goto FinInterrupcion btfsc F_Temporizador_OFF call ModoTemporizador_ON btfsc F_Temporizador_Ajuste call IncrementarTiempoDeseado FinInterrupcion bcf INTCON,RBIF bcf INTCON,T0IF retfie ;subrrutinasCambiarModo------------------------------------------------------------ CambiarModo call PitidoCorto btfsc AjustePulsador goto EsperaDejePulsar btfsc F_Temporizador_OFF goto ModoTemporizador_Ajuste btfss F_Temporizador_Ajuste goto ModoTemporizador_OFF clrw movwf EEADR movf TiempoDeseado,W call EEPROM_EscribeDato ModoTemporizador_OFF bcf SalidaTemporizador call Pitido movlw b'00000001' movwf FlagsModo bcf INTCON,T0IE movf TiempoDeseado,W movwf Tiempo call LCD_Borra movlw Mensaje_OFF goto FinCambiarModo ModoTemporizador_Ajuste bcf SalidaTemporizador movlw b'00000010' movwf FlagsModo clrf Tiempo clrf TiempoDeseado bcf INTCON,T0IE call LCD_Borra movlw Mensaje_Ajuste goto FinCambiarModo ModoTemporizador_ON movf TiempoDeseado,W btfsc STATUS,Z goto ModoTemporizador_OFF movwf Tiempo call PitidoCorto movlw b'00000100' movwf FlagsModo movlw TMR0_Carga50ms movwf TMR0 movlw Carga_1s movwf Registro50ms bsf INTCON,T0IE call LCD_Borra bsf SalidaTemporizador movlw Mensaje_ON FinCambiarModo call LCD_Mensaje call VisualizaTiempo EsperaDejePulsar btfss AjustePulsador goto EsperaDejePulsar return ;SubrutinaTEMPORIZADOR CBLOCK Registro50ms ENDC TMR0_Carga50ms EQU -d'195' Carga_1s EQU d'20' Temporizador call Retardo_50micros call Retardo_20micros nop movlw TMR0_Carga50ms movwf TMR0 decfsz Registro50ms,F goto FinTemporizador movlw Carga_1s movwf Registro50ms btfss F_Temporizador_ON goto FinTemporizador decfsz Tiempo,F goto VisualizaContador bcf SalidaTemporizador call VisualizaTiempo call Pitido call Retardo_500ms call Pitido call Retardo_500ms call PitidoLargo call Retardo_500ms call ModoTemporizador_OFF goto FinTemporizador VisualizaContador call VisualizaTiempo FinTemporizador return ;SubrutinaVisualizaTiempo-------------------------------------------------- VisualizaTiempo movlw .5 call LCD_PosicionLinea2 movf Tiempo,W call MinutosSegundos movf TemporizadorMinutos,W call BIN_a_BCD call LCD_Byte movlw ':' call LCD_Caracter movf TemporizadorSegundos,W call BIN_a_BCD goto LCD_ByteCompleto return ;subrutinaminutossegundos---------------------------------------------------- CBLOCK TemporizadorMinutos TemporizadorSegundos ENDC MinutosSegundos movwf TemporizadorSegundos clrf TemporizadorMinutos Resta60 movlw .60 subwf TemporizadorSegundos,W btfss STATUS,C goto FinMinutosSegundos movwf TemporizadorSegundos incf TemporizadorMinutos,F goto Resta60 FinMinutosSegundos return ;subrutina incrementatiempodeseado Saltoincremento EQU .5 IncrementarTiempoDeseado call PitidoCorto movlw Saltoincremento addwf Tiempo,F btfsc STATUS,C clrf Tiempo call VisualizaTiempo call Retardo_100ms btfss IncrementarPulsador goto IncrementarTiempoDeseado movf Tiempo,W movwf TiempoDeseado return ;subrrutinapitidolargopitidocorto PitidoLargo bsf Zumbador call Retardo_500ms Pitido bsf Zumbador call Retardo_200ms PitidoCorto bsf Zumbador call Retardo_20ms bcf Zumbador return INCLUDE <RETARDOS.INC> INCLUDE <BIN_BCD.INC> INCLUDE <LCD_4BIT.INC> INCLUDE <LCD_MENS.INC> INCLUDE <EEPROM.INC> END :-(