Разное

Самоучитель по ассемблеру: Самоучитель по Assembler — it-black.ru

Список ресурсов для изучения Ассемблера / Хабр

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
ISBN5-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-Tutorial

© 2002-2023 http://www. avr-asm-tutorial.net
Вы можете использовать, копировать и распространять эти страницы до тех пор, пока сохраняете информацию об авторских правах.

Обзор 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), а не наоборот
  • , если вычитание переполняется (т.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *