#include <Arduino.h>
void setup() {
// put your setup code here, to run once:
DDRB = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
}
void loop() {
// put your main code here, to run repeatedly:
// Read the input from PORTD
uint8_t portd_value = (PIND >> 6) & 0x03;
uint8_t portb_value = 0x00;
asm volatile (
"ldi r24, %0\n" // Load input value into r24
"cpi r24, 0 \n" // comper to 0
"breq load_0\n"
"cpi r24, 1 \n" // comper to 1
"breq load_1\n"
"cpi r24, 2 \n" // comper to 2
"breq load_2\n"
"cpi r24, 3 \n" // comper to 3
"breq load_3\n"
"rjmp end0 \n"
"load_0:\n"
"ldi r20, 0x00\n"
"sts %1, r20\n"
"rjmp end0 \n"
"load_1:\n"
"ldi r20, 0x01\n"
"sts %1, r20\n"
"rjmp end0 \n"
"load_2:\n"
"ldi r20, 0x02\n"
"sts %1, r20\n"
"rjmp end0 \n"
"load_3:\n"
"ldi r20, 0x04\n"
"sts %1, r20\n"
"rjmp end0 \n"
"end0:\n"
"nop"
: "=m" (portb_value) // Output operands: portb_value is memory locations to be written to
: "r" (portd_value) // Input operands
: "r20", "r24" // Clobbered registers: R20, R24 will be used and modified
);
PORTB = portb_value;
delay(10);
}