Как я улучшаю читаемость при установке битов в конфигурационные регистры:
MCU.cppПосмотрите в листинге инициализацию всей периферии микроконтроллера. Вот пример:
CODE
/**
* Настройка таймера/счётчика 1
*/
void CMCU::Timer1Init(){
// [ATmega16] Table 62. Clock Select Bit Description
// +----+----+----+-----------------------------------------------------------------+
// |CSn2|CSn1|CSn0| Description ¦
// +----+----+----+-----------------------------------------------------------------+
// | 0 | 0 | 0 | No clock source. (Таймер/счетчик остановлен) |
// | 0 | 0 | 1 | clkI/O/1 (No prescaling) |
// | 0 | 1 | 0 | clkI/O/8 (From prescaler) |
// | 0 | 1 | 1 | clkI/O/64 (From prescaler) |
// | 1 | 0 | 0 | clkI/O/256 (From prescaler) |
// | 1 | 0 | 1 | clkI/O/1024 (From prescaler) |
// | 1 | 1 | 0 | Вывод Тn, счет осуществляется по спадающему фронту импульсов |
// | 1 | 1 | 1 | Вывод Тn, счет осуществляется по нарастающему фронту импульсов |
// +----+----+----+-----------------------------------------------------------------+
// Timer/Counter1 Control Register B
// [ Регистр управления B Таймером/Счётчиком 1 ][ATmega16]
// 00000000 - Initial Value
TCCR1B = BIN8(00000000); // BIN8() не зависит от уровня оптимизации
// ||||||||
// |||||||+- 0, rw, CS10: -+
// ||||||+-- 1, rw, CS11: | - Управление тактовым сигналом
// |||||+--- 2, rw, CS12: _|
// ||||+---- 3, rw, WGM12: -+ - Режим работы таймера/счетчика
// |||+----- 4, rw, WGM13: _|
// ||+------ 5, r: 0 - зарезервирован, должен быть установлен в 0 при записи
// |+------- 6, rw, ICES1: - Выбор активного фронта сигнала захвата
// +-------- 7, rw, ICNC1: - Управление схемой подавления помех блока захвата
// Примечание:
// Устанавливаем значения для счётных регистров
TCNT1H = 0x00; // ( 0xFFFF - Delay * F_CPU / PrescaleValue ) >> 8
TCNT1L = 0x00; // ( 0xFFFF - Delay * F_CPU / PrescaleValue )
/*
OCR1AH = 0x00;
OCR1AL = 0x39;
OCR1BH = 0x00;
OCR1BL = 0x39;
OCR1CH = 0x00;
OCR1CL = 0x39;
ICR1H = 0x00;
ICR1L = 0x39;
*/
// Timer/Counter1 Control Register A
// [ Регистр управления A Таймером/Счётчиком 1 ][ATmega16]
// 00000000 - Initial Value
TCCR1A = BIN8(00000000); // BIN8() не зависит от уровня оптимизации
// ||||||||
// |||||||+- 0, rw, WGM10: -+ - Режим работы таймера/счетчика
// ||||||+-- 1, rw, WGM11: _|
// |||||+--- 2, rw, COM1C0: -+ - Режим работы канала сравнения C
// ||||+---- 3, rw, COM1C1: _|
// |||+----- 4, rw, COM1B0: -+ - Режим работы канала сравнения B
// ||+------ 5, rw, COM1B1: _|
// |+------- 6, rw, COM1A0: -+ - Режим работы канала сравнения A
// +-------- 7, rw, COM1A1: _|
// Примечание: Установлен режим работы ...
TCCR1B = BIN8(00000000); // BIN8() не зависит от уровня оптимизации
// ||||||||
// |||||||+- 0, rw, CS10: -+
// ||||||+-- 1, rw, CS11: | - Управление тактовым сигналом
// |||||+--- 2, rw, CS12: _|
// ||||+---- 3, rw, WGM12: -+ - Режим работы таймера/счетчика
// |||+----- 4, rw, WGM13: _|
// ||+------ 5, r: 0 - зарезервирован, должен быть установлен в 0 при записи
// |+------- 6, rw, ICES1: - Выбор активного фронта сигнала захвата
// +-------- 7, rw, ICNC1: - Управление схемой подавления помех блока захвата
// Примечание: Коэффициент деления тактовой частоты установлен равным ...
// Режим работы: ...
}