Как правильно использовать "Buzzer" на C?
Всем добрый день.
У меня есть "assembly" код, который заставляет "Piezo" издавать звук. Вопрос мой заключается в том, что мог бы кто то объяснить на языке "C" так сказать ? (AT90USB647)
// Datasheet-->PB6 ( PORTB , 6 bit )
LDI R16, 0b01000000
LDI R18, 0
OUT 0x04, R16 ;DDRB
start:
EOR R18, R16
OUT 0x05, R18 ;PORTB
LDI R17, 0xFF
delay_loop:
NOP
NOP
NOP
NOP
NOP
NOP
DEC R17
BRNE delay_loop
rjmp start
Ответы (1 шт):
Автор решения: DSuhoi
→ Ссылка
Данный код ничем не отличается от обычной "мигалки". Дословный перевод на языке Си:
int main()
{
DDRB = 0b01000000; // Настраиваем шестой PORTB на выход
while(1){
// Исключающее или (каждую итерацию цикла 6ой порт будет менять своё значение (0 или 1))
PORTB ^= 0b01000000;
// Тот регистр R17 (255)
char delay_cnt = 0xFF;
// Цикл задержки (можно заменить _delay_us(время))
while(delay_cnt){
// Задержка в 6 тактов (время зависит от частоты МК), повторяющаяся 255 раз
--delay_cnt;
}
}
return 0;
}