Да, курсы это конечно всё хорошо... но если по быстрому
одинаковы только выот какие моменты
ldi r16,(1<<XMM1)|(0<<XMM0)
out XMCRB,r16
XMCRB=(1<<XMM1)|(1<<XMM0);
оба участка кода устанавливают в регистре XMCRB биты XMM1 и XMM0. Просто в АВР нельзя напрямую работать с регистрами I/O.
символ " | " означает логическое ИЛИ. Смысл выражения 1<<XMM1 таков: в регистре установить бит XMM1(в инклудах забито что во время компиляции вместо XMM1 надо подставить номер бита например 5). Значит в регистр надо записать все нули а пятый бит - 1. Получается что в регистр записывается 0b00100000 и потом прибавляется 0b00000001 (условимся что XMM1=5 а XMM0=0). При побитовом сложении получается 0b00100001. И это записываем в регистр. Если надо установить конкретные биты а остальные не изменять, тогда пишем XMCRB|=(1<<XMM1)|(1<<XMM0); Тогадайся почему?
There is only 10 kind of people: those who understands binary code and those who dont!!!