Está en la página 1de 8

#include "p16F877A.

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
; *************************************

ORG 0x00 ;VECTOR INICIO


GOTO CONFIGURACION_

;CONFIGURANDO REGISTROS GENERALES:


CONFIGURACION_
BANK1
MOVLW B'11100111' ;CONFIG TMR0 CON 256 PRESCALA,PARA RETARDO DE PULSADOR
MOVWF OPTION_REG
MOVLW B'00000011'
MOVWF TRISA ; ENTRDAS AN0 Y AN1 ENTRADAS ANLOGAS,
MOVLW B'00110000'
MOVWF TRISB ;RB5 Y RB4 ENTRADAS DIGITALES
CLRF TRISC
CLRF TRISD
CLRF TRISE
MOVLW B'00000100'
MOVWF ADCON1 ;ADC CON 8Tosc
MOVLW D'7'
MOVWF CMCON
MOVLW D'34' ;35
MOVWF PR2 ; PR2=35 EQUIVALE A UNA FRECUENCIA DE 28KHz PARA PWM
BANK0
MOVLW B'01000000'
MOVWF ADCON0 ;
MOVLW B'00001100'
MOVWF CCP1CON ;MODULO CONFIGURADO COMO PWM - PIN_17 RC2: SALIDA PWM
MOVLW B'00000000'
MOVWF T2CON ;CON PRESCALAR 1:1
; ==================================
CLRF TMR1L
CLRF TMR1H
CLRF PORTB
CLRF PORTC
MOVLW D'10' ;CARGAMOS AL CCPR1L CON 50% PARA PWM
MOVWF CCPR1L
NOP
CALL LCD_Inicializa
CALL Retardo_500ms
; ENCENDEMOS MODULO ADC
BSF ADCON0,0 ; MODULO ADC ON
NOP
BSF T2CON,TMR2ON ; TIMER 1 ON: PARA FUNCIONAMIENTO DE PWM
CALL LCD_Linea1
NOP
CALL MSJ_VOLTAJE
NOP
CALL MSJ_CORRIENTE
CALL Retardo_500ms
CLRF PORTB
BCF INTCON,0 ; BORRAMOS PULSADORES
;___________________________________________________
; BUCLE PRINCIPAL DEL PROGRAMA
;----------------------------------------------------
BUC_PRINCIPAL
NOP
MOVLW D'0'
CALL LCD_PosicionLinea1 ;LE INDICAMOS EN QUE POSICION SE ESCRIBE EN LA LC
D
CALL ANALOG_0 ;CAPTURA DE VOLTAJE
NOP
MOVLW D'47'
MOVWF MULTIPLICADOR
CALL DISPLAY_VOLTAJE ;SUB-RUTINA REALIZADA PARA DISPLAY DE VOLTAJE EN LCD
NOP
NOP
CALL ANALOG_1 ;CAPTURA DE CORRIENTE
NOP
MOVLW D'4'
MOVWF MULTIPLICADOR
CALL DISPLAY_CORRIENTE
;BTFSC INTCON,0 ;PREGUNTA SI SE PRESIONO ALGUN BOTON
CALL PULSADOR_LECTURA
NOP
;CLRF PCLATH
CALL Retardo_200ms
GOTO BUC_PRINCIPAL
;________________________________________________
;================================================

; ACCION DEL PULSADORES


PULSADOR_LECTURA
MOVF PORTB,W
MOVWF BOTON
NOP
BTFSC BOTON,5 ;DETECTAR PULSO DE AUMENTO
GOTO AUMENTAR
BTFSC BOTON,4 ;DETECTAR PULSO DECREMENTO
GOTO DECREMENTAR
RETURN
AUMENTAR
MOVF CCPR1L,W
XORLW D'34'
BTFSC STATUS,Z
RETURN
NOP
INCF CCPR1L,F
;ADDWF CCPR2L,F
RETURN
DECREMENTAR
MOVF CCPR1L,W
XORLW D'0'
BTFSC STATUS,Z
RETURN
DECF CCPR1L,F
;SUBWF CCPR2L,F
RETURN
;SUB-RUTINA PARA DISPLAY DE VOLTAJE EN LA LCD
; ================================
DISPLAY_VOLTAJE
MOVF ADRESH,W
MOVWF M_DATO
CALL MULTI_
NOP
MOVLW D'100'
MOVWF DIVISOR
CALL DIVI_
MOVLW D'9'
CALL LCD_PosicionLinea1
;PARTE ENTERO
MOVF COCIENTE_L,W
CALL BIN_a_BCD
MOVF BCD_Centenas,W
CALL LCD_Caracter
MOVF BCD_Decenas,W
CALL LCD_Caracter
;PARTE DECIMAL
MOVLW '.'
CALL LCD_Caracter
MOVF BCD_Unidades,W
CALL LCD_Caracter
MOVF RESTO,W
CALL BIN_a_BCD
MOVF BCD_Decenas,W
CALL LCD_Caracter
; MOVF BCD_Unidades,W
; CALL LCD_Caracter
NOP
RETURN
; ==================================
DISPLAY_CORRIENTE
;CALL LCD_Linea2
MOVF ADRESH,W
MOVWF M_DATO
CALL MULTI_
NOP
MOVLW D'100'
MOVWF DIVISOR
CALL DIVI_
NOP
MOVF COCIENTE_L,W
CALL BIN_a_BCD
MOVLW D'9'
CALL LCD_PosicionLinea2
NOP
MOVLW '0'
CALL LCD_Caracter
MOVLW '.'
CALL LCD_Caracter
MOVF BCD_Unidades,W
CALL LCD_Caracter
NOP
MOVF RESTO,W
CALL BIN_a_BCD
NOP
MOVF BCD_Decenas,W
CALL LCD_Caracter
MOVF BCD_Unidades,W
CALL LCD_Caracter
RETURN
;______________________________________
; --- SUBRRUTINA DE CONVERSION ADC ----
ANALOG_0 ; CANAL#0 AN0 PIN RA0
MOVLW B'01000001'
MOVWF ADCON0
GOTO CONVER_
ANALOG_1 ; CANAL#1 AN1 PIN RA1
MOVLW B'01001001'
MOVWF ADCON0
CONVER_
NOP
CALL Retardo_50micros
BSF ADCON0,2 ; BIT GO/DONE INICIA LA CONVERSION
BTFSC ADCON0,2 ;PREGUNTAMOS SI TERMINO CONVERSION
GOTO $-1
NOP
MOVF ADRESH,W
MOVWF ADC_H
; BANK1
; MOVF ADRESL,W
; MOVWF ADC_L
; BANK0
RETURN

; -- DELAYS-RETARDOS CON USANDO TIMER 0---


DELAY_US ; MICROSEGUNDOS MAXIMO 255us
;MOVWF CONT_A
MOVWF TMR0
COMF TMR0,F
BANK1
MOVLW B'11101000'
MOVWF OPTION_REG
GOTO DELAY

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

También podría gustarte

  • Pregunta 4
    Pregunta 4
    Documento8 páginas
    Pregunta 4
    TacoMedinaOscar
    Aún no hay calificaciones
  • Desarrollo
    Desarrollo
    Documento2 páginas
    Desarrollo
    TacoMedinaOscar
    Aún no hay calificaciones
  • Fase 3
    Fase 3
    Documento5 páginas
    Fase 3
    TacoMedinaOscar
    Aún no hay calificaciones
  • Practica 10
    Practica 10
    Documento8 páginas
    Practica 10
    TacoMedinaOscar
    Aún no hay calificaciones
  • Proyecto#15 EI
    Proyecto#15 EI
    Documento5 páginas
    Proyecto#15 EI
    TacoMedinaOscar
    Aún no hay calificaciones
  • Plano1er Piso
    Plano1er Piso
    Documento1 página
    Plano1er Piso
    TacoMedinaOscar
    Aún no hay calificaciones
  • Practica 10 Miio
    Practica 10 Miio
    Documento3 páginas
    Practica 10 Miio
    TacoMedinaOscar
    Aún no hay calificaciones
  • Fase 3
    Fase 3
    Documento4 páginas
    Fase 3
    TacoMedinaOscar
    Aún no hay calificaciones
  • Verde
    Verde
    Documento6 páginas
    Verde
    TacoMedinaOscar
    Aún no hay calificaciones
  • Fase 3
    Fase 3
    Documento4 páginas
    Fase 3
    TacoMedinaOscar
    Aún no hay calificaciones
  • Chuquitaype IEEE 1451
    Chuquitaype IEEE 1451
    Documento3 páginas
    Chuquitaype IEEE 1451
    TacoMedinaOscar
    Aún no hay calificaciones
  • Ieee 1451
    Ieee 1451
    Documento4 páginas
    Ieee 1451
    TacoMedinaOscar
    Aún no hay calificaciones
  • CICLOCONVERTIDOR
    CICLOCONVERTIDOR
    Documento1 página
    CICLOCONVERTIDOR
    TacoMedinaOscar
    Aún no hay calificaciones
  • Libro Ejemplos
    Libro Ejemplos
    Documento2 páginas
    Libro Ejemplos
    TacoMedinaOscar
    Aún no hay calificaciones
  • 2 Todos
    2 Todos
    Documento1 página
    2 Todos
    TacoMedinaOscar
    Aún no hay calificaciones
  • Dsi Ii
    Dsi Ii
    Documento16 páginas
    Dsi Ii
    TacoMedinaOscar
    100% (1)
  • Formulas
    Formulas
    Documento1 página
    Formulas
    TacoMedinaOscar
    Aún no hay calificaciones
  • Ejercicio 1
    Ejercicio 1
    Documento2 páginas
    Ejercicio 1
    TacoMedinaOscar
    Aún no hay calificaciones
  • Diapositivas Filtros Digitales Viernes 20
    Diapositivas Filtros Digitales Viernes 20
    Documento61 páginas
    Diapositivas Filtros Digitales Viernes 20
    TacoMedinaOscar
    Aún no hay calificaciones
  • Onda Cuadrada
    Onda Cuadrada
    Documento2 páginas
    Onda Cuadrada
    TacoMedinaOscar
    Aún no hay calificaciones
  • Ejemplos Diodos2
    Ejemplos Diodos2
    Documento1 página
    Ejemplos Diodos2
    TacoMedinaOscar
    Aún no hay calificaciones
  • 1 Todos
    1 Todos
    Documento4 páginas
    1 Todos
    TacoMedinaOscar
    Aún no hay calificaciones
  • Ejemplos Diodos
    Ejemplos Diodos
    Documento4 páginas
    Ejemplos Diodos
    TacoMedinaOscar
    Aún no hay calificaciones
  • Transformada Z2
    Transformada Z2
    Documento38 páginas
    Transformada Z2
    TacoMedinaOscar
    Aún no hay calificaciones
  • Program
    Program
    Documento6 páginas
    Program
    Oz MG
    Aún no hay calificaciones
  • Conexion Arduino Matlab
    Conexion Arduino Matlab
    Documento1 página
    Conexion Arduino Matlab
    TacoMedinaOscar
    Aún no hay calificaciones
  • Control No Lineal y Robusto
    Control No Lineal y Robusto
    Documento36 páginas
    Control No Lineal y Robusto
    TacoMedinaOscar
    Aún no hay calificaciones
  • Control Supervisor
    Control Supervisor
    Documento10 páginas
    Control Supervisor
    TacoMedinaOscar
    Aún no hay calificaciones
  • Ejercicio
    Ejercicio
    Documento3 páginas
    Ejercicio
    TacoMedinaOscar
    Aún no hay calificaciones