Юрий Ревич - Занимательная микроэлектроника

Здесь есть возможность читать онлайн «Юрий Ревич - Занимательная микроэлектроника» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 2007, ISBN: 2007, Издательство: БХВ-Петербург, Жанр: sci_radio, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Занимательная микроэлектроника: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Занимательная микроэлектроника»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Книга на практических примерах рассказывает о том как проектировать, отлаживать и изготавливать современные электронные устройства в домашних условиях. Теоретические основы, физические принципы работы электронных схем и различных типов радиоэлектронных компонентов иллюстрируются практическими примерами в виде законченных радиолюбительских конструкций и дополняются советами по технологии изготовления любительской аппаратуры. На доступном уровне излагаются теоретические основы цифровой техники — математическая логика и различные системы счисления. Вторая часть книги полностью посвящена программированию микроконтроллеров, как основы современной электроники. Особое внимание уделяется обмену данными микроэлектронных устройств с персональным компьютером, приводятся примеры программ на Delphi.
Для широкого круга радиолюбителей

Занимательная микроэлектроника — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Занимательная микроэлектроника», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Противоположная по логике процедура записывается, как sbrc(Skip if Bit in Register is Cleared — «пропустить, если бит в регистре очищен», т. е. равен нулю). Наконец, есть еще пара аналогичных команд — sbisи sbic, которые применяются, когда нужно отследить состояние бита в регистре ввода/вывода (I/O), а не в регистре общего назначения. Все эти команды мы будем активно применять в дальнейшем.

Наконец, в самой обширной группе команд ветвления имена начинаются с букв Ьг(от слова branch — «ветка»). Это команды условного перехода, которые считаются одними из самых главных в любой системе программирования, т. к. позволяют организовывать циклы — базовое понятие, программистских наук. По смыслу все эти команды сводятся к банальному if… then(«если… то»). Мы будем пользоваться лишь частью этих команд, потому что они во многом взаимозаменяемы, и здесь подробно разберем только одну пару команд. Смысл остальных вам будет понятен по ходу дела.

Это наиболее часто употребляемая пара brne(Branch if Not Equal, «перейти, если не равно») и breq(Branch if Equal, «перейти, если равно»). Уже из смысла этих команд понятно, как они пишутся: после команды следует метка, на которую нужно перейти. Вопрос только такой: откуда здесь берется собственно условие? Для этого все команды ветвления обязательно употребляют в паре с одной из команд, устанавливающих флаг нуля Z в регистре флагов SREG. Обычно (и это наиболее наглядно) для этой цели служит команда ср (от compare— «сравнить»), которая сравнивает регистры, или cpi(«сравнить с непосредственным значением»). Например, вот так будет вы глядеть простейший цикл, в котором переменная temp последовательно принимает значения от 1 до 10:

clr temp ;обнулить temp

back_loop:

inc temp ;увеличиваем temp на 1

<���что-то делаем, необязательно с помощью temp >

cpi temp,10

brne back_loop

Обратите внимание: если надо, чтобы tempначинала с нулевого значения, то фрагмент «что-то делаем» следует вставить до команды inc, но тогда последним рабочим значением temp в цикле будет 9, а не 10, а после выхода из процедуры — все равно 10.

Другой нюанс заключается в том, что удобная команда сравнения с непосредственным числом cpi работает только для регистров с номерами от 16 до 31 (как и многие другие команды работы с непосредственными значениями, например, ldi). По этой причине рабочие переменные ( temp, счетчики) всегда желательно выбирать из этой половины регистрового файла (в примерах в этой книге, как и в «аппнотах», кстати, обычно temp— это r16, хотя и не всегда). Положение осложняется тем, что регистры из старшей половины наиболее дефицитны: последние шесть из них объединены в пары для работы с памятью (см. далее) и некоторых других операций, r24и r25задействованы в команде adiwи т. п. Если переменных не хватает, то регистр из первой половины регистрового файла (допустим, это r15) в аналогичном цикле приходится использовать с парой команд:

ldi temp,10

ср r15,temp

Иногда проще построить декрементный цикл, в котором переменная уменьшается от заданного значения до нуля:

ldi temp,10 ;загружаем 10 в temp

back_loop:

dec temp ;уменьшаем temp на 1

<���что-то делаем с помощью temp >

brne back_loop

Как видите, здесь вообще ничего сравнивать не требуется, потому что команда decпри достижении нуля сама установит флаг Z (то же относится к команде tst temp, которая эквивалентна команде cpi temp, 0). И если даже выбрать регистр из первой половины, то лишняя команда понадобится не в каждом цикле, а только один раз для загрузки предварительного значения:

ldi temp,10 ;загружаем 10 в temp

mov r15,temp ;загружаем 10 в r15 и далее его используем

;в команде dec

Один важный нюанс в работе всех команд перехода заключается в том, что они могут занимать непредсказуемое количество циклов (1 или 2), в зависимости от того, выполняется условие или нет. В AVR реализован конвейер команд, который «тупо» полагает, что следующей будет выполняться команда сразу после команды перехода. Естественно, если ветвление необходимо (в большинстве случаев), конвейер останавливается на один лишний такт, в течение которого происходит выборка адреса перехода. Однако этот недостаток с лихвой компенсируется тем, что за счет конвейера почти все остальные команды выполняются за один такт— недостижимая мечта для многих других типов контроллеров (например, в популярном до сих пор семействе 8051, выпущенном еще в начале 80-х, команда выполняется как минимум за 12 тактов, хотя некоторые современные клоны этого семейства могут работать и быстрее).

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Занимательная микроэлектроника»

Представляем Вашему вниманию похожие книги на «Занимательная микроэлектроника» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Занимательная микроэлектроника»

Обсуждение, отзывы о книге «Занимательная микроэлектроника» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x