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