Список ресурсов для изучения Ассемблера / Хабр
fader44Время на прочтение 4 мин
Количество просмотров422K
Assembler *
Доброго времени суток!
Некоторым программистам иногда приходит в голову мысль «а не изучить ли мне ассемблер?». Ведь на нем пишут самые (с некоторыми оговорками) маленькие и быстрые программы, да и охота ощутить вкус низкоуровневого программирования берет свое. Ну и для общего развития не повредит.
Мысль эта не обошла стороной и меня. Вдохновившись историей одного байта, я ринулся в бой…
… но оказалось, что найти материал по интересующей теме не так просто, как хотелось бы. Посему решено было создать на хабре пополняющийся пост-индекс статей/книг/мануалов/etc. об этом, несомненно, великом языке.
Под катом находится, собственно, список с краткими комментариями, разбитый по категориям.
UPD
В список начали добавляться ресурсы по программингу микроконтроллеров.
Для начала
- ru.wikipedia.org/wiki/Ассемблер — ассемблер (не тоже самое, что «язык ассемблера», хотя эти понятия почти слились) в википедии
- ru.wikipedia.org/wiki/Язык_ассемблера — язык ассемблера там же
- wasm.ru/article.php?article=onebyte — история одного байта
- bitfry.narod.ru/00.htm — дневники чайника, довольно простые и интересные уроки для начинающих
- www.scribd.com/doc/267365/A-Beginners-Course-In-Assembly-Language — книга об основах ассемблера на английском языке
- Programming from the Ground Up — несложная книга на английском языке. Рекомендация megabrain
- www.osinavi.ru/asm — учебник по Ассемблеру «для квалифицированных чайников»
- habrahabr.ru/blogs/asm — блог, в котором, надеюсь, будет много статей об ассемблере
Ресурсы
- wasm.ru — наверное, самый крупный русскоязычный ресурс по Ассемблеру. Огромное количество статей, живой форум, новости
- cracklab.ru — огромный ресурс по исследованию/крэкингу программ
- www.insidepro.com/rus/doc.shtml — огромнейшее собрание статей Криса Касперски
- programmersclub.ru/assembler — курс asm&&win32
- www.proklondike.com/books/assembler.html — мини-библиотека книг по ассемблеру
- wiki.conus.info — большое количество заметок о reverse engineering на русском языке для начинающих и тех кто хочет научиться понимать создаваемый C/C++ компиляторами код
- wasm.ru/publist.php?list=1 — Уроки Iczelion’а переведенные
- www.nf-team.org/drmad/zf/zf1/zf1_006.htm — пособие начинающей технокрысы или как писать вирусы
Книги
Для книг я выкладываю только названия, без ссылок (или с ссылкой на интернет-магазин), так как я не знаю отношения некоторых людей к скачиванию чьей-то интеллектуальной собственности. Кому надо — тот найдет, где скачать.
- kpnc.opennet.ru — архив книг Криса Касперски
- Галисеев Г. В. Ассемблер для Win 32. Самоучитель
- Зубков С. В. Ассемблер для DOS, Windows и UNIX
- Кип Ирвин. Язык ассемблера для процессоров Intel = Assembly Language for Intel-Based Computers
- Калашников О. А. Ассемблер? Это просто! Учимся программировать
- Крис Касперски. Искусство дизассемблирования
- Владислав Пирогов. Ассемблер для Windows
- Владислав Пирогов. Ассемблер и дизассемблирование
- Ричард Саймон. Microsoft Windows API Справочник системного программиста
- Фрунзе А. В. Микроконтроллеры? Это же просто!
- Юров В., Хорошенко С. Assembler: учебный курс
- Абель — Ассемблер. Язык и программирование для IBM PC
- Эндрю Таненбаум — «Архитектура компьютера» — рекомендация lefty
- Чарльз Петцольд — «Код» — рекомендация lefty
- Assembly Language Step-by-step: Programming with DOS and Linux
- Юрий Ревич «Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера» — рекомендация Ryav
- Нортон П. , Соухе Д. «Язык ассемблера для IBM PC» — рекомендация maotm
- Григорьев В. Л. «Микропроцессор i486. Архитектура и программирование.» — рекомендация Ghost_nsk
- Нортон П., Уилтон Р. «IBM PC и PS/2.руководство по программированию» — описана работа с прерываниями и простыми железками, рекомендация Ghost_nsk
Англоязычные ресурсы
- asm.sourceforge.net — Ассемблер под Linux
- orangejuiceliberationfront.com/intel-assembler-on-mac-os-x — Ассемблер под Mac
- blogs.conus.info — Различные заметки о reverse engineering, security research, Oracle RDBMS internals, и т.д…
- msdn.microsoft.com — огромная база знаний по технологиям Windows от Microsoft
- www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html — мануалы по Intel’овским инструкциям
- developer.amd.com/documentation/guides/Pages/default.aspx#manuals — аналогичные доки для AMD
- win32assembly. online.fr — Уроки Iczelion’а, домашняя страница
- www.gnu.org/s/gdb/documentation — GDB Manual
- www.securitytube.net/groups?operation=view&groupId=6 — видеокурс Windows Assembly Language Megaprimer
- www.securitytube.net/groups?operation=view&groupId=5 — видеокурс Assembly Language Megaprimer for Linux
- alexfru.narod.ru/emiscdocs.html — подборка доков из теплых ламповых времен
- www.agner.org/optimize — Software optimization resources
- x86asm.net — x86-x64 manuals
- www.ctyme.com/rbrown.htm — Ralf Brown Interrupt List with over 9000 linked pages and 350 indexes making the process of searching much easier
Инструменты
- www.masm32.com — MASM32 SDK
- flatassembler.net — flat assembler (FASM)
- www.nasm.us — The Netwide Assembler (NASM)
- www.ollydbg.de — OllyDbg, отладчик для Windows
- www.hex-rays.com/products/ida/index. shtml — IDA — интерактивный дизассемблер и отладчик
www.idapro.ru — русская страница IDA- research.microsoft.com/en-us/projects/detours — Библиотека от Microsoft Research для инъекции Dll и перехвата управления на себя
- conus.info/gt — отладчик командной строки для выполнения простых отладочных задач
Программинг микроконтроллеров
- habrahabr.ru/blogs/controllers — тематический блог на хабре, с количеством постов несколько большим, чем в блоге по ассемблеру
- programmators.ru — сайт по контроллерам семейства PIC
- myrobot.ru/stepbystep — сайт роботостроения, по ссылке статьи о микроконтроллерах AVR
- www.123avr.com/07.htm — МК AVR
- easyelectronics.ru/category/avr-uchebnyj-kurs — AVR
Прочее
- zx.pk.ru — форум ZX Spectrum
- bbs.pediy.com — форум по reverse engineering на китайском языке (спасибо KollinZ). Чтобы можно было понять о чем речь, можно воспользоваться кнопкой «перевести» в хроме (спасибо за совет mexanism)
- old-dos. ru — крупнейший в Рунете архив старых программ
Заключение
Надеюсь эта статья будет полезна как новичкам, так и тем, кто ищет новых знаний. Если вы знаете какие-либо интересные ресурсы по теме, смело пишите в комментарии, пост создавался, чтобы пополняться.
P.S.: И, да, я очень надеюсь не увидеть в комментариях холивар Assembler vs. %anything% (или «стоит ли изучать ассемблер?»).
Теги:
- assembler
- терминатор
- tasm
- fasm
- wasm
- masm
- ollydbg
- судный день
- книги
- мануалы
- ассемблер
- detours
- микроконтроллеры
- PIC
- AVR
Хабы:
- Assembler
Всего голосов 135: ↑130 и ↓5 +125
Комментарии 46
Антон Самойлов @fader44
Пользователь
Самоучитель Ассемблер | Издательство БХВ
Нет в наличии
Авдюхин А. , Жуков А.
Артикул | 313 |
ISBN | 5-94157-133-X |
Количество страниц | 448 |
Формат издания | 170 x 240 мм |
Печать | Черно-белая |
Серия | Самоучитель |
161 ₽
# Intel# MASM# ассемблер
- Описание
- Детали
- Отзывы (0)
Описание
Книга является руководством по программированию на ассемблере для микропроцессорных систем на базе 180×86 и посвящена практическому применению этого языка на примере и с использованием ассемблера x86. Рассматриваются дополнительные возможности языков ассемблера: макрокоманды и связь с языками высокого уровня. Приводится обзор стилей языков ассемблера для разных вычислительных систем. В качестве иллюстрации применения ассемблеров рассмотрены различные вопросы, связанные с многозадачностью, – обработка прерываний и резидентные программы. Изложенный материал снабжен примерами, контрольными вопросами и заданиями к практическим работам.
Структура изложения
Книга состоит из четырех частей.
Часть I, с изложением базовых средств и принципов acceмблepa, включает в себя 10 глав. В них рассматриваются: определение данных, имен и типов, методы адресации система команд i80x86. программирование циклов. Сегментная модель памяти и exe-пporpaммы.
Часть II, с изложением дополнительных возможностей языка ассемблера, состоит из пяти глав (11 – 15). В них рассмотрены: макрокоманды и средства условной трансляции, структурное программирование на ассемблере, интерфейс с языком С. обработка данных ВСD-формата. форматы данных и система команд арифметического сопроцессора i80x87.
В части III (главы 16-18) изучаются: основы управления внешними устройствами, обработка прерываний и исключений, резидентные пporpaммы.
Часть IV содержит дополнительный rvtатериал и состоит из 11 приложений.
В приложении 1 приведены отдельные сведения из базового курса информатики, помогаюшие в изучении rvtатериала первой главы.
Приложения 2 и 3 содержат сведения, имеюшие отношение к вводу/выводу символьной информации.
В приложении 4 дан краткий перечень функций операционной системы, используемых в примерах.
В приложении 5 рассмотрены настройки запуска ассемблера а86.
Приложение 6 представляет собой краткий справочник по операторам ассемблера и системе команд i80x86.
В приложение 7 рассмотрены вопросы совместимости с традиционным и ассемблерами.
Приложение 8 посвящено организации аппаратных прерываний от арифметического сопроцессора i80x87.
В приложении 9 содержатся ответы на вопросы из первой части, выборочно.
В приложении 10 приведен перечень ошибок а86 v4.05. обнаруженных до апреля 2002 г.
К книге прилагается дискета с пакетом а86 v4.05 (2000 г.) и исходными текстами примеров. Описание дискеты дано в приложении 11.
Детали
Артикул | 313 |
---|---|
ISBN | 5-94157-133-X |
Количество страниц | 448 |
Серия | Самоучитель |
Переплет | Мягкая обложка |
Печать | Черно-белая |
Год | 2002 |
Габариты, мм | 240 × 170 × 11 |
Вес, кг | 0.269 |
Дополнительные файлы скачать: Зеркало1Дополнительные файлы скачать (Chrome): Зеркало2
- ✓ Новинки на 2 недели раньше магазинов
- ✓ Цены от издательства ниже до 30%
- ✓ Акции и скидки только для подписчиков
- ✓ Важные новости БХВ
ПОЛЕЗНАЯ РАССЫЛКА КНИЖНЫХ НОВОСТЕЙ
Подписываясь на рассылку, вы соглашаетесь с политикой конфиденциальности и обработкой своих персональных данных.
Рекомендуем также
- Калашников Олег Александрович
Ассемблер – это просто. Учимся программировать. 2-е изд
656 ₽
558 ₽ - Пирогов Владислав Юрьевич
Ассемблер для Windows 4-е изд.
573 ₽
487 ₽ - Касперски Крис, Кокорева Ольга Игоревна
Искусство дизассемблирования
1385 ₽
1177 ₽ - Брюс Смит
Ассемблер для Raspberry Pi. Практическое руководство. 4-е издание
1031 ₽
876 ₽
Обзор AVR и их оборудование | |||
---|---|---|---|
Тренажер для AVR код ассемблера | |||
Курсы сборщика для начинающих в разных вариантах | по типам инструкций аппаратное и программное обеспечение для фриков высокого уровня | ||
Что такое AVR? Для абсолютных новичков | |||
Обучение на основе приложений | |||
59 180 загрузок файлов исходного кода на ассемблере в 2022 году (162 в день) | |||
Пять самых популярных приложений:
(Отсортировано по популярности) Генерация случайных чисел Частотомер ЖК-дисплей Драйвер шагового двигателя ATtiny13 Генератор прямоугольников | Пять последних добавленных приложений
(Приложения по категориям) Термометр PT100 Термометры с последовательным инфракрасным портом Инфракрасные передатчики с переменной частотой Термометр с ATtiny24 Кристаллический тон-генератор с ATtiny25 | ||
Использование внутреннего оборудования контроллера компоненты в исходных кодах ассемблера на этом веб-сайте | Программные алгоритмы на ассемблере исходники на этом сайте | ||
Обучающий ассемблер | |||
Введение для начинающих на языке ассемблера AVR. Также доступен в виде полного PDF-документа для печати всего курса (Скачать, 1,1 МБ) | Курс для начинающих из 14 лекций от простого к сложному с помощью ATtiny13 и ATtiny24, аппаратного и программного обеспечения, все на макетной плате, также доступно в один полный PDF-документ | ||
Стартовый курс для новичков. аппаратное обеспечение AVR (в основном ATtiny24) и программирование их программного обеспечения на ассемблере в 11 лекциях использует симулятор для визуализации эффектов | Стартовый курс для начинающих использование симулятора для изучения действия инструкций ассемблера, также доступен в виде PDF-документа | ||
Введение в двоичные числа и двоичную математику с практическими примерами кода для сложения, вычитания, умножения и деления двоичных цифры любого размера | Четыре простых примера программирования с расширенными комментариями в начале шаги практического введения в программирование на ассемблере: Смысл и требования, Простые примеры программирования | ||
Программное обеспечение-ноу-хау, специальный ассемблер команды: LPM, переходы в стек, макросы | Все о циклах синхронизации от микросекунд от миллисекунд и секунд до часов, дней и месяцев: все, что вам нужно, это петля, или две, или три. .. | ||
Все, что вам нужно знать о прерываниях для новички, о векторах целых чисел, источниках целых чисел, о выполнении целых чисел и о том, как управляют целыми числами весь дизайн программы, целый новый мир, чтобы узнать о | У тебя есть, ты им пользуешься, чувствуешь пристрастие к нему? Если вы хотите избавиться от наркотика Arduino, вам помогут избавиться от этого здесь. | ||
Инструменты для программирования на ассемблере | |||
Ассемблер командной строки с расширенной проверкой ошибок и комментированием, бесплатно для скачивания | Для удобной работы ассемблера командной строки: вызов окна включая редактирование исходных и включаемых файлов, просмотр списка файлов, поиск ошибок и редактирование ошибочных строк и т.д., бесплатно скачать здесь | ||
Как собрать файлы внешнего исходного кода Как для преобразования исходного кода из одного в другой введите | Программное обеспечение Windows для создания ассемблера файлы исходного кода со стандартной структурой | ||
Расширенное программирование на ассемблере | |||
Двоичное умножение, деление, преобразование числовых форматов и фиксированных десятичных знаков в деталях, аппаратное умножение | Программирование и тестирование аппаратной части STK200-Board: EEPROM, внешнее ОЗУ, LCD-дисплей, SIO-интерфейс | ||
Приложения на ассемблере | |||
Небольшие приложения: ИК-устройства дистанционного управления, матрица 8 на 8 светодиодов, синхронизированные часы DCF77, декодер PCM-to-PWG, генератор частоты с клеммным управлением, генератор цифровых сигналов с регулировкой частоты/длительности импульса и ЖК-дисплеем, таймер для яиц в подарок, контроллер/драйвер шагового двигателя, игральная кость, секвенсор светодиодов и регулятор интенсивности | Соединение двухстрочного ЖК-дисплея с четырехстрочным подключение к плате программирования STK500 с базовыми подпрограммами для управление ЖК-дисплеем и маленькое приложение часов | ||
Преобразование аналогового напряжения в цифровое с использованием платы STK500, встроенного аналогового компаратора и таймера/счетчика 1 как генератор ширины импульса | Подключение клавиатуры к AVR и обнаружение с использованием портовых соединений или с матрицей резисторов и AD преобразователь. Улучшенные версии энкодера резисторной матрицы и графического там же представлены программные инструменты. | ||
Преобразование цифрового значения в аналоговое напряжение с помощью буферизованная сеть R/2R, включая генерация волн, таких как пилообразные, треугольные, синусоидальные формы и небольшие приложение тон плеер. Со страницами расчета фильтров R/2R и RC и программные средства. | Загрузчик перезаряжаемых батарей с использованием ATmega16 | ||
Заархивированная веб-страница для чтения в автономном режиме | Вся веб-страница для скачивания. После скачивания разархивируйте этот файл в отдельную директорию, сохраняя пути. | ||
Статистика популярности этой страницы | Статистика посещения веб-сайтов, исходный код на этих страницах и использовать частоты для инструкций и директив в исходном коде ассемблера |
Ассемблер WJEC — Учебные пособия — PICAXE
Перед использованием этих учебных пособий убедитесь, что вы прочитали страницу «Начало работы», чтобы знать, как моделировать и загружать программу на экране.
WJEC / EDUQAS A Level Assembler — обзор
WJEC / EDUQAS A Level Assembler — начало работы
Аппаратное обеспечение
Все учебные пособия можно смоделировать на экране или загрузить в реальную микросхему PICAXE-18M2 на платах AXE056 или AXE091 (или на самодельной схеме на макетной плате).
При использовании проектной платы AXE056 для запуска PIC16F88 (запрограммированного с помощью обычного программатора PIC) вместо более простой системы PICAXE-18M2 используйте этот шаблон ассемблера.
Урок 1. Включение и выключение светодиодной вспышки
Памятку по мнемотехнике для учащихся можно скачать здесь.
Введите и смоделируйте/загрузите следующий пример, чтобы мигать светодиодом на контакте B.1
init:
clrf PORTB ; очистить выходные защелки PORTB
bsf STATUS,RP0 ; страница памяти 1
movlw b'11111111' ; установить контакты порта A для ввода
movwf TRISA ; записать в регистр TRIS
movlw b'00000000' ; установить контакты порта B для вывода
movwf TRISB ; запись в регистр TRIS
bcf STATUS,RP0 ; страница памяти 0
main:
bsf PORTB,1 ; вывод B.1 высокий
call call wait1000ms ; задержка 1000 миллисекунд
bcf PORTB,1 ; выход B.1 низкий
вызов ожидание1000 мс ; задержка 1000 миллисекунд
goto main
Совет – чтобы проверить, нет ли опечаток, нажмите кнопку «Проверка синтаксиса». -процессор выключен (здесь шаг 5 установки).
Ключевые точки:
- Все контакты являются входными после сброса чипа. Таким образом, начальное значение TRISB равно b’11111111′.
- Поэтому для любого вывода, который будет использоваться в качестве выхода, бит TRIS должен быть установлен в 0 во время инициализации. Помните, что 1 выглядит как I=Input, 0 выглядит как O=Output.
- Перед преобразованием в вывод бит PORTB должен быть очищен, чтобы вывод всегда запускался в известном состоянии.
- Регистры TRISA и TRISB находятся на странице памяти регистров 1. Все остальные регистры, используемые в этих руководствах, находятся на странице 0. Используйте bsf/bcf STATUS,RP0 для навигации по страницам.
- Используйте предопределенную процедуру «wait1000ms» для создания временной задержки.
- Метка, такая как main, требует двоеточия при определении позиции программы, но не использует двоеточие в команде (такой как goto, call и т. д.)
- Метки не могут быть командами PICAXE, такими как ‘loop’, поэтому вместо этого используйте уникальные метки, такие как ‘loop1’, ‘loop2’ и т. д.
Урок 2. Мигание 3 светодиодов вкл. и выкл.0211
инициализация:
clrf PORTB ; очистить выходные защелки PORTB
bsf STATUS,RP0 ; страница памяти 1
movlw b'11111111' ; установить контакты порта A для ввода
movwf TRISA ; записать в регистр TRIS
movlw b'00000000' ; установить контакты порта B для вывода
movwf TRISB ; запись в регистр TRIS
bcf STATUS,RP0 ; страница памяти 0
main:
movlw b'00000010' ; установить для контакта B.1 высокий уровень, а для остальных — низкий
movwf PORTB ; запись в регистр PORT
вызов , ожидание 1000 мс ; задержка 1000 миллисекунд
movlw b'00000101' ; установить на выводе B.1 низкий уровень, а на других — высокий
movwf PORTB ; запись в регистр PORT
call wait1000ms ; задержка 1000 миллисекунд
goto main
Ключевые точки:
- Когда PORT записывается с использованием movwf, все выходные контакты в порту записываются одновременно.
Урок 3. Светодиодный индикатор мигает десять раз, затем останавливается
Введите и смоделируйте/загрузите следующий пример, чтобы светодиод на контакте B.1 мигал десять раз
init:
clrf PORTB ; очистить выходные защелки PORTB
bsf STATUS,RP0 ; страница памяти 1
movlw b'11111111' ; установить контакты порта A для ввода
movwf TRISA ; записать в регистр TRIS
movlw b'00000000' ; установить контакты порта B для вывода
movwf TRISB ; запись в регистр TRIS
bcf STATUS,RP0 ; страница памяти 0
main:
movlw d'10' ; переместить десятичное число 10 в рабочий регистр
movwf B1 ; запись в регистр B1
loop1:
bsf PORTB,1 ; вывод B.1 высокий
call call wait100ms ; задержка 100 миллисекунд
bcf PORTB,1 ; выход B.1 низкий
call call wait100ms ; задержка 100 миллисекунд
decfsz B1,F ; уменьшить B1 и пропустить, если ноль
goto loop1 ; не ноль, поэтому вернитесь назад
loop2:
goto loop2
Ключевые точки:
- decfsz уменьшает указанное значение регистра и пропускает, если теперь оно равно нулю.
- decfsz в этой ситуации необходимо использовать цель F (F = результат в том же файле регистров, W = результат в рабочем регистре)
- Бесконечный цикл в конце программы означает, что для повторного запуска программы требуется сброс питания.
- Если включен сторожевой таймер, в цикле 2 требуется команда clrwdt для предотвращения тайм-аута.
Урок 4. Заставьте светодиод следовать за входным переключателем
Введите и смоделируйте/загрузите следующий пример, чтобы заставить светодиод на контакте B.1 следовать за нажимным переключателем A.7. Убедитесь, что переключатель имеет подтягивающий резистор 10 кОм, чтобы он не плавал, когда его не нажимали. Чтобы имитировать ввод, щелкните левой кнопкой мыши на выводе A.7 на панели имитации.
init:
clrf PORTB ; очистить выходные защелки PORTB
bsf STATUS,RP0 ; страница памяти 1
movlw b'11111111' ; установить контакты порта A для ввода
movwf TRISA ; записать в регистр TRIS
movlw b'00000000' ; установить контакты порта B для вывода
movwf TRISB ; запись в регистр TRIS
bcf STATUS,RP0 ; страница памяти 0
main:
btfsc PORTA,7 ; пропустить, если A. 7 ясно
bsf PORTB,1 ; вывод B.1 высокий
btfss PORTA,7 ; пропустить, если установлен A.7
bcf PORTB,1 ; выход B.1 низкий
goto main
Ключевые точки:
- btfsc / btfss пропустить следующую инструкцию, если указанный бит сброшен (=0) / установлен (=1)
Урок 5. Мигание светодиода после 5 нажатий переключателя
Введите и смоделируйте/загрузите следующий пример, чтобы мигать светодиодом на контакте B.1 после нажатия переключателя A.7 5 раз. Убедитесь, что переключатель имеет подтягивающий резистор 10 кОм, чтобы он не плавал, когда его не нажимали.
init:
clrf PORTB ; снять защелки выхода PORTB
bsf СТАТУС,RP0 ; страница памяти 1
movlw b'11111111' ; установить контакты порта A для ввода
movwf TRISA ; записать в регистр TRIS
movlw b'00000000' ; установить контакты порта B для вывода
movwf TRISB ; запись в регистр TRIS
bcf STATUS,RP0 ; страница памяти 0
main:
movlw d’5′ ; переместить десятичную цифру 5 в рабочий регистр
movwf B1 ; запись в регистр B1
loop1:
call wait10ms ; задержка 10 миллисекунд для устранения дребезга
btfss PORTA,7 ; тестовый переключатель
goto loop1 ; не высокий, поэтому повторите цикл
loop2:
call wait10ms ; задержка 10 миллисекунд для устранения дребезга
btfsc PORTA,7 ; тестовый переключатель снова отключен
goto loop2 ; еще не выключено, поэтому снова зациклиться
decfsz B1,F ; уменьшить B1 и пропустить, если ноль
goto loop1 ; не ноль, но еще не вернуться назад
bsf PORTB,1 ; выход B. 1 высокий
вызов , ожидание 1000 мс ; задержка 1000 миллисекунд
bcf PORTB,1 ; выход B.1 низкий
goto main ;
Ключевые точки:
- Для преодоления дребезга переключателя используется небольшая задержка перед повторным тестированием выключения
- При каждом нажатии переключателя регистр B1 уменьшается на единицу
- decfsz уменьшает указанное значение регистра и пропускает, если результат теперь равен нулю.
Урок 6. Использование прерывания
Введите и смоделируйте/загрузите следующий пример, чтобы каждую секунду мигать светодиод на контакте B.1. Прерывание на A.7 (переключатель), переходящее в высокий уровень, активирует вызов подпроцедуры ISR, как только переключатель нажимается. Во время прерывания светодиод на B.2 будет быстро мигать. Убедитесь, что переключатель A.7 имеет подтягивающий резистор 10 кОм, чтобы он не плавал, когда его не нажимали.
init:
clrf PORTB ; снять защелки выхода PORTB
bsf СТАТУС,RP0 ; страница памяти 1
movlw b'11111111' ; установить контакты порта A для ввода
movwf TRISA ; запись в регистр TRIS
movlw b'00000001' ; B.0 в качестве входа, другие выводы порта B для вывода
movwf TRISB ; запись в регистр TRIS
bcf STATUS,RP0 ; страница памяти 0
main:
bsf INTCON,INT0IE ; установить разрешение внешнего прерывания
bsf INTCON,GIE ; включить все прерывания
loop1:
bsf PORTB,1 ; вывод B.1 высокий
call wait1000ms ; задержка 1000 миллисекунд
bcf PORTB,1 ; вывод B.1 низкий
call wait1000ms ; задержка 1000 миллисекунд
goto loop1 ; бесконечный цикл
W_SAVE EQU B20
прерывание:
movwf W_SAVE ; сохранить рабочий регистр в регистр, чтобы можно было восстановить позже
btfss INTCON,INT0IF ; проверьте правильность прерывания
Retfie ; нет, поэтому вернитесь и снова включите GIE
loop2:
bsf PORTB,2 ; вывод B. 2 высокий
call wait100ms ; задержка 100 миллисекунд
bcf PORTB,2 ; выход B.2 низкий
call wait100ms ; задержка 100 миллисекунд
btfsc PORTA,7 ; NB- измените на PORTB,0 для 16F88
goto loop2 ; нет, так снова цикл
bcf INTCON,INT0IF ; очистить флаг прерывания
movf W_SAVE,W ; восстановить сохраненное значение обратно в рабочий регистр
ретфи ; возврат и повторное включение GIE
Ключевые точки:
- Чтобы разрешить прерывание, оба бита GIE (глобальное разрешение прерывания) и INT0IE (целое 0 разрешение прерывания) должны быть установлены. Однако для предотвращения сбоев GIE следует устанавливать только после того, как другие IE уже установлены, а не в той же инструкции.
- На PICAXE-18M2 внешнее прерывание находится на A.7 (не B.0, как у PIC16F88)
- Когда происходит прерывание, сразу же устанавливается соответствующий флаг (INT0IF), а затем вызывается ISR (процедура обслуживания прерывания), помеченная как прерывание:
- В ISR важно сохранить значение рабочего регистра, так как значение будет повреждено (при использовании) в ISR. Обратите внимание, что здесь показан упрощенный вариант — в реальных проектах также необходимо сохранять некоторые другие регистры, такие как STATUS.
- Перед возвратом из ISR необходимо сбросить флаг прерывания (INT0IF) и восстановить рабочее значение регистра.
- Команда retfie повторно включает бит разрешения прерывания автоматически (т. е. устанавливает INTCON,GIE) после возврата
Учебник 7 (расширение) — Чтение аналоговых значений
Введите и смоделируйте/загрузите следующий пример, чтобы считать LDR (A.0), емкость (A.1) и температуру (A.2), а затем отображать значение потенциометра (A.1) в двоичном формате на 8 светодиодах (порт B). При использовании реального чипа «вызов отладки» отправит все 3 результата на экран компьютера для отображения, при имитации щелкните правой кнопкой мыши на выводе на панели моделирования, чтобы изменить аналоговое значение.
инициализация:
clrf PORTB ; очистить выходные защелки PORTB
bsf STATUS,RP0 ; страница памяти 1
movlw b'11111111' ; установить контакты порта A для ввода
movwf TRISA ; записать в регистр TRIS
movlw b'00000000' ; установить контакты порта B для вывода
movwf TRISB ; запись в регистр TRIS
bcf STATUS,RP0 ; страница памяти 0
main:
call call readadc0 ; readadc A. 0 в регистр B0
call call readadc1 ; чтениеaddc A.1 в регистр B1
call readtemp2 ; считать температуру A.2 в регистр B2
call debug ; отправить значения на экран компьютера (реальный чип)
movf B1,W ; получить результат АЦП на контакте A.1
movwf PORTB ; отображение в виде двоичного кода на 8 светодиодах
call wait100ms ; задержка 100 миллисекунд
goto main
Ключевые точки:
- Предопределенные подпрограммы readadc/readtemp считывают аналоговые значения
- Предопределенные процедуры отладки последовательно отправляют значения по кабелю на дисплей компьютера
Учебное пособие 8 (расширение) — включение светодиода, когда аналоговое значение достигает порогового значения
Введите и смоделируйте/загрузите следующий пример, чтобы светодиод на контакте B.1 загорелся при аналоговом пороге 100 на A.1. (горшок).
init:
clrf PORTB ; очистить выходные защелки PORTB
bsf STATUS,RP0 ; страница памяти 1
movlw b'11111111' ; установить контакты порта A для ввода
movwf TRISA ; запись в регистр TRIS
movlw b'00000000' ; установить контакты порта B для вывода
movwf TRISB ; запись в регистр TRIS
bcf STATUS,RP0 ; страница памяти 0
main:
call call readadc1 ; прочитать аналог A.1 в регистр B1
call debug ; отправить значения на экран компьютера
movf B1,W ; перемещаем регистр B1 в рабочий регистр
sublw d'100' ; вычесть W из 100
btfsc STATUS,C ; если Carry не установлен ADC >= 100
bsf PORTB,1 ; выход B.1 высокий
btfss STATUS,C ; если установлен Carry ADC < 100
bcf PORTB,1 ; output B.1 low
goto main
Ключевые точки:
- Обратите внимание, что sublw вычитает рабочий регистр из литерала (результат = литерал — WREG), а не наоборот
- , если вычитание переполняется (т.