Вы находитесь на странице: 1из 10

DIAGRAMA DE FLUJO:

UNIVERSIDAD NACIONAL DEL


CALLAO
FACULTAD DE INGENIERA ELCTRICA Y ELECTRNICA

E. P. INGENIERA ELECTRNICA

INFORME PREVIO N4
Comunicacin serial (usart)
ASIGNATURA:

LABORATORIO DE MICROCONTROLADORES

PROFESOR: ZENON CUCHO MENDOZA

TURNO 92G
INTEGRANTES:
ALVARADO OYOLA JOSE M

Problema 1:

CDIGOS
1213220438

Al presionar la tecla A se muestra un contador de 3 bits ascendente


donde los parmetros de la trama a 4800bps 8 datos asncrono, parida
par,1 bit de parada a 1MHz

DIAGRAMA DE FLUJO:

CALCULOS PREVIOS:
VELOCIDAD SIMPLE:

UBRR=

Fosc
1M
1=
1=12.02 12
16( BAUD)
16 ( 4800 )

BAUD=

error=

Fosc
1M
=
=4807.7
16 (UBRR+1) 16 (13)

T E
48004807,69
100 =
100 =0,159
E
4807.69

/*
* AssemblerApplication4.asm
*
* Created: 23/10/2015 09:12:03 a.m.
* Author: jalvarado
*/
.cseg
.org$00
rjmp inicio
inicio:
;programa principal
ldi r16, high(ramend) ;definimos la pila para utilizar subrutinas
out sph,r16
ldi r16,low(ramend)
out spl,r16
ldi r17,$0f
out ddrb,r17
rcall configuracion_usart ; rutina que configura los
; parametros del usart
;numero
esperadato:
;empieza con leds apagados
ldi r18,$00
out portb,r18
ldi r19,$00
;cuando la bandera ucsra tiene un valor salta
sbis ucsra,rxc
rjmp esperadato
in r20,udr ;leo el dato
cpi r20,$41 ;compara la letra A
brne esperadato
;si es igual
contador:

rcall retardo ;llamamos a retardo


inc r18
;incrementamos el numero del contador
out portb,r18 ;mostramos el numero
inc r19
;incrementamos el tope del contador
cpi r19,8
;comparamos el tope del contador
breq esperadato ;sino regresa al contador
rjmp contador
retardo:
ldi r22,10
l2:ldi r23,66
l0:ldi r21,200
l1:
cp r23,r21
dec r21
brne l1
cpi r23,0
dec r23
brne l0
cpi r22,0
dec r22
brne l2
ret
configuracion_usart:
PUSH R16
;guardamos el un registro en la pila
;4800 baudios (fosc=1MHz)
ldi r16,0
out ubrrh,r16
ldi r16,12
out ubrrl,r16
ldi r16,0
;NO ...velocidad doble(u2x);U2X=0
;asincrono modo normal
ldi r16,(0<<rxc|0<<txc|0<<u2x|0<<mpcm)
out ucsra,r16
ldi r16,0
;comunicacion asincrona ,con paridad
;1 bit de parada,8bit de datos
ldi r16,(1<<ursel|0<<umsel|1<<upm1|0<<upm0|0<<usbs|1<<ucsz1|1<<ucsz0|
0<<ucpol)
out ucsrc,r16
ldi r16,0
;tx y rx habilitadas....interrupciones deshabilitadas
ldi r16,(0<<rxcie|0<<txcie|0<<udrie|1<<rxen|1<<txen)
out ucsrb,r16
POP R16
ret

U1

D3

D2

LED-BIBY LED-BIBY

D1

14
15
16
17
18
19
9
10

LED-BIBY

R1

R2

R3

220

220

220

21
20

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

AREF
AVCC
ATMEGA8

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

RXD
TXD
RTS
CTS

CONCLUSIONES:

Tener en cuenta que para poder sondear los pulsadores se puede utilizar
tanto la mscara cmo tambin las instrucciones sbis y sbic
Para la simulacin se puede hacer uso del Virtual Terminal, pero cuando
se tenga que hacer uso de la implementacin tendremos que usar del
max232 y adicionalmente cmo ahora las mquinas son ms modernas,
un convertidor de serial a usb.
El cdigo ASCII es un puente de comunicacin entre el teclado del
computador y el software de PROTEUS.
Para cambiar los parmetros de la trama hay que tener en cuenta las
configuraciones del terminal virtual del PROTEUS.

Tarea:
EJERCICIO:
Realizar un programa que emule 4 interruptores digitales
Programacin en atmel:
Mostrando la programacin en lenguaje C en Word:
#include <avr/io.h>
#include <util/delay.h>
int8_t pulsador=1; //declara variables de 8 bits
int8_t pulsador2=1;
int8_t pulsador3=1;
int8_t pulsador4=1;
int main(void)
{
DDRB&=~_BV(PB0);
DDRB&=~_BV(PB1);
DDRB&=~_BV(PB2);
DDRB&=~_BV(PB3);
DDRD|=_BV(PD0);
DDRD|=_BV(PD1);
DDRD|=_BV(PD2);
DDRD|=_BV(PD3);
PORTB|=_BV(PB0);
PORTB|=_BV(PB1);
PORTB|=_BV(PB2);
PORTB|=_BV(PB3);
while(1) //BUCLE INFINITO
{
if(bit_is_clear(PINB,PB0)&(pulsador==1)) //VERIFICA SI PB0=0
{
_delay_ms(40);
if(bit_is_clear(PINB,PB0)&(pulsador==1))
{
PORTD ^= _BV(PD0);
pulsador=0;
}
}
if(bit_is_set(PINB,PB0)) //VERIFICA SI PB0=1
{
pulsador=1;
}
if(bit_is_clear(PINB,PB1)&(pulsador2==1)) //VERIFICA SI PB0=0
{
_delay_ms(40);
if(bit_is_clear(PINB,PB1)&(pulsador2==1))
{
PORTD ^= _BV(PD1);
pulsador2=0;
}
}
if(bit_is_set(PINB,PB1)) //VERIFICA SI PB0=1
{
pulsador2=1;
}

if(bit_is_clear(PINB,PB2)&(pulsador3==1)) //VERIFICA SI PB0=0


{
_delay_ms(40);
if(bit_is_clear(PINB,PB2)&(pulsador3==1))
{
PORTD ^= _BV(PD2);
pulsador3=0;
}
}
if(bit_is_set(PINB,PB2)) //VERIFICA SI PB0=1
{
pulsador3=1;
}

}
}

if(bit_is_clear(PINB,PB3)&(pulsador4==1)) //VERIFICA SI PB0=0


{
_delay_ms(40);
if(bit_is_clear(PINB,PB3)&(pulsador4==1))
{
PORTD ^= _BV(PD3);
pulsador4=0;
}
}
if(bit_is_set(PINB,PB3)) //VERIFICA SI PB0=1
{
pulsador4=1;
}

Simulacin en isis proteus: