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

    Source: geocities.com/micros_uan/Inclass/E7

               ( geocities.com/micros_uan/Inclass)                   ( geocities.com/micros_uan)