Documentos de Académico
Documentos de Profesional
Documentos de Cultura
inc"
; CONFIGURACION FUSES : OSCILADOR EXTERNO 4MHz, NO WACHTDOG, NO PWRTE, NO BOREN,
NO LVP, NO CIFRADO DE MEMORIA
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF &
_WRT_OFF & _CP_OFF
; - VARIABLES: -
CBLOCK 0x20
CONT_A
CONT_B
CONT_C
ADC_H ;VARIABLE PARA GUARDAS VALOR DE CONVERSION ADC
ADC_L ;VARIABLE PARA GUARDAR VALOR DE CONVERSION ADC
M_DATO ;AQUI SE CARGA AL NUMERO QUE QUEREMOS MULTIPLICAR
MULTIPLICADOR ;AQUI SE CARGA EL NUMERO MULTIPLICADOR
PRODUCTO_H
PRODUCTO_L ; RESGISTROS QUE ALMACENAN E PRODUCTO DE LA OPERACION
CONT_BITS ;CONTADOR DE BITS DE OPERACION
COCIENTE_H ;RESULTADO DE LA DIVICION
COCIENTE_L ;RESULTADO DE LA DIVICION
RESTO ; RESTO DE LA DIVICION (PARTE DECIMAL)
DIVISOR ;NUMERO DIVISOR
BOTON ;REGISTRO QUE GUARDA EL BOTON PULSADO
ENDC
#DEFINE PUL_A PORTB,5 ;PULSADOR DE AUMENTO
#DEFINE PUL_D PORTB,4 ;PULSADOR DE DECREMENTO
; *********** MACROS **************
BANK0 MACRO ; ACCESO A BANCO 0
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK1 MACRO ;ACCESO A BANCO 1
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK2 MACRO ;ACCESO A BANCO 2
BCF STATUS,RP0
BSF STATUS,RP1
ENDM
; *************************************
DELAY_MS ; MILISEGUNDOS
DELAY_S ;
DELAY
BCF OPTION_REG,5 ;INICIAMOS CONTADOR
BTFSS INTCON,2 ;SE DESBORDO TMR0?
GOTO $-1
BSF OPTION_REG,5 ;PARAMOS CONTADOR
BCF INTCON,2 ; BORRAMOS FLAG
BANK0
RETURN
; MUTIPLICACION ENTRE DOS RESGISTROS DE 8 BITS
MULTI_
clrf PRODUCTO_H ; En principio el resultado es cero.
clrf PRODUCTO_L
movlw D'8' ; Carga el contador de 8 bits.
movwf CONT_BITS
movf M_DATO,W ; Carga el multiplicando.
BUC_MULTI
rrf MULTIPLICADOR,F ; Va a comprobar el siguiente bit del multiplica
dor.
btfsc STATUS,C ; Si el bit del multiplicador es "1"
addwf PRODUCTO_H,F ; suma el resultado parcial anterior ms el multip
licando.
rrf PRODUCTO_H,F ; Desplaza el resultado parcial un lugar hacia l
a
rrf PRODUCTO_L,F ; derecha, introduciendo un "0" por la izquierda
.
decfsz CONT_BITS,F ; Ha multiplicado los 8 bits?
goto BUC_MULTI ; Repite la operacin.
return
; - - - SUBRRUTINA DE DIVICION
DIVI_
clrf COCIENTE_H ; En principio el resultado es cero.
clrf COCIENTE_L
clrf RESTO
movlw D'16' ; Carga el contador.
movwf CONT_BITS
DIV_16
rlf PRODUCTO_L,F
rlf PRODUCTO_H,F
rlf RESTO,F ; (Arit_Resto) contiene el dividendo parcial.
movf DIVISOR,W
subwf RESTO,W ; Compara dividendo parcial y divisor.
btfsc STATUS,C ; Si (dividendo parcial)>(divisor)
movwf RESTO ; (dividendo parcial) - (divisor) --> (dividendo
parcial)
rlf COCIENTE_L,F ; Desplaza el cociente introduciendo el bit apro
piado
rlf COCIENTE_H,F ; "0" "1" segn corresponda.
decfsz CONT_BITS,F
goto DIV_16
movf RESTO,W ; El resto tambin en (W).
return
MSJ_SOBRE_TENSION
CALL LCD_Linea1
MOVLW D'4'
CALL LCD_PosicionLinea1
MOVLW '-'
CALL LCD_Caracter
MOVLW 'S'
CALL LCD_Caracter
MOVLW 'O'
CALL LCD_Caracter
MOVLW 'B'
CALL LCD_Caracter
MOVLW 'R'
CALL LCD_Caracter
MOVLW 'E'
CALL LCD_Caracter
MOVLW '-'
CALL LCD_Caracter
NOP
CALL LCD_Linea2
MOVLW D'4'
CALL LCD_PosicionLinea1
MOVLW 'C'
CALL LCD_Caracter
MOVLW 'O'
CALL LCD_Caracter
MOVLW 'R'
CALL LCD_Caracter
MOVLW 'R'
CALL LCD_Caracter
MOVLW 'I'
CALL LCD_Caracter
MOVLW 'E'
CALL LCD_Caracter
MOVLW 'N'
CALL LCD_Caracter
MOVLW 'T'
CALL LCD_Caracter
MOVLW 'E'
CALL LCD_Caracter
RETURN
MSJ_VOLTAJE
CALL LCD_Linea1
MOVLW D'0'
CALL LCD_PosicionLinea1
MOVLW 'V'
CALL LCD_Caracter
MOVLW 'o'
CALL LCD_Caracter
MOVLW 'l'
CALL LCD_Caracter
MOVLW 't'
CALL LCD_Caracter
MOVLW 'a'
CALL LCD_Caracter
MOVLW 'j'
CALL LCD_Caracter
MOVLW 'e'
CALL LCD_Caracter
MOVLW ':'
CALL LCD_Caracter
MOVLW D'15'
CALL LCD_PosicionLinea1
MOVLW 'V'
CALL LCD_Caracter
RETURN
MSJ_CORRIENTE
CALL LCD_Linea2
MOVLW D'0'
CALL LCD_PosicionLinea2
MOVLW 'C'
CALL LCD_Caracter
MOVLW 'o'
CALL LCD_Caracter
MOVLW 'r'
CALL LCD_Caracter
MOVLW 'r'
CALL LCD_Caracter
MOVLW 'i'
CALL LCD_Caracter
MOVLW 't'
CALL LCD_Caracter
MOVLW '.'
CALL LCD_Caracter
MOVLW ':'
CALL LCD_Caracter
MOVLW D'15'
CALL LCD_PosicionLinea2
MOVLW 'A'
CALL LCD_Caracter
RETURN
#INCLUDE <LCD_4BIT.INC>
#INCLUDE <RETARDOS.INC>
#INCLUDE <BIN_BCD.INC>
; #INCLUDE <LCD>
END