Sie sind auf Seite 1von 3

Anexo #1

Simulación del sistema (Proteus):

Simulación del HMI (LabView):


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

Barrido_displayX4:
ldi YH,HIGH(DIG0)
ldi YL,LOW(DIG0)
ldi
Columnas_display,0b01111111;Se inicia habilitando
el 1er display de la derecha
ldi Conta,0x04;Numero de
Displays que tiene mi hardware de barrido
recuperar_valores:
ld Tempo,Y+; recuperación con
posincremento del puntero Y
andi
Columnas_display,0b11111110;mantener el pull-up
apagado en el pin de Recepción
out PORTD,Columnas_display;
habiltación de columnas
out PORTB,Tempo;habilitación
de filas(segmentos del display)
rcall retardo;rutina de
retardo
ser Tempo;cargo con 0xFF a
Tempo
andi Tempo,0b11111110
out PORTD,Tempo;apago todas
las columnas(displays apagados)
sec; C=1L
ror Columnas_display;desplazo
el cero en "Columnas", para habilitar otro display
dec Conta
brne recuperar_valores
ret
//rutina de espera (Tiempo que el display esta
encendido)
retardo:
ldi Aux,0xFF
retardo1:
dec Aux
brne retardo1
ret

Tabla_display_7seg:
.db 0b00111111,0b00000110 ;0,1
.db 0b01011011,0b01001111 ;2,3
.db 0b01100110,0b01101101 ;4,5
.db 0b01111101,0b00000111 ;6,7
.db 0b01111111,0b01101111 ;8,9

Das könnte Ihnen auch gefallen