Anda di halaman 1dari 5

UNIVERSIDAD NACIONAL DEL

CALLAO
FACULTAD DE INGENIERA ELCTRICA Y ELECTRNICA
E. P. INGENIERA ELECTRNICA

Practica N3
Programacin serial en C
ASIGNATURA: LABORATORIO DE MICROCONTROLADORES
PROFESOR: ZENON CUCHO MENDOZA
TURNO 92G
INTEGRANTES:
ALVARADO OYOLA JOSE M

CDIGOS
1213220438

PREGUNTA 1
Identificar una funcin que represente el numero mayor de ceros como una imagen y otra imagen el numero
mayor de unos usando 3 entradas en progrmacion en C:

*
* GccApplication3.c
*
* Created: 06/11/2015 08:37:58 a.m.
* Author: jalvarado
*/
#include <avr/io.h>
int main(void)
{ int p,s;
DDRC =0x00; // activa 3pull up
PORTC=0x07;
DDRD=0x00;
PORTD=0x20; //activamos pull up en pd5 el habilitador
DDRB =0x01; //8 leds de salida funcion F
PORTB=0x00; //leds apagados
while(1)
{ p=PIND&0b00100000; //testeamos el habilitador pasra saber si esta en 1
// si el habilitador esta en 1:
if(p==0x20){
s=PINC&0x07; // testeamos los 3 pines para leer los datos
// desplazamos 3 espacios ala derecha para ordenar y usar bien el "case"
switch(s){
case(0) : PORTB=0x00; //cuando la entrada es 00
break;
case(1) : PORTB=0x01; //cuando la entrada es 01
break;
case(2) : PORTB=0x00; //cuando la entrada es 10
break;
case(3) :PORTB=0x01; //cuando la entrada es 11
break;
case(4) :PORTB=0x00; //cuando la entrada es 100
break;
case(5) :PORTB=0x01; //cuando la entrada es 101
break;
case(6) :PORTB=0x01; //cuando la entrada es 110
break;
case(7) :PORTB=0x01; //cuando la entrada es 111
break;

}//fin de switch
}
else{PORTB=0x00;
}//fin de else
}//fin del while
}//fin del main

U1
14
15
16
17
18
19
9
10

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

D1
LED-YELLOW
21
20

AREF
AVCC

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

ATMEGA8

Problema 1:
Escribir en el virtual terminal la palabra unac mediante programacin en c usando directivas usart activado
mediante u pulsador en pd5

/*
* GccApplication1.c
*
* Created: 11/11/2015 15:53:13
* Author: alvarado
*/
#include <avr/io.h>
#include<util/delay.h>
#include <avr/portpins.h>
#define USART_BAUDRATE 4800
#define Baud_prescale (F_CPU/16/USART_BAUDRATE-1)
void enviar_USART(char dato)
{while(bit_is_clear(USCRA,UDRE)); UDR=dato;}
char leer_USART()
{ while(bit_is_clear(UCSRA,RXC)); return UDR;}
void imprimir_USART(char cadena[])
{ for(int i=0;cadena[i]!='\0';i++){enviar_USART(cadena[i]);}
}
char dato;
int main(void)
{ int pulso1;
UBRRH=(Baud_prescale>>8);
UBRRL=Baud_prescale;
UCSRA=1<<U2X;
UCSRB=1<<RXEN|1<<TXEN;
UCSRC=1<<URSEL|1<<UPM1|0<<USBS|1<<UCSZ1|1<<UCSZ0;
DDRB=0x00;
while(1)
{pulso1=PINB & 0x04;
if(pulso1==0x04)
{while(pulso1==0x04){pulso1=PINB & 0x04;}
imprimir_USART("UNAC\r\n");}
}

//TODO:: Please write your application code


}

U1

R1

14
15
16
17
18
19
9
10

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

10k

21
20

AREF
AVCC

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

ATMEGA8

Conclusiones:
Para utilizar el case ;debemos tener en cuenta el orden y lo ms recomendable es usar instrucciones de
desplazamiento.
Es recomendable colocar al final de cada llave un indicador de posicin .
Segn mi experiencia en la simulacin al utilizar el case es ms sencillo y simplifica el tamao del programa.

Anda mungkin juga menyukai