LIST P=16F84
;************************************************************
;
; Este programa demuestra como hacer la carga de un dato
; presente en el puerto B del PIC 16F84 y la conversión
; de un dato en hexadecimal a binario y su vizualización
; en un modulo LCD a 8 Bits.
;
; El tiempo está basado en el uso del PIC 16F84 en el modo
; 'RC' usando una resistencia de 10kohm. y un condensador de
; 20pF
;
; PIC 16F84:
;
; Pin 1 (RA2) --> OUTPUT ENABLE
; Pin 2 (RA3) --> START
; Pin 3 (RA4) --> Selección de ºC y ºF
; Pin 17 (RA0) --> RS del LCD
; Pin 18 (RA1) --> ENABLE del LCD
;
; Programa: temperat.ASM
; Fecha: 11-11-98
;
;
;************************************************************
; Definicion de Registros
;************************************************************
PC EQU 0x02
STATUS EQU 0x03
TRISA EQU 0x85
TRISB EQU 0x86
PORTA EQU 0x05
PORTB EQU 0x06
DEL EQU 0x10
NUEVO1 EQU 0x11
NUEVO2 EQU 0x12
NUEVO3 EQU 0x13
ANILLO EQU 0x14
CINCO EQU 0x15
ONCE EQU 0x16
ROT EQU 0x17
MEDI EQU 0x18
VER1 EQU 0x19
VER2 EQU 0x1A
OPER EQU 0x1B
ASCII EQU 0x1C
RETT EQU 0x1D
REG2 EQU 0x1E
REG3 EQU 0x1F
;**************************************************************
; Inicio del programa
;**************************************************************
BSF STATUS,5 ;PROGRAMACION DE PUERTOS
MOVLW 0xF0 ;PORTA4 COMO ENTRADA
MOVWF TRISA ;LOS DEMAS COMO SALIDA
MOVLW 0x00
MOVWF TRISB
BCF STATUS,5
CLRF PORTA
CLRF PORTB
MOVLW 0x38 ;INSTRUCCIONES:
CALL CONTROL ;DOS LINEAS, 8 BITS
MOVLW 0x0E ;ACTIVA DISPLAY
CALL CONTROL
MOVLW 0x06 ;MENSAJE FIJO
CALL CONTROL
GOTO INI
RETARDO MOVLW 0xFF ;AJUSTE DE TIEMPOS
MOVWF DEL
DECRE DECFSZ DEL,1
GOTO DECRE
RETLW 0x00
CONTROL BCF PORTA,0
GOTO DATO2
DATO BSF PORTA,0 ;ESTA RUTINA GENERA
DATO2 BSF PORTA,1 ;LAS SEÑALES DE CONTROL
MOVWF PORTB ;Y ENVIA EL DATO AL
CALL RETARDO ;MODULO CON INTERFACE
BCF PORTA,1 ;A 0CH0 BITS
CALL RETARDO
RETLW 0x00
TABLA ADDWF PC,1 ;MENSAJE A SER VISUALIZADO
RETLW " "
RETLW " "
RETLW " "
RETLW "T"
RETLW "E"
RETLW "M"
RETLW "P"
RETLW "E"
RETLW "R"
RETLW "A"
RETLW "T"
RETLW "U"
RETLW "R"
RETLW "A"
RETLW " "
RETLW " "
RETLW " "
RETLW " "
RETLW " "
RETLW " "
RETLW " "
RETLW 0x00
INI MOVLW 0x01
CALL CONTROL
MUESTRA MOVLW 0x00 ;INICIA ENVIO DE DATOS
MOVWF ASCII ;AL MODULO
CICLO MOVF ASCII,0 ;HACE BARRIDO DE LA TABLA
CAMBIA CALL TABLA
CALL DATO
MOVLW 0x9F ;RETARDO ENTRE CARACTERES
MOVWF RETT
RETA1 DECFSZ RETT,1
GOTO RETA1
INCF ASCII,1 ;SIGUE CON EL PROXIMO
MOVLW 0x0F ;CARACTER DEL MENSAJE
XORWF ASCII,0 ;PREGUNTA SI YA TERMINO
BTFSS STATUS,2 ;EL MENSAJE PARA SEGUIR
GOTO CICLO ;CON LA OTRA PARTE DEL
CLRF PORTA ;PROGRAMA
PRINCIP CALL DELAY
BSF STATUS,5
MOVLW 0xFF ;PROGRAMA EL PUERTO B COMO
MOVWF TRISB ;ENTRADA PARA GUARDAR EL
BCF STATUS,5 ;EL DATO DEL ADC
BSF PORTA,3 ;DA EL FIT DE START AL ADC
CALL DELAY
BSF PORTA,2 ;HABILITA LA SALIDA DEL ADC
CALL RETARDO
BCF PORTA,3
MOVF PORTB,0 ;LEE Y GUARDA EL DATO EN
MOVWF MEDI ;EL ADC
BCF PORTA,2
BSF STATUS,5
MOVLW 0x00 ;PROGRAMA EL PUERTO B COMO
MOVWF TRISB ;SALIDA PARA MOSTRAR EL DATO
BCF STATUS,5 ;EN EL LCD
BCF STATUS,0
BEGIN CLRF VER1 ;EMPIEZA CONVERSION A ºC Y ºF
CLRF VER2
CLRF OPER
BSF OPER,0
SEG1 MOVF MEDI,0 ;GRADOS CELSIUS
RLF OPER,1
BTFSC OPER,6
GOTO PREG
ADDWF VER1,1
BTFSS STATUS,0
GOTO SEG1
INCF VER2,1
GOTO SEG1
PREG BTFSC PORTA,4
GOTO BCD
CLRF OPER ;GRADOS FAHRENHEIT
BSF OPER,0
SEG2 MOVF MEDI,0
RLF OPER,1
BTFSC OPER,5
GOTO SUMA32
ADDWF VER1,1
BTFSS STATUS,0
GOTO SEG2
INCF VER2,1
GOTO SEG2
SUMA32 MOVLW 0x40
ADDWF VER1,1
BTFSC STATUS,0
INCF VER2,1
INCF VER2,1
BCD CLRF NUEVO1 ;EMPIEZA LA CONVERSION
CLRF NUEVO2 ;A BCD
CLRF NUEVO3
CLRF ROT
MOVLW 0x07
MOVWF ANILLO
MOVLW 0x05
MOVWF CINCO
MOVLW 0x0B
MOVWF ONCE
INICIO BTFSC VER2,1
GOTO UNO
CERO BCF STATUS,0
GOTO ADE
UNO BSF STATUS,0
ADE RLF VER1,1
RLF VER2,1
INCF ROT,1
MOVLW 0x03
SUBWF ROT,0
BTFSS STATUS,0
GOTO INICIO
MOVLW 0x04
SUBWF ROT,0
BTFSC STATUS,0
GOTO EEE
MOVF VER1,0
ANDWF ANILLO,0
MOVWF NUEVO1
VERIFY MOVF CINCO,0
SUBWF NUEVO2,0
BTFSC STATUS,0
GOTO ARREGL2
RLF NUEVO3,1
ANTES MOVF CINCO,0
SUBWF NUEVO1,0
BTFSC STATUS,0
GOTO ARREGL1
BTFSC NUEVO1,3
GOTO XYZ
BCF STATUS,0
GOTO MOVER
XYZ BSF STATUS,0
MOVER RLF NUEVO2,1
RLF NUEVO1,1
GOTO INICIO
ARREGL2 MOVF ONCE,0
ADDWF NUEVO2,1
RLF NUEVO3,1
BSF NUEVO3,0
BCF NUEVO2,3
BCF NUEVO2,4
GOTO ANTES
ARREGL1 MOVF ONCE,0
ADDWF NUEVO1,1
RLF NUEVO2,1
BSF NUEVO2,0
RLF NUEVO1,1
BCF NUEVO1,4
BCF NUEVO1,5
GOTO INICIO
EEE BTFSC VER1,0
GOTO ONE
ZERO BCF NUEVO1,0
GOTO OOO
ONE BSF NUEVO1,0
OOO MOVLW 0x0A
SUBWF ROT,0
BTFSS STATUS,0
GOTO VERIFY ;FIN DE LA CONVERSION A BCD
MOVLW 0xC0 ;PASAR A LA OTRA LINEA DEL
CALL CONTROL ;LCD
MOVLW 0x20
CALL DATO
MOVLW 0x20
CALL DATO
MOVLW 0x20
CALL DATO
MOVLW 0x20
CALL DATO
MOVLW 0x30 ;ESCRIBE EL DATO EN BDC
ADDWF NUEVO3,0 ;EN EL LCD
CALL DATO
MOVLW 0x30
ADDWF NUEVO2,0
CALL DATO
MOVLW "."
CALL DATO
MOVLW 0x30
ADDWF NUEVO1,0
CALL DATO
MOVLW 0x30
CALL DATO
MOVLW 0x20
CALL DATO
MOVLW 0F
CALL DATO
BTFSS PORTA,4 ;PREGUNTA POR EL BIT QUE
GOTO F ;INDICA SI ES ºC O ºF
MOVLW "C"
CALL DATO
GOTO PRINCIP ;EMPIEZA DE NUEVO LA
F MOVLW "F" ;CONVERSION
CALL DATO
GOTO PRINCIP
DELAY MOVLW 0xFF ;RETARDO ENTRE CADA
MOVWF REG3 ;CONVERSION
LBDOS MOVLW 0xFF
MOVWF REG2
LBUNO DECFSZ REG2
GOTO LBUNO
DECFSZ REG3
GOTO LBDOS
RETURN
END
;**************************************************************
;
; Diseño del programa a cargo de John Rincón
; estudiante de la Univesidad Antonio Nariño
; Facultad de Ingeniería Electrónica sede sur
;
;**************************************************************