#pragma GCC optimize (-O0)
#include "ArduinoTrace.h"
#include <avr/io.h>
volatile byte bytePulsadorRojo;
volatile byte bytePulsadorVerde;
volatile byte bytePulsadorAzul;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//ToDo:--------------config---------------------------------
// PORTD |= (1<<PD2)|(1<<PD7); // PIN DIGITAL 2 Y 7 EN PULL-UP RESISTOR
asm volatile(
"in r16,0x0B \n"
"ori r16,0x84 \n" // PORTD|(10000100)
"out 0x0B,r16 \n"
);
// PORTC |= (1<<PC5); // PIN PC5 EN PULL-UP RESISTOR
asm volatile(
"sbi 0x08,5 \n"
);
// DDRD |= (1<<PD4)|(1<<PD6); // PIN DIGITAL 4 Y 6 EN OUTPUT
asm volatile(
"in r16,0x0A \n"
"ori r16,0x50 \n" // DDRD|(10000100)
"out 0x0A,r16 \n"
);
// DDRB |= (1<<PB0); // PIN DIGITAL 8 EN OUTPUT
asm volatile(
"sbi 0x04,0 \n"
);
//----------------------------------------------------
}
void loop() {
// put your main code here, to run repeatedly:
// ASILAMOS LOS BITS CORRESPONDIENTES A LOS PULSADORES
// bytePulsadorRojo = PIND&(1<<PD7); // AISLA BIT DEL PIN DIGITAL 7
asm volatile(
"in r16, 0x09 \n"
"andi r16, 0x80 \n" // PIND&(10000000)
"sts bytePulsadorRojo, r16 \n" // UTILIZAMOS STS YA QUE ACCEDEMOS A
// UNA POSICION FUERA DEL I/O SPACE
);
// bytePulsadorVerde = PIND&(1<<PD2); // AISLA BIT DEL PIN DIGITAL 2
asm volatile(
"in r16, 0x09 \n"
"andi r16, 0x04 \n" // PIND&(00000100)
"sts bytePulsadorVerde, r16 \n" // UTILIZAMOS STS YA QUE ACCEDEMOS A
// UNA POSICION FUERA DEL I/O SPACE
);
// bytePulsadorAzul = PINC&(1<<PC5); // AISLA BIT DEL PIN PC5
asm volatile(
"in r16, 0x06 \n"
"andi r16, 0x20 \n" // PIND&00100000
"sts bytePulsadorAzul, r16 \n" // UTILIZAMOS STS YA QUE ACCEDEMOS A
// UNA POSICION FUERA DEL I/O SPACE
);
//ToDo:-------------red led----------------------------
// VERIFICAMOS LOS BITS Y ENCENDEMOS O APAGAMOS LOS LED
if(bytePulsadorRojo == 0){
// PORTB |= (1<<PB0);
asm volatile(
"sbi 0x05,0"
);
}else{
// PORTB &= ~(1<<PB0);
asm volatile(
"cbi 0x05,0"
);
}
//-----------------------------------------------------
//ToDo:-------------green led--------------------------
if(bytePulsadorVerde == 0){
// PORTD |= (1<<PD6);
asm volatile(
"sbi 0x0B,6"
);
}else{
// PORTD &= ~(1<<PD6);
asm volatile(
"cbi 0x0B,6"
);
}
//-----------------------------------------------------
//ToDo:-------------blue led---------------------------
if(bytePulsadorAzul == 0){
// PORTD |= (1<<PD4);
asm volatile(
"sbi 0x0B,4"
);
}else{
// PORTD &= ~(1<<PD4);
asm volatile(
"cbi 0x0B,4"
);
}
//-----------------------------------------------------
}