Sei sulla pagina 1di 9

ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA ELÉCTRICA


Y ELECTRÓNICA

LABORATORIO DE CONTROL CON


MICROPROCESADORES

TRABAJO PREPARATORIO

Práctica No: 1
Tema: COMUNICACION SERIAL
ASINCRONICA

Grupo: GR2

Realizado por: César Chillán

Fecha de Entrega:20/04/2018

Semestre 2018A
Anexo #1
Simulación del sistema (Proteus):

Simulación del HMI (LabView):


Anexo #2
Código fuente .asm (Atmel Studio):
; Serial_HMI.asm //Configuración CAD_modo manual:
; ldi Tempo,0b00000001
; Created: 28/09/2017 21:48:51 sts DIDR0,Tempo
; Author : César ldi Tempo,0b01100000
; sts ADMUX,Tempo
.def Tempo=R16 //
.def valor_ADCH=R17 Principal:
.def valor_ADCL=R18 ldi Tempo,0b11000101
.def Bandera_datos=R19 sts ADCSRA,Tempo
.def Columnas_display=R20 esperar_conversion:
.def Conta=R21 lds Tempo,ADCSRA
.def Aux=R22 sbrc Tempo,6
.dseg rjmp esperar_conversion
Centena_recibida: .Byte 1 lds valor_ADCH,ADCH
Decena_recibida: .Byte 1 out PORTC,valor_ADCH
Unidad_recibida: .Byte 1 esperar_fin_transmision:
Unidad_barrer: .Byte 1 lds Tempo,UCSR0A
Decena_barrer: .Byte 1 sbrs Tempo,5
Centena_barrer: .Byte 1 rjmp esperar_fin_transmision
Miles_barrer: .Byte 1 sts UDR0,valor_ADCH
DIG0: .Byte 1 rcall BCD_a_7segX4
DIG1: .Byte 1 rcall Barrido_displayX4
DIG2: .Byte 1 rjmp Principal
DIG3: .Byte 1
.cseg Recepcion_completa:
.org 0x00 push Tempo
rjmp Inicio in Tempo,SREG
.org 0x28 push Tempo
rjmp Recepcion_completa lds Tempo,UDR0
andi Tempo,0b00001111
Inicio: cpi Bandera_datos,0x00
ldi Tempo,0b11111110 breq Guardar_centenas
out DDRA,Tempo cpi Bandera_datos,0x01
ldi Tempo,0xFF breq Guardar_decenas
out DDRB,Tempo cpi Bandera_datos,0x02
out DDRC,Tempo breq Guardar_unidades
ldi Tempo,0b11111110 /*
out DDRD,Tempo out PORTB,Tempo*/
incrementar_bandera:
in Tempo,MCUCR inc Bandera_datos
andi Tempo,0b11101111 volver1:
out MCUCR,Tempo pop Tempo
out SREG,Tempo
ldi Tempo,HIGH(RAMEND) pop Tempo
out SPH,Tempo reti
ldi Tempo,LOW(RAMEND)
out SPL,Tempo Guardar_centenas:
ldi Bandera_datos,0x00 sts Centena_recibida,Tempo
ldi XH,HIGH(Unidad_recibida) rjmp incrementar_bandera
ldi XL,LOW(Unidad_recibida)
ldi Tempo,0b00111111 Guardar_decenas:
sts DIG0,Tempo sts Decena_recibida,Tempo
sts DIG1,Tempo rjmp incrementar_bandera
sts DIG2,Tempo
sts DIG3,Tempo
Guardar_unidades:
; Configuracion de USART0: sts Unidad_recibida,Tempo
; 9600 baudios, 8 bits de datos,4MHz(Cristal),Modo ldi Bandera_datos,0x00
asincónico lds Tempo,Unidad_recibida
ldi tempo,high(51)//Sale del cálculo del baud sts Unidad_barrer,Tempo
rate lds Tempo,Decena_recibida
sts UBRR0H,tempo sts Decena_barrer,Tempo
ldi tempo,low(51)//Sale del cálculo del baud lds Tempo,Centena_recibida
rate sts Centena_barrer,Tempo
sts UBRR0L,Tempo rjmp volver1
ldi Tempo,0b00000010//UDR0=0L-->el UDR0 esta lleno
U2X0=1L-->Modo asincronico BCD_a_7segX4:
sts UCSR0A,Tempo ldi XH,HIGH(Unidad_barrer);recupero la
ldi Tempo,0b10011000//RXCIE0=1L-- direccion mas significativa de BCD0
>Habilitación de la interrupción por recepcion, ldi XL,LOW(Unidad_barrer);recupero la
Pines RX y Tx habilitados,UCSZ02=0L-->para enviar direccion menos significativa de BCD0
o recibir datos de 8bits ldi YH,HIGH(DIG0);recupero la direccion
sts UCSR0B,Tempo mas significativa de DIG0
ldi Tempo,0b00000110//Modo asincrónico,No ldi YL,LOW(DIG0);recupero la direccion
paridad,1bits de parada,se trabajara con datos de menos significativa de DIG0
8bits ldi Conta,0x04;Numero de Displays que
sts UCSR0C,Tempo tiene mi hardware de barrido
sei recuperar_equivalente_7seg:
ldi ZH,HIGH(Tabla_display_7seg<<1)
ldi ZL,LOW(Tabla_display_7seg<<1) out PORTB,Tempo;habilitación
ld Tempo,X+;recuperación con de filas(segmentos del display)
posincremento del puntero x rcall retardo;rutina de
//suma a 16 bits(salto de número de posiciones): retardo
add ZL,Tempo ser Tempo;cargo con 0xFF a
clr Tempo Tempo
adc ZH,Tempo andi Tempo,0b11111110
lpm Tempo,Z out PORTD,Tempo;apago todas
// las columnas(displays apagados)
st Y+,Tempo; Guarda el equivalente en sec; C=1L
7segmentos en su reserva de memoria respectiva ror Columnas_display;desplazo
dec conta el cero en "Columnas", para habilitar otro display
brne recuperar_equivalente_7seg dec Conta
ret brne recuperar_valores
ret
Barrido_displayX4: //rutina de espera (Tiempo que el display esta
ldi YH,HIGH(DIG0) encendido)
ldi YL,LOW(DIG0) retardo:
ldi ldi Aux,0xFF
Columnas_display,0b01111111;Se inicia habilitando retardo1:
el 1er display de la derecha dec Aux
ldi Conta,0x04;Numero de brne retardo1
Displays que tiene mi hardware de barrido ret
recuperar_valores:
ld Tempo,Y+; recuperación con Tabla_display_7seg:
posincremento del puntero Y .db 0b00111111,0b00000110 ;0,1
andi .db 0b01011011,0b01001111 ;2,3
Columnas_display,0b11111110;mantener el pull-up .db 0b01100110,0b01101101 ;4,5
apagado en el pin de Recepción .db 0b01111101,0b00000111 ;6,7
out PORTD,Columnas_display; .db 0b01111111,0b01101111 ;8,9
habiltación de columnas

Potrebbero piacerti anche