#pragma GCC optimize (-Og)
#include "ArduinoTrace.h"
volatile byte dato;
void f1() asm("F1"); // Función que en asm se reconoce como "F1" para set up
void f2() asm("F2"); // Función para el loop
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//PORTD=PORTD|(1<<PD4); //board pin 4 pull-up resistor
f1(); //Guarda el PC actual para volver después y se carga con la dirección F1
//DDRB=DDRB|(1<<PB0); //led pin output
}
void loop() {
// put your main code here, to run repeatedly:
//dato=PIND&0x10; //aislar bit 4 de PIND
// asm volatile
// (
// "in r24,%0 \n"
// "andi r24,0x10 \n"
// "sts dato,r24"
// :
// :"I" (_SFR_IO_ADDR(PIND))
// );
f2();
if(dato==0) //si pulsador oprimido (bit 4 de PIND en 0)
{
//PORTB=PORTB|(1<<PB0); //led on
asm volatile
(
"sbi %0, 0"
:
:"I" (_SFR_IO_ADDR(PORTB))
);
}
else //sino:
{
//PORTB=PORTB&~(1<<PB0); //led off
asm volatile
(
"cbi %0, 0"
:
:"I" (_SFR_IO_ADDR(PORTB))
);
}
}