Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
RSI
Deshabilitar
Interrupciones
La causa es por
Salvar entorno La causa es por desborde del
RB0/INT? TMR0?
NO
INTF=1? TOIF=1? SI
TESTEO
SI
NO
MCINTA=OFF
VLL=OFF SALIR
B1=OFF
PENVASADO=OFF
PEMPUJADOR=OFF
LED PARADA=ON
LED ALARMA=OFF
INTE=0
TOIE=0
RB0/INT NO
=0?
SI
Restaurar entorno
INTF=0 TOIF=0
SALIR
Habilitar Interrupciones
INTE=1 TOIE=1
retfie
Rutina de servicio de interrupcin (Parte 2)
Y despus de tener un buen diagrama de flujo, lo dems es carpintera:
Lenguaje ensamblador:
;********************************************************************************
;**********EJEMPLO DE MANEJO DE INTERRUPCIONES POR DESBORDE DE TMR0 Y************
;*********************CAMBIO DE NIVEL EN PIN RB0/INT*****************************
;************DURANTE EL DESBORDE DEL TMR0 (50mS), CONTROLA EL LLENADO************
;****************DEL TANQUE 1 Y EL PESO EN EL PISTN DE ENVASADO*****************
;*************************PROF. LUIS ZURITA. 14/04/13****************************
;*********ADICIONAL A ESTO SE MUESTRA EL NMERO DE LATAS LLENADAS****************
;****************Y LA CANTIDAD DE ENVASADOS REALIZADOS***************************
LIST P=16F877A
INCLUDE P16F877A.INC
;************ZONA DE DECLARACIONES DE REGISTROS*******************
CONTACERR EQU 20H ;REGISTRO PARA CERROJO AUTOMTICO
PDel0 EQU 21H ;REGISTRO PARA DELAY05S
PDel1 EQU 22H ;REGISTRO PARA DELAY05S
PDel00 EQU 23H ;REGISTRO PARA DELAY5mS
PDel11 EQU 24H ;REGISTRO PARA DELAY5mS
W_TEMP EQU 25H ;REGISTRO PARA SALVAR A W
STATUS_TEMP EQU 26H ;REGISTRO PARA SALVAR A STATUS
PORTB_TEMP EQU 27H ;REGISTRO PARA SALVAR A PORTB
PORTC_TEMP EQU 28H ;REGISTRO PARA SALVAR A PORTC
PORTD_TEMP EQU 29H ;REGISTRO PARA SALVAR A PORTD
CONTASEG EQU 2AH ;REGISTRO PARA DELAY 3 SEGUNDOS
UNI EQU 2BH
DEC EQU 2CH
UNIEN EQU 2DH
UNI_TEMP EQU 2EH
DEC_TEMP EQU 2FH
UNIEN_TEMP EQU 30H
;*******************ZONA DE VECTORES******************************
ORG 00H
GOTO INICIO ;VECTOR DE PROGRAMA PRINCIPAL
ORG 04H
GOTO RSI ;VECTOR DE RUTINA DE INTERRUPCIN
;******************************************************************
;*******************RUTINA DE INTERRUPCIN*************************
;******************************************************************
RSI BCF INTCON,7 ;GIE=0, ATIENDE UNA INTERRUPCIN
BTFSS INTCON,1 ;INTF=1? CAUSADA POR RB0/INT?
GOTO INTMR0 ;NO. EXPLORAR SI ES DESBORDE DE TMR0
;********REALIZA LA PARADA DE EMERGENCIA (PUNTO b DEL EJEMPLO)**********
CALL PUSH ;SI. VA A SALVAR ENTORNO
CALL DELAY05S ;ANTIREBOTE PARA RB0/INT
REINICIAR BTFSC PORTB,0 ;SE PRESIONO RB0 PARA REINICIAR?
GOTO REINICIAR ;NO. ESPERA
AQUI CALL DELAY15MS ;SI. COLOCAMOS ANTIREBOTE
BTFSS PORTB,0 ;PARA EVITAR FALSOS DISPAROS
GOTO AQUI ;ESPERA A QUE SE PRESIONE RB0
CALL POP ;RESTAURA EL ENTORNO
;**********ESTO SE HACE ANTES DE SALIR DE LA INTERRUPCIN***************
SALIR BSF INTCON,7 ;GIE=1
BCF INTCON,1 ;SE BORRAN SEALIZADORES INTF=0
;Y TOIF PARA EVITAR FALSOS DISPAROS
BCF INTCON,2
BSF INTCON,4 ;SE ACTIVA INTE=1
BSF INTCON,5 ;SE ACTIVA TOIE=1
RETFIE ;SALE DE LA INTERRUPCIN
;**EXPLORA SI LA CAUSA DE LA INTERRUPCIN HA SIDO POR DESBORDE DEL TMR0**
INTMR0 BTFSS INTCON,2 ;INTF=1? CAUSADA POR DESBORDE DE TMR0?
GOTO SALIR ;NO. SALE DE INTERRUPCIN
;*******************************************************************************
;******SI ES POR DESBORDE DEL TMR0, MONITOREA EL CONTROL DE NIVEL DE TANQUE1******
;**************************** (PUNTO a.1 DEL EJEMPLO)*****************************
TESTEO BCF INTCON,5 ;SI. TOIE=0.
BTFSC PORTA,2 ;SI. NIVEL MNIMO DE TANQUE1?
GOTO NMAXIMO ;NO. TESTEAR NIVEL MXIMO DE TANQUE1
BSF PORTB,3 ;SI. ACTIVA BOMBA1
GOTO CARGA ;VA A PREGUNTAR POR PESO DE PISTON
NMAXIMO BTFSC PORTA,1 ;NIVEL MXIMO DE TANQUE 1?
GOTO CARGA ;NO. TESTEAR CARGA EN PISTON DE EMPAQUETAR
BCF PORTB,3 ;SI. DESACTIVA BOMBA1
GOTO CARGA ;VA A PREGUNTAR POR PESO DE PISTON
;********************************************************************************
;*************LUEGO DE CONTROLAR EL NIVEL DEL TANQUE 1, VA A EXPLORAR**************
;***********************EL PESO EN PISTON DE ENVASADO****************************
;**************************** (PUNTO a.2 DEL EJEMPLO)*****************************
CARGA BTFSC PORTA,5 ;PESO COMPLETO EN PISTON DE EMPAQUETAR?
GOTO CARGARTMR0 ;NO. VA A CARGAR TMR0 ANTES DE SALIR
CALL PUSH ;VA A SALVAR ENTORNO
BSF PORTB,4 ;SI. ACTIVA SECUENCIA DE EMPAQUETAR
CALL DELAY3S ;ESPERA 3 SEGUNDOS MIENTRAS BAJA PISTON1
BSF PORTB,5 ;ACTIVA PISTON DE EMPUJE
CALL DELAY3S ;ESPERA 3 SEGUNDS MIENTRAS SE
;EMPUJAN LAS LATAS
BCF PORTB,5 ;RETORNA PISTON DE EMPUJE
CALL DELAY3S ;ESPERA 3 SEGUNDOS
BCF PORTB,4 ;RETORNA PISTON DE EMPAQUETAR Y VA
;A CARGAR TMR0
CALL CONTAENV
CALL POP ;VA A RESTAURAR ENTORNO
CARGARTMR0 MOVLW .61 ;CARGA VALOR DE TMR0 PARA NUEVA
MOVWF TMR0 ;TEMPORIZACIN DE 50mS
GOTO SALIR ;SALE DE INTERRUPCIN
;***********************************************************************
;*********FIN DE RUTINA DE INTERRUPCIN POR DESBORDE DEL TMR0***********
;***********************************************************************
;***********************************************************************
;***************************PROGRAMA PRINCIPAL**************************
;************************ZONA DE CONFIGURACIONES************************
;***********************************************************************
INICIO BCF STATUS,6 ;SELECCIONAMOS
BSF STATUS,5 ;EL BANCO 1
MOVLW B'00000110' ;CONFIGURAMOS PORTA COMO ENTRADA
MOVWF ADCON1 ;O SALIDA DIGITAL
MOVLW 0FFH
MOVWF TRISA ;CONFIGURAMOS PORTA COMO ENTRADA
MOVLW B'00000001' ;CONFIGURAMOS PORTB
MOVWF TRISB ;(RB0=ENTRADA, RESTO SALIDA)
CLRF TRISC
CLRF TRISD
MOVLW B'00000111' ;CONFIGURAMOS TMR0 COMO TEMPORIZADOR
MOVWF OPTION_REG ;CON PRESCALER DE 256
MOVLW B'10000000' ;HABILITAMOS LA INTERRUPCIN GLOBAL
MOVWF INTCON ;GIE=1
BCF STATUS,5 ;REGRESAMOS AL BANCO 0
CLRF UNI
CLRF DEC
CLRF UNIEN
CLRF PORTB ;TODOS LOS ACTUADORES DESACTIVADOS
CLRF PORTD
MARCHA CALL MOSTRAR
BCF PORTB,2 ;MCINTA OFF
BTFSC PORTA,0 ;MARCHA?
GOTO MARCHA ;NO. ESPERAMOS A QUE SE PRESIONE
BCF PORTB,7 ;LED ALARMA OFF
BSF PORTB,2 ;MCINTA ON
CLRF CONTACERR ;CONTACERR=0
CICLO BTFSC PORTA,3 ;DLATA?
GOTO CERROJO ;NO. VA A CERROJO AUTOMTICO
GOTO SIGUEPRO ;SI. VA A INICIAR PROCESO
CERROJO MOVF CONTACERR,0
SUBLW .200
BTFSS STATUS,2 ;CONTACERR=200?
GOTO SUBECERR ;NO. INCREMENTA CONTACERR
BSF PORTB,7 ;SI. HA PASADO 3 SEGUNDOS.LED ALARMA ON
MOVLW .61 ;CARGA VALOR DE TMR0 PARA
MOVWF TMR0 ;TEMPORIZACIN DE 50mS
BCF INTCON,5 ;TOIE=0
BCF INTCON,4 ;INTE=0
GOTO MARCHA ;VA A ESPERAR QUE SE PRESIONE MARCHA
SUBECERR INCF CONTACERR,1 ;CONTACERR=CONTACERR+1
CALL MOSTRAR ;DELAY15MS ;15mS*200= 3 SEGUNDOS
CALL MOSTRAR
GOTO CICLO ;ESPERAMOS A QUE SE DETECTE LATA
SIGUEPRO CLRF CONTACERR ;AL DETECTARSE LATA SIGUE EL PROCESO
BCF PORTB,2 ;MCINTA OFF
BSF PORTB,1 ;VLL ON
BSF INTCON,5 ;TOIE=1
BSF INTCON,4 ;INTE=1
;***
SLLENO BTFSC PORTA,4 ;SLL=0? SE LLENO LA LATA?
GOTO CERROJO2 ;NO. VA A CERROJO AUTOMTICO
BCF PORTB,1 ;VLLENADO OFF
BSF PORTB,2 ;MCINTA ON
CALL CONTADOR ;INCREMENTA NRO DE LATAS LLENADAS
GOTO CICLO ;VA A REPETIR PROCESO NUEVAMENTE
CERROJO2 MOVF CONTACERR,0
SUBLW .200
BTFSS STATUS,2 ;CONTACERR=200?
GOTO SUBECERR2 ;NO. INCREMENTA CONTACERR
BSF PORTB,7 ;SI. HA PASADO 3 SEGUNDOS.LED ALARMA ON
BCF PORTB,1 ;VLL OFF
BCF INTCON,5 ;TOIE=0
BCF INTCON,4 ;INTE=0
GOTO MARCHA ;VA A ESPERAR QUE SE PRESIONE MARCHA
SUBECERR2 INCF CONTACERR,1 ;CONTACERR=CONTACERR+1
CALL MOSTRAR ;DELAY15MS ;15mS*200= 3 SEGUNDOS
GOTO SLLENO ;ESPERAMOS A QUE SE LLENE LATA
;***
;**********************************************************************
;**************************RUTINA DE 15mS******************************
;**********************************************************************
DELAY15MS CLRF CONTASEG
ESPERA3 CALL DELAY5MS
MOVF CONTASEG,0
SUBLW .3
BTFSS STATUS,2
GOTO SUBESEG3
RETURN
SUBESEG3 INCF CONTASEG,1
GOTO ESPERA3
;**********************************************************************
;************************RUTINA DE 3SEGUNDOS***************************
;**********************************************************************
DELAY3S CLRF CONTASEG
ESPERA6 CALL DELAY05S
MOVF CONTASEG,0
SUBLW .6
BTFSS STATUS,2
GOTO SUBESEG
RETURN
SUBESEG INCF CONTASEG,1
GOTO ESPERA6
;**********************************************************************
;********RUTINA PARA SALVAR EL ENTORNO DURANTE INTERRUPCIN************
;**********************************************************************
PUSH BCF INTCON,5 ;TOIE=0.
BCF INTCON,4 ;INTE=0.
MOVWF W_TEMP
MOVF STATUS,0
MOVWF STATUS_TEMP
MOVF PORTB,0
MOVWF PORTB_TEMP
MOVF PORTC,0
MOVWF PORTC_TEMP
MOVF PORTD,0
MOVWF PORTD_TEMP
MOVF UNI,0
MOVWF UNI_TEMP
MOVF DEC,0
MOVWF DEC_TEMP
;****************************
;CONTADOR CLSICO DE 00 A 99
;****************************
CONTADOR MOVF UNI,0 ;UNI A W
SUBLW .9
BTFSS STATUS,2 ;Z=1? UNI=9?
GOTO SUBEUNI
GOTO DECENA
SUBEUNI INCF UNI,1 ;UNI=UNI+1
RETURN
DECENA CLRF UNI
MOVF DEC,0 ;DEC A W
SUBLW .9
BTFSS STATUS,2 ;Z=1? DEC=9?
GOTO SUBEDEC
CLRF DEC
CLRF UNI
RETURN
SUBEDEC INCF DEC,1 ;DEC=DEC+1
RETURN
;****************************
;CONTADOR CLSICO DE 0 A 9
;****************************
CONTAENV MOVF UNIEN,0 ;UNI A W
SUBLW .9
BTFSS STATUS,2 ;Z=1? UNI=9?
GOTO SUBEUNIEN
CLRF UNIEN
RETURN
SUBEUNIEN INCF UNIEN,1 ;UNI=UNI+1
RETURN
;**************************************************
;RUTINA MOSTRAR
;**************************************************
MOSTRAR BCF PORTD,2 ;DISPLAY UNIEN OFF
BCF PORTD,1 ;DISPLAY DEC OFF
BSF PORTD,0 ;DISPLAY UNI ON
MOVF UNI,0 ;UNI A W
MOVWF PORTC ;UNI ES SACADO HACIA PORTC
CALL DELAY5MS
BCF PORTD,2 ;DISPLAY UNIEN OFF
BSF PORTD,1 ;DISPLAY DEC ON
BCF PORTD,0 ;DISPLAY UNI OFF
MOVF DEC,0 ;DEC A W
MOVWF PORTC ;DEC ES SACADO HACIA PORTC
CALL DELAY5MS
BSF PORTD,2 ;DISPLAY UNIEN ON
BCF PORTD,1 ;DISPLAY DEC OFF
BCF PORTD,0 ;DISPLAY UNI OFF
MOVF UNIEN,0 ;UNIEN A W
MOVWF PORTC ;UNIEN ES SACADO HACIA PORTC
CALL DELAY5MS
RETURN