Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MICROCONTROLADORES
OBJETIVO GENERAL
Con el desarrollo de las siguientes prcticas nos familiarizaremos con el uso de Arduino y
la programacin de microcontroladores, analizaremos con que herramientas contamos para
desarrollar aplicaciones de hardware aprovechando las ventajas que nos presenta. Las diferentes
practicas suponen las bases de la programacin de los microcontroladores, pues vamos desde un
pequeo encendido de un led, hasta operaciones a nivel de bits. Tambin nos familiarizaremos
con el entorno de desarrollo arduino y atmel studio.
Espera_500ms:
LDI R18,2
et3:LDI R17,250
et2:LDI R16,250
BRNE et1
DEC R17
Practica #1 Programacin en C
#include <avr/io.h>
#include "util/delay.h"
int main(void){
while (1)
_delay_ms(500);
_delay_ms(500);
pinMode(8, OUTPUT);
void loop() {
}
Practica #1 Resultado
Figura 3. Circuito fsico, podemos observar la configuracin fsica del circuito para el parpadeo de
un LED.
La entrada en los puertos PD0 a PD3 representara un nmero binario, siendo 15 (b1111) el
nmero ms grande a representar, la siguiente lista representa los pines encendidos y apagados
de g hasta a, y su valor hexadecimal representar la salida de los puertos en serie.
tabla: .DB 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07
.DB 0x7F, 0x67, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71
Practica #2 Programacin en C (anodo comn)
#include <avr/io.h>
int main(void){
char bcd;
DDRB = 0x00;
DDRD = 0xFF;
char hab;
while(1){
if(hab == 0x10){
PORTD = pgm_read_byte(&(tabla[bcd]));
//ABCDEFG
1,1,1,1,1,1,0, // 0
0,1,1,0,0,0,0, // 1
1,1,0,1,1,0,1, // 2
1,1,1,1,0,0,1, // 3
0,1,1,0,0,1,1, // 4
1,0,1,1,0,1,1, // 5
0,0,1,1,1,1,1, // 6
1,1,1,0,0,0,0, // 7
1,1,1,1,1,1,1, // 8
1,1,1,0,0,1,1, // 9
1,1,1,0,1,1,1, // A
0,0,1,1,1,1,1, // b
1,0,0,1,1,1,0, // c
0,1,1,1,1,0,1, // d
1,0,0,1,1,1,1, // E
1,0,0,0,1,1,1 // F
};
// b,..,..,B, ha
// A,B,C,D,E,F,G
int numero = 0;
boolean input;
void setup() {
for(int i=0;i<5;i++){
pinMode(PinesEntrada[i],INPUT);
pinMode(PinesSalida[i], OUTPUT);
void loop() {
if(digitalRead(PinesEntrada[4])){
for(int i=0;i<7;i++){
input = numeros[numero][i];
digitalWrite(PinesSalida[i],!input);
}
Practica #2 Resultado
Figura 8. Circuito fsico, podemos observar la configuracin fsica del circuito para el parpadeo de
un LED.
Prctica #3 Programacin en C
#include <avr/io.h>
char A,B,op;
int main(void){
DDRB = 0x00;
//char hab;
PIND = 0x00;
//DDRD = 0b11111111; //taking portd as output
while(1){
if(op == 0){
PORTC = A + B;
if(op == 1){
//PORTC = 0x00;
PORTC = A - B;
if(op == 2){
//PORTC = 0x00;
PORTC = A * B;
if(op == 3){
//PORTC = 0x00;
PORTC = A & B;
if(op == 4){
//PORTC = 0x00;
PORTC = A | B;
}else{
PORTC = 0x00;
//if(hab == 0x10){
//PORTD = pgm_read_byte(&(tabla[bcd]));
//}
int a0,a1,a2,b0,b1,b2,s0,s1,s2,operacion,c2,c1,c0,r3,r2,r1,r0,numa,numb;
int num2;
void setup() {
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(10, INPUT);
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
if (num2 % 2 == 1) {
digitalWrite(LEDP[i], HIGH);
else {
digitalWrite(LEDP[i], LOW);
num2 = num2 / 2;
void loop() {
a2 = digitalRead(10);
a1 = digitalRead(9);
a0 = digitalRead(8);
b2 = digitalRead(7);
b1 = digitalRead(6);
b0 = digitalRead(5);
s0 = digitalRead(2);
s1 = digitalRead(3);
s2 = digitalRead(4);
switch(operacion){
case 0: //suma
numa = 4*a2 + 2*a1 +1*a0;
numeros(numa + numb);
break;
case 1: //resta
numeros(numa - numb);
break;
case 2: //mult
numeros(numa * numb);
break;
case 3: //and
break;
case 4: //or
break;
default:
display(0,0,0,0,0,0);
break;
void display (int r5, int r4, int r3, int r2, int r1, int r0)
{
digitalWrite (A5,r0);
digitalWrite (A4,r1);
digitalWrite (A3,r2);
digitalWrite (A2,r3);
digitalWrite (A1,r4);
digitalWrite (A0,r5);
PRACTICA#3 RESULTADO