Микроконтроллеры семейства AVR. Воробьева Г.С. - 74 стр.

UptoLike

Составители: 

исключен. Во избежание подобного, к оператору asm следует добавить
атрибут volatile:
asm volatile("in %0, %1" : "=r" (value) : "I"(_SFR_IO_ADDR(PORTD)) );
asm volatile(
"cli" "\n\t"
"ld г24, %a0" "\n\t"
"inc r24" "\n\t"
"st %a0, r24" "\n\t"
"sei" "\n\t"
:
: "e" (ptr)
: "r24"
);
В результате получаем
cli;
ld r24, Z;
inc r24;
st Z, r24;
sei;
Пример 1.
По нажатию клавишы будет загораться соответствующий светодиод.
Подключаем светодиоды к порту B, а переключатели к порту D.
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0xFF; //Все линии порта B выходы
DDRD = 0x00; //Все линии порта D входы
while (1) //Бесконечный цикл
{
while (PIND == 0xFF)//Ожидание нажатия клавиши
{
PORTB = PIND; //Присвоить нажатую клавишу светодиоду
74