IAR + AVR Studio

  Многих начинающих программистов WINAVR подкупает возможностью работать в связке с AVR Studio, которая имеет в своем составе программный отладчик. Если вы еще не в курсе, то IAR тоже позволяет это делать, только для этого нужно установить специальный формат выходного файла.
   Си существенно облегчает написание программ для микроконтроллеров. Однако при всех его преимуществах,  иногда возникает потребность написать часть кода на ассемблере. В IARе для этого можно использовать ассемблерные вставки, intrinsics функции или отдельные ассемблерные модули. Давайте на примере исходника для работы с энкодером разберем, как написать ассемблерный модуль, который можно использовать в сишной программе. 
   В своих микроконтроллерных поделках я постоянно использую кнопки. Поэтому написал простенький драйвер для работы с ними. В текущей версии драйвер заточен под четыре кнопки, но его довольно легко переделать. В этой статье я опишу содержимое файлов драйвера, а в следующей разберу какой-нибудь практический пример.

  

 

    Принцип действия, схема включения и исходник библиотеки для работы с инкрементным энкодером уже рассматривался мной в одной из статей. Сегодня мы поговорим о практическом применении энкодера. В качестве примера я выбрал программу генератора прямоугольного сигнала с диапазоном рабочих частот 1 – 100 Гц. 

 

   Для выполнения команд или вывода данных контроллеру символьного lcd требуется определенное время. Поэтому в конце функций записи мы использовали программные задержки в 40 us. Это вполне работоспособное решение, однако не единственно возможное.   
   Контроллер символьного lcd имеет флаг занятости BF. Он устанавливается в 1,  когда контроллер выполняет внутреннюю работу и сбрасывается, когда контроллер освобождается. Вместо программной задержки можно опрашивать состояние этого флага и запускать цикл записи команд/данных, только когда флаг сброшен.