Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

320 Микроконтроллеры AVR от азов программирования... Кроме новых команд, в тексте программы (листинг 5.20) использу ­ ется один, пока еще не знакомый нам интересный прием. Посмотрите, пожалуйста, на строку 54 программы. В этой строке записано выраже ­ ние, которое присваивает элементу массива buf г значение переменной cods. Однако в качестве номера элемента массива используется не про ­ сто переменная ii, а выражение ii++. Это и есть еще одна оригинальная особенность языка СИ. Язык СИ допускает одновременно использовать переменную в любом выражении и изменять ее значение. Так, при вычислении выражения buf г [ii++] =codS сначала элементу массива с номером ii присваивается значение cods, а затем значение переменной ii увеличивается на единицу. Такой же прием допускается при использовании переменных в качестве параметров функций или в составе любых других выражений. Кроме команды увеличения, можно использовать команду уменьшения, а также менять порядок вычислений. Вот несколько примеров таких выражений: a=MyBuffer[++ii] ; b=MyFunction ( ii-- ); c=85+(--ii) /2; В любом случае, при использовании данного приема выполняются следующие правила: ♦ ii++ означает: использовать значение, а затем увеличить его на единицу. ♦ ++ii означает: увеличить значение на единицу, а затем использовать его. ♦ ii — означает: использовать значение, а затем уменьшить его на единицу. ♦ — ii означает: уменьшить значение на единицу, а затем использовать его. Естественно, вместо переменной ii может использоваться любая дру ­ гая переменная. Описание программы (листинг 5.20) Листинг 5.20 I ******************* Project : Пример 10 Version : 1 Date . 07.03.2006 Author • Belov Company : Home Comments- Кодовый замок Chip type Clock frequency Memory model Data Stack size . ATtiny2313 : 4,000000 MHz : Tiny : 32 ***/ 1 «include <tiny2313.h> 2 «define klfree 0x77F 3 «define kzad 3000 4 «define kandr 20 5 «define bsize 30 // Код состояния при полностью отпущенных кнопках // Код задержки при сканировании // Константа антидребезга И Размер буфера для хранения кода

RkJQdWJsaXNoZXIy MTExODQxMg==