Ревич «Практическое программирование Микроконтроллеров AVR на языке ассемблера»

Автор:		Юрий Ревич
Название: 	Практическое программирование 
		Микроконтроллеров AVR на
 		языке ассемблера
Издательство: 	Bhv

Отличная книга. Из серии настольных. Автор очень доступно, подробно, без занудства и заумностей рассказывает как использовать все то богатство, что разработчики из Atmel напихали в свой контроллер, причем книжка свежая, а значит контроллеры там уже из современных. Разобраны все периферийные устройства, а также на конкретных практических примерах наглядно показано, как воспроизводить звуки через ШИМ, как писать и читать на MMC флешки, как пользоваться компараторами, АЦП, SPI, TWI. Есть целый раздел посвященный математике на микроконтроллерах. Сложение, деление, умножение целых и дробных чисел. Как со знаком, так и без. В сочетании с даташитом или книгой Евстифеева дает практически полную информацию для работы с AVR. Также есть глава посвященная связи МК с компом. Есть пример проги на Delphi для работы с COM портом. В общем, настоятельно рекомендую заиметь, не помешает.

56 thoughts on “Ревич «Практическое программирование Микроконтроллеров AVR на языке ассемблера»”

  1. Вот как раз позавчера заказал себе сию книгу, и еще одну («занимательная микроэлектроника») этого же автора. Позырил предварительно в электронном виде — действительно, стиль изложения у него очень хороший (особенно для начинающих вроде меня))).
    Спасибо за ссылки на полезные книги, часть я себе уже купил и очень рад :)

      1. Так, значит качаем ”занимательная микроэлектроника”. Готовимся теоретически к новой публикации DI HALT.

    1. счастливый обладатель «занимательной микроэлектроники». полезная книжка, много интересных фич натырил и узнал.
      А есть чо по АВР и их программированию на сях? А то аассемблер как-то не улыбается изучать :(

      1. Чтобы програмить их на сях надо забыть что они микроконтроллеры, и просто програмить на сях(глянь примеры к любой среде там многое станет ясно, книжка там не нада)

        1. «забыть что они микроконтроллеры» — не получится. Все равно останется много низовой работы на уровне регистров, знание периферии и работа с регистрами конфигурации. (Это не Винда с ярлычками). А для оптимизации работы программ все равно придется использовать ассемблерные вставки, просматривать и переделывать откомпилированный в С код. Разве что программирование математики с плавающей точкой облегчит, но какой ценой… да и не так уж часто в управляющих программах нужна сложная математика. Зато все равно нужно знать устройство используемого контроллера и его возможности.
          А чтобы «забыть» — понадобится немеряно памяти программ и даннных, огромное быстродействие, куча периферии. Такое возможно только с навороченнными 32х битными, но они создадут кучу аппаратных проблем, — как разместить на плате и развести всю эту многоногую хрень с кучей обвязки… Это уже не для новичка. А для мелких контроллеров, 8-20 ног, где периферию и регистры можно на пальцах пересчитать, программирование на С сводится к элементарным командам — эквивалентам ассемблерных, поскольку на сложные функции просто памяти не хватит. Мы тут уже осенью прикидывали, сколько килобайт занимает программа, всего лишь выводящая на индикатор строчку «Hello, world», написанная на С… (на ассемблере ~0,3).

          1. >Мы тут уже осенью прикидывали, сколько килобайт занимает программа, всего >лишь выводящая на индикатор строчку “Hello, world”, написанная на С… (на >ассемблере ~0,3).
            Гхм… Ну честно говоря не думаю, что все так жестоко. Я на ПИКах сижу, пишу на mikroC, там в халявной версии ограничение на 2 кб output file size. В эти два килобайта можно много чего вписать… У меня книжечка лежит «создайте робота своими руками» — там чудак вобще в 2 килобайта умудрился RtOS впихнуть. На Сях написанную.

            1. Два килобайта на РТОС? чето много, я в 600байт уложился :) И еще можно заоптимизировать, байт до 500. Скоро выложу.

            2. Я уже упоминал здесь раньше, что в 80х годах делал на работе для нужд производства микроконтроллеры сначала на 580ИК80, потом на 1816ВЕ35, 48, так я там ухитрялся в 2-4Кб ПЗУ запихать программы, которые в реальном времени работали с 4-5 телеграфными каналами, имели программные часы, календарь, выдавали результаты измерений по запросу или через заданные интервалы времени, вели диалог через телеграфный аппарат с оператором и еще много всякого. Голый ассемблер, и никаких С… А на отладочном компьютере, тоже самодельном, на 580ИК80, программа программатора для программирования 573РФ2 занимала 64 байта!
              Кстати, в упомянутом уже обсуждении “Hello, world”, я компилировал программки на МикроПаскале, МикроСи, МикроБэйсике от Микроэлектроники, и получил результаты, поразительно отличавшиеся от всяких «крутых» компиляторов С. Подробнее можете глянуть в той теме: http://easyelectronics.ru/skazhu-paru-slov-o-optimizacii-koda.html#comments

              1. Не знаю как насчет Микро… т.к. с пиками не работал. А вот на AVR из сишных компилеров уважаю только IAR вот он реально шедевральный код дает. Я из него несколько приемов подчерпнул для себя. Но оно и понятно, АВР делался совместо с IAR и они созданы друг для друга. Но иар, падла, стоит дофига и защита у него крутая, а крякнутые версии я ни разу адекватные не видел. Ну и настроить его для работы это та еще головоломка.

                1. Так у Микроэлектроники компиляторы не только для PIC, но и для кучи других процессоров, в т.ч. и AVR. Я же давал для сравнения примерчики, откомпилированные и для PIC, и для AVR.
                  http://www.mikroe.com/en/compilers/
                  Попробуй, не пожалеешь! Удобнее их только DELPHI.

                    1. Так и у Микроэлектроники есть примеры по всей периферии: UART, I2C, ADC, PWM, c ЖК индикаторами — символьными и графическими, и многое другое. И куча встроенных функций для них, которые сводят работу с теми же UART, I2C, ADC, PWM к 2-3 командам вместо десятков и сотен строк. А главное — очень экономный компилятор, дающий компактный код. Я в своем роботе все никак 2 кб не наберу, а уже столько напихал… А до 2кб — никаких регистраций и ключей не надо. Пока понадобится больше, наверняка кряк найду.
                      А GCC я пробовал, — такая гадость. И размеры кода ни в какие ворота не лезут, и глюков полно, и неудобный страшно…
                      Ну его в болото…

                    2. вот я и мацаю его же. правда там иногда такие глюки бывают, я изъебался с чтением ds1820, а оказалось, что надо было температуру не сдвигать, а делить на два. хотя типа равносильно. обнаружил чудесным образом.

                    3. Ну, это не глюк, а особенность. Операции сдвига в языках высокого уровня работают не с физическими регистрами, а с переменными, имеющими разный формат, и нельзя просто отоджествлять их, например, с работой команд ассемблера. Если уж нужно, лучше вставить в текст несколько ассемблерных команд, это просто. Или хотя бы проверить, как этот кусок реализовал компилятор.

                    4. Для работы с периферией Си нафиг не нужен. Тут и ассемблера хватает за глаза и не напрягает. Си нужен там где в ход идет тяжелая артиллерия TCP/IP, CAN, USB, FAT и MMC и прочие геморойные вещи. На GCC все это уже давно написано и портировано, а на микроэлектронике?

                      Да и не такой он уж и глючный. Там есть ряд заморочек но это один раз вкурить и все.

                    5. Для крутых серий контроллеров наверняка все есть, но я пока ими не заморачивался. (Есть поддержка для PIC17,18,24,30,33!) Для моих нужд за глаза PIC16 (пока до 877), из ATMEL — до Мега 32,64,128. Потребуется круче — освою, пока же зря забивать башку — без нужды. (К тому времени, когда понадобятся, возможно, появятся более привлекательные решения). А при моих потребностях использовать GCC — да уж лучше я на асме буду писать…

    1. видел её бумажную, но как на зло в кармане не хватило рублей 50, чтобы её взять (
      не скажу, что там для меня были СверхОткровения, но кое-какие вещи полезны, плюс я постоянно забываю разные нюансы, если долго не програмлю.

      1. Мне там дико понравилась процедура задержки на три регистра… Ы! И как я сам до такого не допер. На sbci командах.

  2. Попробовал скачать, посмотрел рекламу, подождал минуту, ткнул ссылку, — получил ERROR… На какой-то другой книжке раньше тоже такое было. Может, лучше использовать какой-нибудь нормальный файлообменник? А то пропадает желание качать эти книжки. Да, в общем то, почти во всех — одно и то же, в основном пересказ фирменных даташитов, часто с ошибками. Уже столько книжек по AVR накопилось, читать некогда. Читай — не читай, а пока простенькую платку не спаяешь да вживую с портами, таймерами, UART, ADC, ШИМ не поработаешь, толку не будет. Неделя — другая практики даст больше знаний и опыта, чем годы чтения (и изучения С).

  3. Полистал электронный вид и побежал заказывать себе такую. Действительно все подробно и по порядку излагается. Евстифеева уже излазил от корки до корки, но сухой даташит нужно все-таки чем-то разбавлять. (Кстати даже в 4-м издании Евстифеева есть ошибки — не стоит полностью на него полагаться, лучше проверить)

  4. Действительно… в книге присутствуют некоторые «баги» типа, несуществующей команды SUCI Наверное, всем будет ясно, что это автор имел ввиду мнемокод CBCI =)…. а так, это зачотная книга. Нашел в ней ответы на кучу вопросов!

  5. Если у кого с летитбитом проблемы, вот тот же файл на Рапиде:
    Качать!

    xx на tt не забудьте поменять :-) (Не знаю я как тут культурно ссылки вставлять…) Не парься, я подправлю. DI

        1. Без проблем. Сначала скачался маленький (несколько кб) файл. Меняешь ему тип .RAR на .HTM и запускаешь. На страничке две больших круглых кнопки — Free и Premium. Жмешь Free, идет отсчет времени сек 30-40, и появляется большая круглая кнопка DOWNLOAD. Жмешь ее, и сохраняешь файл как обычно. Класть на Рапиду еще проще. Правда, без Премиума сейчас дают скачать только 10 раз, или 90 дней после последней скачки, потом ссылка удаляется.

          1. Вот у меня после отсчета почему то не дает ссылку, а выбрасывает опять на выбор фрии или премиум. И так кругами.

            1. Такого вроде не было. Иногда выдает, что лимит превышен и надо подождать. Если дома и лень ждать (надо, например, качнуть много чего подряд) — отключаюсь и снова подключаюсь к Интернет. Айпишник меняется, можно качать без паузы. На работе хуже — у всех через Прокси — сервер — один IP, часто выдает, что с вашего уже качают. Приходится ждать. Но сама скачка — без проблем, и быстро.

        2. На этот случай есть чудная програмулька Universal Share Downloader (USDownloader)
          Очень помогает при сливе со всяких файлообменников. Автоматом проходит места, где требуются действия юзера типа ввести код и т.п. Можно накидать ссылок и идди спать.
          Оф. сайт http://www.dimonius.ru/dusd.php
          И на Ру-борде по ней всё разжевано.

  6. Тут спрашивали про Си… Валяется в инете такая:
    ——-
    Название: CodeVisionAVR. Пособие для начинающих
    Автор: М. Б. Лебедев
    Издательство: Додэка XXI
    Год: 2008
    Страниц: 592
    Формат: djvu-rar+% восст.
    Размер: 62 Мб
    ISBN: 978-5-94120-192-1
    Качество: Отличное
    Серия или Выпуск: Программируемые системы
    ————
    Кто-нить листал?
    Уж больно здоровый файл.. 62метра в djvu !! И ещё есть к ней диск 32метра! Чего там напихано-то?? Рекламные картинки что-ли?

  7. Не, ну на С надо переходить, это однозначно. Иначе это тупик. Я в свое время освоил Пики на асме. Что толку, как освоил, так и забыл, ибо на уровне ассемблера архитектура системы очень специфична, и подробное его знание в голове является мусором. Это дело компилятора — сгенерить оптимальный код для данной архитектуры. А мое дело правильно дергать за биты в портах, и правильно все заалгоритмизировать, что к ассемблеру почти не имеет отношения.

    Понадобится перейти на ARM, начинать штудировать его ассемблер с нуля?

    Универсальный инструмент программирования должен быть в голове один — С. Тогда особенности архитектуры сводятся только к описаниям периферийных устройств, их номерам портов и адресам памяти.

    1. > Тогда особенности архитектуры сводятся только к описаниям периферийных устройств, их номерам портов и адресам памяти.

      Ну, освоив вышеозвученное, можно считать что вы уже знаете асм на 80-90% (для данного камня)…

    1. Гхм. Начинающий != Тупой. Если понятно что делает команда, а команды такой нет, значит опечатка и надо найти ту команду которая делает эту же операцию. Не вижу проблемы.

      Но вот сама комада suci это странно. Откуда она ваще? Из ранних АВР? Дак нету там. Выдумка автора? Хм, порывшись я нашел ее упоминание в другом источнике — на немецком форуме. Причем в одном контексте используется и suci и cbci

  8. там выше говорилось, что должна появится и «занимательная микроэлектроника» этого автора, так появится она или нет? я чето в инете ее нигде найти не могу(

  9. Кто подскажет, где можно найти в электронном виде «Занимательная микроэлектроника — Юpий Peвич» 2006 или лутше 2007 ( т.к. 2005 уже есть), мои поиски не дали результатов.
    DI HALT у тебя какой год книги??

  10. только что начал изучать AVR по ревичу и тут же несколько ошыбок в книге. помню только последнюю. автор халявщик или же я не кибермозг)ггг

  11. вот только что скачал оттудова «Занимательная электроника» 2007го года издания!
    Качество очень даже неплохое!

  12. to Ageofenigma

    а выложить можеш, пожайлуйста, на файлообменнике “Занимательную электронику” 2007го, а то у них чето поиск глючить и эту книгу не находит :(

  13. «»A-10 13 Фев 2009 2:32

    Вот как раз позавчера заказал себе сию книгу, и еще одну (”занимательная микроэлектроника”) этого же автора»»

    Аналогично =)

  14. Честно говоря, после вдумчивого прочтения (с практикой) курса AVR на этом сайте, книгу буквально пролистываю. Уже полкниги позади, а нового — только умножение/деление узнал. Все остальное мы уже проходили :)

Добавить комментарий

Ваш e-mail не будет опубликован.

Перед отправкой формы:
Human test by Not Captcha