Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorio N°9
Integrantes:
2023 - 1
Lab. N° 9 Programación y Simulación del Aplicativo 2
Objetivos
Introducción
Los simuladores, en la electrónica, permiten realizar infinidad de pruebas en los cálculos electrónicos,
lógica de programación, etc. Esto permite validar el diseño electrónico y la programación del
microcontrolador. En caso hubiera algún error este se corrige modificando el diseño o realizando otra
lógica en la programación cuantas veces se quiera. Una vez logrado el diseño y la programación
correcta recién se realiza la implementación.
Preparación
Para la realización de este laboratorio se requiere la lectura previa de la información proporcionada
para el curso, como el texto y el manual del fabricante.
Equipos y Materiales
• Computadora
• Software de desarrollo
• Proyector multimedia
• Texto del curso
• Manual del fabricante
pág. 2
Lab. N° 9 Programación y Simulación del Aplicativo 2
Seguridad
Trabajar con Seguridad evita que las personas sufran daños, y provee un ambiente satisfactorio de
trabajo.
1. Al ingresar, inspeccione:
Las vías de acceso.
Orden y limpieza.
pág. 3
Lab. N° 9 Programación y Simulación del Aplicativo 2
Ejercicio N°1
CONFIG FOSC = HS
CONFIG PWRT = OFF
CONFIG BOR = OFF
CONFIG BORV = 3
CONFIG VREGEN = OFF
CONFIG WDT = OFF
CONFIG PBADEN = OFF
CONFIG LVP = OFF
CONFIG MCLRE = ON
cblock 0x10
endc
ORG 0x0000
goto MAIN
ORG 0x0020
MAIN:
CALL Config_UART
; MULTIPLICACION
MOVLW .255
MULLW .255
CALL BIN16_BCD
CALL BCD_ASCII
ENVIAR_DATA:
MOVF DMILLAR,W
MOVWF TXREG
ENVIAR_TX1:
BTFSS TXSTA,TRMT
GOTO ENVIAR_TX1
delay_ms .200
MOVF UMILLAR,W
MOVWF TXREG
ENVIAR_TX2:
BTFSS TXSTA,TRMT
GOTO ENVIAR_TX2
delay_ms .200
MOVF CENTENA,W
MOVWF TXREG
ENVIAR_TX3:
BTFSS TXSTA,TRMT
GOTO ENVIAR_TX3
delay_ms .200
MOVF DECENA,W
MOVWF TXREG
ENVIAR_TX4:
BTFSS TXSTA,TRMT
GOTO ENVIAR_TX4
delay_ms .200
MOVF UNIDAD,W
MOVWF TXREG
ENVIAR_TX5:
BTFSS TXSTA,TRMT
GOTO ENVIAR_TX5
delay_ms .200
MOVLW ' '
MOVWF TXREG
ENVIAR_TX6:
BTFSS TXSTA,TRMT
GOTO ENVIAR_TX6
GOTO ENVIAR_DATA
delay_ms .200
GOTO MAIN
pág. 4
Lab. N° 9 Programación y Simulación del Aplicativo 2
Config_UART:
;****REGISTRO TXSTA, RCSTA, BAUDCON******
MOVLW B'00100100' ;TRANSMISION 8 BITS, TX=ON, MODO ASINCRONO, HIGH SPEED,
MOVWF TXSTA
MOVLW B'10010000' ; PUERTO SERIAL HABILITADO RX(RC7) y TX (RC6), RX 8 BITS, RX=ON,
MOVWF RCSTA
MOVLW B'00000000' ; SPBRG --> 8 BITS
MOVWF BAUDCON
MOVLW .129 ; BAUD RATE= FOSC/(16(SPBRG+1)) 20000000/ (16 ( n + 1)) = 9600
MOVWF SPBRG ; SPBRG = (20000000/(9600 * 16)) - 1 = 129
BSF TRISC,RC7 ; RX
BCF TRISC,RC6 ; TX
return
#include "retardos.inc"
#include "Conversion.inc"
END
Simulación:
pág. 5
Lab. N° 9 Programación y Simulación del Aplicativo 2
• Este código realiza la conversión de un número binario de 16 bits a BCD (Binary-Coded Decimal)
y luego lo convierte en una representación ASCII para ser enviado a través de UART (Universal
energía y otros ajustes. La función principal del programa se encuentra en la etiqueta MAIN,
donde se llaman a otras dos funciones: BIN16_BCD y BCD_ASCII. La función BIN16_BCD toma
en los mismos registros. La función BCD_ASCII toma los dígitos BCD convertidos y los convierte
en representación ASCII para poder ser enviados a través de UART. Luego, los dígitos ASCII se
envían uno por uno mediante la transmisión serial, utilizando el registro TXREG y controlando el
estado de transmisión con el bit TRMT del registro TXSTA. También se agrega un pequeño
retraso (delay_ms) entre el envío de cada dígito para asegurar una transmisión adecuada.
pág. 6
Lab. N° 9 Programación y Simulación del Aplicativo 2
RETO
Diseñar un programa en el cual muestre el valor de un sensor de temperatura y uno de
humedad por la entrada analógica CH0 y CH1.
El rango del sensor de temperatura es: 10 a 150 °C, la humedad de 0 a 100%, los valores deben
mostrarse en la pantalla LCD 16x2 y en el puerto serial
#include <P18F4550.INC>
#include <MACRO_PIC18F4550_1.inc>
CONFIG FOSC = HS
CONFIG PWRT = OFF
CONFIG BOR = OFF
CONFIG BORV = 3
CONFIG VREGEN = OFF
CONFIG WDT = OFF
CONFIG PBADEN = OFF
CONFIG LVP = OFF
CONFIG MCLRE = ON
cblock 0x00
DATO_ADC_A0
DATO_ADC_A1
endc
ORG 0x0000
goto MAIN
ORG 0x0020
MAIN:
clrf TRISD ;Todo el puerto D como salida (LCD)
call LCD_CONFIG
call CURSOR_OFF
SETF TRISA
CALL Config_UART
CALL Config_ADC
ENVIANDO:
TBLRD*
movf TABLAT,W
call ENVIA_CHAR
incf TBLPTRL
movlw .32
cpfseq TBLPTRL
goto ENVIANDO
pág. 7
Lab. N° 9 Programación y Simulación del Aplicativo 2
leer_adc:
BTFSC ADCON0,GO_DONE
GOTO leer_adc
MOVFF ADRESH,DATO_ADC_A0
; MULTIPLICACION A0
MOVLW .55
MULWF DATO_ADC_A0
MOVlw .4
ADDwf PRODH ,1
CALL BIN16_BCD
CALL BCD_ASCII
movlw .0
call POS_CUR_FIL1
MOVF DMILLAR,W
CALL ENVIAR_TX
call ENVIA_LCD_DATO
MOVF UMILLAR,W
CALL ENVIAR_TX
call ENVIA_LCD_DATO
MOVF CENTENA,W
CALL ENVIAR_TX
call ENVIA_LCD_DATO
MOVLW ' '
CALL ENVIAR_TX
call ENVIA_LCD_DATO
MOVLW 'C'
CALL ENVIAR_TX
call ENVIA_LCD_DATO
MOVLW .13
CALL ENVIAR_TX
call ENVIA_LCD_DATO
; CAMBIO DE CANAL A1
BSF ADCON0,CHS0 ; Selecciona el canal A1
BCF ADCON0,CHS1
pág. 8
Lab. N° 9 Programación y Simulación del Aplicativo 2
leer_adc_a1:
BTFSC ADCON0,GO_DONE
GOTO leer_adc_a1
MOVFF ADRESH,DATO_ADC_A1
; MULTIPLICACION A1
MOVLW .39
MULWF DATO_ADC_A1
CALL BIN16_BCD
CALL BCD_ASCII
movlw .0
call POS_CUR_FIL2
MOVF DMILLAR,W
CALL ENVIAR_TX
call ENVIA_LCD_DATO
MOVF UMILLAR,W
CALL ENVIAR_TX
call ENVIA_LCD_DATO
MOVF CENTENA,W
CALL ENVIAR_TX
call ENVIA_LCD_DATO
MOVLW ' '
CALL ENVIAR_TX
call ENVIA_LCD_DATO
MOVLW '%'
CALL ENVIAR_TX
call ENVIA_LCD_DATO
MOVLW .13
CALL ENVIAR_TX
call ENVIA_LCD_DATO
delay_ms .200
BSF ADCON0,GO_DONE ; INICIA LA CONVERSION
GOTO leer_adc
ENVIAR_TX:
MOVWF TXREG
ENVIAR_TX1:
BTFSS TXSTA,TRMT
GOTO ENVIAR_TX1
RETURN
pág. 9
Lab. N° 9 Programación y Simulación del Aplicativo 2
Config_UART:
;REGISTRO TXSTA, RCSTA, BAUDCON**
MOVLW B'00100100' ;TRANSMISION 8 BITS, TX=ON, MODO ASINCRONO, HIGH SPEED,
MOVWF TXSTA
MOVLW B'10010000' ; PUERTO SERIAL HABILITADO RX(RC7) y TX (RC6), RX 8 BITS, RX=ON,
MOVWF RCSTA
MOVLW B'00000000' ; SPBRG --> 8 BITS
MOVWF BAUDCON
MOVLW .129 ; BAUD RATE= FOSC/(16(SPBRG+1)) 20000000/ (16 ( n + 1)) = 9600
MOVWF SPBRG ; SPBRG = (20000000/(9600 * 16)) - 1 = 129
BSF TRISC,RC7 ; RX
BCF TRISC,RC6 ; TX
RETURN
Config_ADC:
;REGISTRO ADCON0, ADCON1, ADCON2**
MOVLW B'00001101' ;ENTRADAS ANALOGICAS AN0 Y AN1, REFERENCIA 5V Y GND
MOVWF ADCON1
MOVLW B'00010101'
MOVWF ADCON2
MOVLW B'00000011' ; SE ESCOGE CANAL 0, GO_DONE=0, ADON=1
MOVWF ADCON0
RETURN
#include "retardos.inc"
#include "Conversion.inc"
#include "LIB_LCD_1.INC"
END
NOTA: las librerías usadas son las mismas que se usaron en clase, solo se le cambio el
nombre. También cabe recalcar que en el caso del segundo sensor de 0 a 100% no se logró
alcanzar el 100% sino el 99%.
pág. 10
Lab. N° 9 Programación y Simulación del Aplicativo 2
pág. 11
Lab. N° 9 Programación y Simulación del Aplicativo 2
Procedimiento – CASO DE ESTUDIO PROPUESTO EN LABORATOR
Se pide diseñar y realizar la lógica de programación del caso de estudio propuesto en clase:
Enunciado:
Aplicacion Implementación 2
;**VOLTIMETRO***
;**ING. CÉSAR CIRIACO MARTINEZ**
#include <P18F4550.INC>
#include <MACRO_PIC18F4550.inc>
CONFIG FOSC = HS
CONFIG PWRT = OFF
CONFIG BOR = OFF
CONFIG BORV = 3
CONFIG VREGEN = OFF
CONFIG WDT = OFF
CONFIG PBADEN = OFF
CONFIG LVP = OFF
CONFIG MCLRE = ON
cblock 0x00
tiempo_us
distancia_cm
endc
ORG 0x0000
goto MAIN
ORG 0x0020
MAIN:
MOVLW B'00000010'
MOVWF TRISD ;PONER SALIDAS Y ENTRADAS
clrf TRISA ;VUELVE TODO EL PUERTO A COMO SALIDAS
CLRF tiempo_us
CALL Config_UART
; inicializar los pines
bcf LATD,0 ;TRIGGER INICIALIZO EN 0
delay_us .2 ;retardo de 2 microsegundos
INICIO_LECTURA:
bsf LATD,0 ; activo la señal al ultrasonido
delay_us .20 ; retardo minimo debe ser >10 us
bcf LATD,0 ; EN ESTE INSTANTE EL ultrasonico envía 8 pulsos de 40Khz
call leer_high
pág. 12
Lab. N° 9 Programación y Simulación del Aplicativo 2
; MULTIPLICACION
MOVF tiempo_us,w ;copie var1 a WREG
MULLW .172 ; CONSTANTE DE MULTIPLICACIÓN
CALL BIN16_BCD
CALL BCD_ASCII
; DMILLAR) (UMILLAR)
ENVIAR_DATA:
MOVF DMILLAR,W ;MUEVE DMILLAR AL REGISTRO W
MOVWF TXREG ;MUEVE EL REGISTRO W AL FILE TXREG
MOVLW .2 ; MUEVE EL LITERAL 2 A W
CPFSGT DMILLAR ; COMPARA SI ES MAYOR QUE DMILLAR
GOTO ENVIAR_TX1 ; VA A ENVIAR_TX1
BSF LATA,2 ;SETEA EL PIN2 DEL PUERTO A ----ESTO CORRESPONDE AL BUZZER----
ENVIAR_TX1:
BTFSS TXSTA,TRMT ;TESTEA Y SALTA SI NO ES 0
GOTO ENVIAR_TX1 ;REGRESA A ENVIAR_TX1 PARA TESTEAR
delay_ms .200
MOVLW '.'
MOVWF TXREG ;MUEVE EL LITERAL ANTERIOR AL FILE
ENVIAR_TX2:
BTFSS TXSTA,TRMT ;TESTEA Y SALTA SI NO ES 0
GOTO ENVIAR_TX2 ;REGRESA A ENVIAR_TX2 PARA TESTEAR
delay_ms .200
MOVF UMILLAR,W
MOVWF TXREG
ENVIAR_TX3:
BTFSS TXSTA,TRMT
GOTO ENVIAR_TX3
delay_ms .200
MOVLW .13 ;PONE UN ENTER EN EL SERIAL
MOVWF TXREG
ENVIAR_TX4:
BTFSS TXSTA,TRMT
GOTO ENVIAR_TX4
delay_ms .200
GOTO INICIO_LECTURA ;UNA VEZ ENVIADO TODO VUELVE A LEER
leer_high:
BTFSS PORTD,1
GOTO leer_high
pág. 13
Lab. N° 9 Programación y Simulación del Aplicativo 2
leer_low:
delay_us .1
incf tiempo_us
btfsc PORTD,1
GOTO leer_low
RETURN
Config_UART:
MOVLW B'00100100'
MOVWF TXSTA
MOVLW B'10010000'
MOVWF RCSTA
MOVLW B'00000000'
MOVWF BAUDCON
MOVLW .129
MOVWF SPBRG
BSF TRISC,RC7 ; RX
BCF TRISC,RC6 ; TX
return
#include "retardos.inc"
#include "Conversion.inc"
END
Proteus:
pág. 14
Lab. N° 9 Programación y Simulación del Aplicativo 2
LabVIEW:
pág. 15
Lab. N° 9 Programación y Simulación del Aplicativo 2
Conclusión:
pág. 16