Você está na página 1de 11

; ----------------------------------------

; PROGRAMA PIC_MAIN PARA EL CONTROL DE UNA DOSIFICADORA


; --------------
; ENCABEZADO
; --------------

LIST P=16F877A
INCLUDE<P16F877A.INC>
__CONFIG 0X3F71

; -----------------------------------
; DEFINICION DE VARIBLES
; -----------------------------------

DISPLAY EQU 0X20


CONT1 EQU 0X21
CONT2 EQU 0X22
PASO_M EQU 0X23
DISP_T EQU 0X24
CONT3 EQU 0X25
TEMP_W EQU 0X26
TEMP_ST EQU 0X27
TEMP_B EQU 0X28
DISP_01 EQU 0X29
DISP_02 EQU 0X30
DISP_B EQU 0X31

; -----------------------------------
; INICIO DEL MICROCONTROLADOR
; -----------------------------------

ORG 0X00
GOTO INICIO
ORG 0X04
GOTO ISR

; -----------------------------------
; CONFIGURACION DE LOS PUERTOS
; -----------------------------------
ORG 0X05
INICIO BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISA
MOVLW B'00011110'
MOVWF TRISB
MOVLW B'11110000'
MOVWF TRISC
MOVLW B'00000000'
MOVWF TRISD
CLRF TRISE

MOVLW B'11000111'
MOVWF OPTION_REG

MOVLW B'00001000'
MOVWF INTCON

MOVLW B'01000111' ;CONFIGURAMOS ENTRADAS


DIGITALES
MOVWF ADCON1

; -----------------------------------
; INICIALIZAR PUERTOS Y VARIABLES
; -----------------------------------

BCF STATUS,RP0
CLRF PORTA
CLRF PORTC
CLRF PORTE
MOVLW .1
MOVWF DISP_01
MOVLW .1
MOVWF DISP_02
CLRF DISP_B
CLRF PASO_M
INI_02 MOVLW B'00000001'
MOVWF PORTB
MOVF DISP_01,W
MOVWF DISPLAY
MOVWF PORTD
GOTO ON

; -----------------------------------
; INICIO DEL PROGRAMA
; -----------------------------------

ON BCF INTCON,7
CALL SEE_DISP

BTFSC PORTC,4
GOTO B_INC
CALL REBOTE
COMF DISP_B,F
BTFSS DISP_B,0
GOTO DISP_C
MOVF DISP_02,W
MOVWF DISPLAY
MOVWF PORTD
BCF PORTB,0
BSF PORTB,5
GOTO C4_1
DISP_C MOVF DISP_01,W
MOVWF DISPLAY
MOVWF PORTD
BCF PORTB,5
BSF PORTB,0
C4_1 BTFSS PORTC,4
GOTO C4_1
CALL REBOTE
GOTO ON

B_INC BTFSC PORTB,2


GOTO B_DEC
CALL INC_D
MOVF DISPLAY,W
MOVWF PORTD
BUCLE_1 BTFSS PORTB,2
GOTO BUCLE_1

B_DEC BTFSC PORTB,3


GOTO B_INI
CALL DEC_D
MOVF DISPLAY,W
MOVWF PORTD
BUCLE_2 BTFSS PORTB,3
GOTO BUCLE_2

B_INI BTFSS PORTB,1


GOTO START
BTFSC PORTC,5
CALL BACK_M
GOTO ON
; -----------------------------------
; RUTINA INCREMENTEO Y DECREMENTO
; -----------------------------------

INC_D CALL REBOTE


INCF DISPLAY,F
MOVF DISPLAY,W
XORLW .10
BTFSS STATUS,2
RETURN
MOVLW .1
MOVWF DISPLAY
RETURN

DEC_D CALL REBOTE


DECFSZ DISPLAY
RETURN
MOVLW .9
MOVWF DISPLAY
RETURN

REBOTE MOVLW .20


MOVWF CONT2
CICLO2 MOVLW .250
MOVWF CONT1
CICLO1 NOP
DECFSZ CONT1,F
GOTO CICLO1
DECFSZ CONT2,F
GOTO CICLO2
RETURN
; -----------------------------------
; RUTINA PARA CONTROL DEL DISPLAY
; -----------------------------------

SEE_DISP BTFSS DISP_B,0


GOTO DISP01
GOTO DISP02

DISP01 MOVF DISPLAY,W


MOVWF DISP_01
BCF PORTB,5
BSF PORTB,0
RETURN
DISP02 MOVF DISPLAY,W
MOVWF DISP_02
BCF PORTB,0
BSF PORTB,5
RETURN

; -----------------------------------
; DOSIFICACION
; -----------------------------------

START
BSF INTCON,7
DOSIF_1 CALL FORD_M
BTFSC PORTC,6
GOTO DOSIF_1
CLRF PORTC
MOVF DISP_01,W
MOVWF DISP_T
MOVWF PORTD
GOTO BOMBEA1
BOMB_1
DECFSZ DISP_T
GOTO BOMBEA1
BCF PORTB,6

DOSIF_2 CALL FORD_M


BTFSC PORTC,7
GOTO DOSIF_2
CLRF PORTC
MOVF DISP_02,W
MOVWF DISP_T
MOVWF PORTD
GOTO BOMBEA2
BOMB_2
DECFSZ DISP_T
GOTO BOMBEA2
BCF PORTB,7

REGRESA BTFSS PORTC,5


GOTO BACK_ON
CALL BACK_M
GOTO REGRESA
BACK_ON MOVF DISP_01,W
MOVWF DISPLAY
MOVWF PORTD
CLRF DISP_B
GOTO ON

BOMBEA1 BSF PORTB,6


MOVF DISP_T,W
MOVWF PORTD ;MUESTRA EL DECREMENTO
CALL RETARDO
GOTO BOMB_1

BOMBEA2 BSF PORTB,7


MOVF DISP_T,W
MOVWF PORTD ;MUESTRA EL DECREMENTO
CALL RETARDO2
GOTO BOMB_2

RETARDO MOVLW .10


MOVWF CONT3
CICLO_3 MOVLW .80
MOVWF CONT2
CICLO_2 MOVLW .250
MOVWF CONT1
CICLO_1 NOP
DECFSZ CONT1,F
GOTO CICLO_1
DECFSZ CONT2,F
GOTO CICLO_2
DECFSZ CONT3,F
GOTO CICLO_3
RETURN

; -----------------------------------
; INTERRUPCIONES
; -----------------------------------
ISR MOVWF TEMP_W
SWAPF STATUS,W
MOVWF TEMP_ST

BTFSS INTCON,0
GOTO END_ISR
MOVF PORTB,W
MOVWF TEMP_B
CLRF PORTB
ISR_B0 BTFSS PORTB,4
GOTO ISR_B0
ISR_B1 BTFSC PORTB,1
GOTO ISR_B1
BCF INTCON,0
MOVF TEMP_B,W
MOVWF PORTB

END_ISR SWAPF TEMP_ST,W


MOVWF STATUS
SWAPF TEMP_W,F
SWAPF TEMP_W,W
RETFIE

; -----------------------------------
; RUTINAS MOTOR PAP
; -----------------------------------

FORD_M INCF PASO_M,1


MOVF PASO_M,W
CALL TABLA
MOVWF PORTC
CALL RET_M
RETURN

BACK_M MOVF PASO_M,W


XORLW .0
BTFSC STATUS,2
GOTO CERO_C
DECF PASO_M,1
MOVF PASO_M,W
CALL TABLA
MOVWF PORTC
CALL RET_M
RETURN

CERO_C MOVLW .3
MOVWF PASO_M
CALL TABLA
MOVWF PORTC
CALL RET_M
RETURN

TABLA ADDWF PCL,1


RETLW B'00011001'
RETLW B'00011100'
RETLW B'00010110'
RETLW B'00010011'
CLRF PASO_M
RETLW B'00011001'

RET_M MOVLW .25


MOVWF CONT2
CICLO_B MOVLW .50
MOVWF CONT1
CICLO_A NOP
DECFSZ CONT1,F
GOTO CICLO_A
DECFSZ CONT2,F
GOTO CICLO_B
RETURN
RETARDO2 MOVLW .12
MOVWF CONT3
CICL_3 MOVLW .100
MOVWF CONT2
CICL_2 MOVLW .250
MOVWF CONT1
CICL_1 NOP
DECFSZ CONT1,F
GOTO CICL_1
DECFSZ CONT2,F
GOTO CICL_2
DECFSZ CONT3,F
GOTO CICL_3
RETURN

END

Você também pode gostar