Главная страница
Навигация по странице:

  • : главная функция стека - хранение адреса возврата втечение всего времени исполнения программной процедуры.

  • movwf ABCD Расшифровка MOV - обозначение команды копированияКопирование данных производится из регистраW в регистр (то есть, врегистрABCD

  • RETFIE - возврат из подпрограммы обработки прерываний буква вкорне команды B - операции сбитомИмеются ввиду командыBCF иBSF

  • – ориентированные команды ветвления DECFSZ, INCFSZ .

  • Самоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008). Самоучитель по программированию PIC контроллеров для начинающих. Система команд pic16F84A 26 Что такое программа иправила ее составленияПример создания программы автоколебательного мультивибратораДирективы.


    Скачать 3.49 Mb.
    НазваниеСистема команд pic16F84A 26 Что такое программа иправила ее составленияПример создания программы автоколебательного мультивибратораДирективы.
    АнкорСамоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008).pdf
    Дата30.01.2017
    Размер3.49 Mb.
    Формат файлаpdf
    Имя файлаСамоучитель по программированию PIC контроллеров для начинающих .pdf
    ТипПрограмма
    #1195
    КатегорияПромышленность. Энергетика
    страница5 из 57
    1   2   3   4   5   6   7   8   9   ...   57
    "
    привязаны
    " к либо к
    выполнению
    , либо к
    невыполнению каких
    -
    то условий
    .
    Необходимо также отметить то, что при использовании одной команды ветвления, возможных сценариев может быть только 2, а
    при применении нескольких - количество возможных сценариев будет кратным двум
    Флаги переноса - заёма
    С
    (
    0
    - й
    бит регистра) и
    десятичного переноса - зама- й
    бит
    ) показывают, было ли переполнение байта или младшего полубайта байта
    (
    извиняюсь за тавтологию) соответственно
    Переполнение это выход результата операции за пределы максимально возможного числа, определяемого разрядностью Например, наибольшее число в
    пределах байта (8 разрядов)
    255. Если, например, складываются числа 200 и 100, то происходит переполнение, и
    флаг
    C
    устанавливается в 1 (поднимается. Кроме того, при выполнении команд сдвига, флаг
    C
    загружается старшим или младшим битом байта сдвигаемого регистра (в зависимости от направления сдвига. На флаги переполнения сторожевого таймера и
    включения питания пока можете не обращать внимания
    Они используются достаточно редко
    То же самое относится и
    к флагам
    EEIF
    и
    WRERR
    регистра
    EECON1
    (см распечатку. Флаги, INTF, RBIF
    регистра
    INTCON
    работают по единому принципу
    Отличия только в
    источниках прерываний
    Перед работой сними, их необходимо сбросить программно "Разборки " с
    этим сбросом будут позднее
    С
    содержимым регистров специального назначения, в
    основном
    , разобрались
    Пошли дальше
    Метки
    Само название уже отражает смысл этого понятия
    Если нужно осуществить переход на выполнение команды программы, отстоящей от команды начала перехода на какое- то количество команд и
    не являющейся первой командой подпрограммы, то эта команда помечается меткой (на "статус " подпрограммы "не тянет "). Название метки представляет собой результат фантазии программиста
    Метка ставится в
    специально отведенное для нее (них) "место " в
    тексте программы
    Она должна указывать на ту команду, на которую нужно осуществить переход
    Принципиальной разницы между метками и
    названиями подпрограмм нет и
    различия между ними достаточно условны
    Название подпрограммы указывает на первую команду подпрограммы, а
    метка помечает команду, отличную от первой команды подпрограммы
    Вот и
    все различие
    Техническая сторона переходов наметки и
    переходов в
    подпрограммы одна и
    та же
    Самое главное - понимать смысли "технологию " такого рода переходов, а
    проклассифицировать их можно на свое усмотрение
    Аппаратный стек
    Является всё
    тем же оперативным запоминающим устройством "объемом " в 8 ячеек по 13 битов каждая
    Он поддерживает команды переходов
    /
    возвратов по условию (условные переходы, а
    также и
    переходы
    /
    возвраты
    , связанные с
    прерываниями

    24 Это означает то, что существует небольшая группа специальных команд, после исполнения которых происходит либо "закладка " в
    стек адреса команды, следующей после такой "специальной " команды, с
    так называемым "переходом по стеку " на начало исполнения некой программной процедуры, либо возврат на эту "следующую " команду (после исполнения этой "некой " процедуры, с
    использованием другой, "специальной " команды возврата (возврат по стеку.
    В
    последнем случае, ранее "заложенный " в
    стек адрес команды из него "извлекается ". Они является "указателем места ", в
    которое должен быть осуществлен возврат
    Соответственно
    , эти специальные команды разделяются на команды перехода по стеку и
    возврата по стеку
    Для того чтобы осуществить переход по стеку на исполнение какой- то программной процедуры и
    возврат по стеку после ее (процедуры) исполнения, нужны 2 такие специальные команды сначала (походу исполнения программы) команда перехода по стеку, а
    затем
    - команда возврата по стеку
    Если речь идет о
    безусловных переходах, то такого разделения нет, так как, при помощи одной и
    той же команды безусловного перехода, можно и "перейти ", и "вернуться " в
    любое "место " программы (на любую ее команду) без задействования стека
    Вывод
    : главная функция стека - хранение адреса возврата в
    течение всего времени исполнения программной процедуры.

    В
    упрощенном виде, он представляет собой некую таблицу из одного столбца и
    восьми строк
    Изначально
    (на момент начала программы, эта таблица пустая
    В
    MPLAB
    , это выглядит так Если, походу исполнения программы, был осуществлен условный переход, тов верхнюю строку (так называемая вершина стека, из счетчика команд, копируется 13- ти разрядное слово бит
    PCL
    и
    5 бит) адреса следующей, после команды условного перехода, команды (для дальнейшего возврата программы поэтому адресу. Если до возврата из первого условного перехода, исполняется еще одна команда условного перехода, то адрес возврата первого условного перехода сдвигается на одну позицию
    (
    строку
    ) вниз, занимая вторую строку, а
    адрес возврата более "позднего " условного перехода помещается в
    первую строку таблицы (в вершину стека. Таким образом, стек можно заполнить 8- ю
    адресами возвратов, после чего наступает его переполнение, чего допускать нельзя (указателя переполнения стека нет, так как будет "Гитлер капут ". То есть, в
    стек может быть заложено не более 8- ми адресов возврата, и
    программист должен за этим следить при составлении программы
    Даже в
    достаточно сложных программах, работа стека на грани переполнения - редкое явление и
    его "емкости " хватает с
    избытком
    Это объясняется тем, что по мере работы программы, адреса возвратов из стека извлекаются, освобождая свободное место
    Адреса возвратов извлекаются только из вершины стека, а
    остальные
    7 его строк используются как оперативная память для остальных адресов возврата, которые либо сдвигаются к
    вершине стека походу извлечения из него адресов возвратов, последовательно занимая вершину стека и "уходя " из него, либо наоборот, сдвигаются вниз от вершины, при выполнении новых команд условных переходов
    И
    то
    , и
    другое может чередоваться, что предполагает определенную последовательность как закладки адресов возвратов в
    стек
    , таки их извлечения их из него
    Спешу успокоить начинающих на первых порах достаточно только одной вершины стека, то есть, первой (верхней) его строки
    В
    нее можно последовательно заложить и
    извлечь хоть сотню адресов возвратов
    Естественно
    , в
    этом случае, нужно позаботиться о
    том
    , чтобы следующий условный переход осуществлялся только после возврата из предыдущего условного перехода

    25
    Если
    Вы это освоите, то со временем, Вы естественным образом перейдете к
    более сложным манипуляциям с
    условными переходами
    Это произойдет тогда, когда
    Вы захотите сделать свою программу более компактной (с меньшим количеством команд. Некоторые программы вообще не содержат условных переходов (стек не задействована в некоторых случаях без них никак не обойтись
    Подробнее о
    работе со стеком - в
    следующих разделах
    Итак
    : микроконтроллер это набор многофункциональных устройств. Программа определяет конкретные функции этих устройств и
    их режимы работы на различных участках выполнения программы (см. регистры специального назначения. На регистрах общего назначения строятся различные устройства, применяемые в
    цифровой технике. Таковыми устройствами их делает программа
    .
    И
    в томи в другом случае именно программа (программист) определяет все то, что будет происходить с
    этими элементами
    ПИК
    - конструктора, и
    поэтому далее речь пойдет о "начинке " программы, то есть о
    командах
    Примечание
    : то, что
    Вы прочитали, есть основа, с
    еще недостаточно четко "прорисованными " деталями
    Одноразово выдавать
    Вам весь "массив ", связанной с
    этим "ПИК- конструктором ", информации, было бы абсолютно неправильными решением "Въезжать " в
    этот "массив " нужно постепенно, с
    соблюдением "техники безопасности " и
    не делая "резких движений ". Это и
    есть дальнейшая стратегия "въезда "Самоучитель по программированию PIC контроллеров для начинающих"

    http://ikarab.narod.ru E-mail: karabea@lipetsk.ru

    26 3. Система команд PIC16F84A Вашему вниманию предлагается описание команд ассемблера для PIC контроллеров
    Таблица команд ассемблера для
    ПИКов находится в
    "
    Приложении

    10"
    .
    Команды разделены на 3 группы
    - байт
    -
    ориентированные команды, то есть команды, производящие действия с
    байтами
    ,
    - бит
    -
    ориентированные команды, то есть команды, производящие действия с
    битами
    ,
    - команды управления, то есть команды, осуществляющие переходы и
    возвраты
    , а
    также команды сброса сторожевого таймера
    WDT
    и перехода в
    спящий режим
    SLEEP
    Из списка команд управления можно смело вычеркнуть последние 2 команды, так как они могут быть использованы только для поддержки совместимости
    PIC16F84A
    с более "древним " семейством микроконтроллеров, а
    для совместимости
    PIC16F84A
    с последующими, выпускаемыми микроконтроллерами, эти команды разработчики вообще не рекомендуют использовать
    Итого
    : осталось 35 команд
    Разве это много По сравнению, например, с
    изучением иностранного языка, это вообще мизер
    Давайте сними разбираться
    Сначала
    - информация по таблице команд
    В
    первой колонке располагается название команды, а
    в рамке под этим названием - краткое содержание команды
    Сразу обращаю
    Ваше внимание на то, что подчеркивание команды есть только элемент ее выделения, и
    ничего более
    В
    тексте программ команды не подчеркиваются
    Латинские буквы в
    конце команды обозначают
    f
    - название регистра (в общем виде, к
    которому эта команда обращается, и
    с содержимым которого будет производиться действие
    Иными словами, наличие в
    команде буквы
    f
    означает
    , что команда обращается к
    содержимому регистра специального или общего назначения, с
    которым программист хочет произвести определяемое этой командой действие - указатель места сохранения результата при операциях с
    байтами
    Если d = 0
    , то результат исполнения команды сохраняется в
    регистре
    W
    (в аккумуляторе. Если d = 1
    , то результат исполнения команды сохраняется в
    регистре
    f
    , то есть, в
    том же самом регистре, с
    содержимым которого производится действие - номер бита в
    регистре
    , с
    которым производится действие (для бит- ориентированных команд.
    k
    - константа, то есть некое число в
    пределах байта, которое задается программистом
    Во второй колонке, находится более подробное описание действия, которое производит команда
    В
    третьей колонке, даны примеры выполнения команд
    В
    четвертой колонке, указано количество машинных циклов, в
    течение которых данная команда исполняется
    Обратите внимание на то, что большая часть команд исполняется за 1 машинный цикл
    Имеются также команды, выполняющиеся за 2 машинных цикла (в основном это команды управления. Комбинация числа 1 и
    двойки в
    скобках
    , означает, что по одному сценарию выполнения команды, она выполняется за один машинный цикла по другому - за два
    Напоминаю
    , что подобного рода команды (команды ветвления) имеют только 2 сценария исполнения команды
    В
    пятой колонке указаны флаги, которые "реагируют " на выполнение данной команды
    Ячейки пятой колонки команд, на выполнение которых флаги не реагируют, закрашены серым цветом
    Сразу обратите внимание наследующую особенность, знание которой поможет
    Вам при запоминании команд значительная часть команд состоит из 5- ти букв, причем корень слова

    27 команды, характеризующий ее суть, состоит, в
    большинстве случаев, из 3- х
    букв
    , а
    последние две буквы показывают, откуда и
    куда копируется (переписывается) число или с
    какими регистрами нужно произвести определяемое командой действие
    Например
    , команду
    ADDWF
    можно условно разделить на 2 части корень, который обозначает операцию сложения, и, где первая буква обозначает регистр (аккумулятора вторая - регистр, то есть регистр, к
    которому обращается команда
    Следовательно
    , из самого названия команды становится понятным, что складывается содержимое регистров
    W
    и
    F
    В
    качестве этого условного регистра, используются регистры общего или специального назначения
    Например
    , если в "шапке " программы определено название какого- нибудь регистра общего назначения как, и
    по ходу исполнения программы, в
    него было записано какое- нибудь число, которое необходимо сложить с
    числом
    , находящимся в
    аккумуляторе
    (
    W
    ), с
    сохранением результата сложения в
    том же регистре, то это будет выглядеть так
    addwf ABCD,1 При этом следует отметить, что в
    регистр
    W
    программист может переписать содержимое любого другого регистра, и
    по своей сути, такого рода операция есть операция сложения чисел, находящихся в
    двух регистрах (через регистр, с
    выбором места сохранения ее результата
    Рассмотрим команду
    ADD
    - операция сложения,
    L
    - признак того, что в
    ней участвует константа,
    W
    - признак того, что в
    ней участвует регистр - аккумулятор
    Например
    :
    addlw k Это означает то, что складывается содержимое регистра
    W
    и некая константа, заданная программистом
    Если она равна, например, числу 3, то это будет выглядеть так
    addlw 3 Так как константане является регистром, то место сохранения результата операции однозначно - регистр
    W
    Другой пример операция копирования содержимого одного регистра в
    другой
    movwf ABCD Расшифровка
    MOV
    - обозначение команды копирования
    Копирование данных производится из регистра
    W
    в регистр (то есть, в
    регистр
    ABCD
    ). Так как никакой логической операции при этом не совершается, то и
    вопроса о
    сохранении результата неосуществленной логической операции не возникает
    Просто происходит банальное копирование данных в
    указанный в
    команде регистр
    Обращаю
    Ваше внимание на то, что в
    системе команд для
    ПИКов
    , при простом перемещении данных из одного регистра в
    другой
    (то есть при операции без логических действий, речь идет именно о
    копировании
    , без вырезания данных из регистра - отправителя
    Конечным результатом этой операции является числовое равенство содержимого обеих регистров
    Аналогично
    :
    AND
    - операция побитного "И" содержимого двух регистров,
    CLR
    - сброс в
    ноль содержимого регистра,
    COM
    - инверсия всех битов регистра,
    DEC
    - декремент содержимого регистра (минус 1),
    INC
    - инкремент содержимого регистра (плюс 1),
    IOR
    - побитное "ИЛИ" содержимого двух регистров,
    NOP
    – "пустой " машинный цикл (ничего не происходит,
    RLF
    - циклический сдвиг содержимого регистра влево,
    RRF
    - циклический сдвиг содержимого регистра вправо,
    SUB
    - операция вычитания,
    XOR
    - побитное "
    исключающее
    ИЛИ
    " содержимого двух регистров,
    BTF
    - команды ветвления по значению выбранного в
    регистре бита,
    RET
    - возврат с
    загрузкой константы в W,
    4 буквы в
    корне команды

    SWAP
    - поменять местами полубайты регистра,
    CALL
    - переход по условию (с задействованием стека,

    28
    GOTO
    - переход без условия,
    5 букв в
    корне команды
    SLEEP
    - уход в
    режим пониженного энергопотребления,
    6 букв в
    корне команды

    RETURN
    - возврат из подпрограммы (кроме подпрограмм обработки прерываний,
    RETFIE
    - возврат из подпрограммы обработки прерываний буква в
    корне команды

    B
    - операции с
    битом
    Имеются ввиду команды
    BCF
    и
    BSF
    Вторая буква в
    этих командах является признаком операций сбитом
    -
    C
    - установить битв- установить битв- признак регистра
    Получается
    : сбросить (0) или установить (1) какой- то из битов регистра, к
    которому обращается команда
    С
    учетом сказанного выше, итого, что таблица команд содержит достаточно подробную информацию, я
    остановлюсь на наиболее трудно понимаемых командах
    На данном этапе обучения, от
    Вас требуется только общее понимание смысла действий, производимых командой и
    заучивание их названий
    В
    дебри лезть незачем, иначе навредите сами себе "Хозяином " этих команд
    Вы станете позднее - тогда, когда пойдет работа по составлению программа пока "вживайтесь " в
    команды ассемблера
    На первых порах, наибольшие трудности, обычно, вызывают команды ветвления
    Сразу следует уяснить, что ветвления, то есть выбор какого- то одного из двух сценариев работы программы, могут быть результатом выполнения различных действий
    Байт
    – ориентированные команды ветвления
    DECFSZ, INCFSZ
    .
    В
    подавляющем своем большинстве, эти команды обращаются к
    регистрам общего назначения
    Самый распространенный случай внутри полного цикла программы, имеется еще один внутренний цикли рабочая точка программы должна "
    прокрутиться " поэтому внутреннему циклу, например, 10 раз, чтобы после этого выйти на полный цикл программы
    В
    качестве счетчика такого рода "проходов " (колец "), назначается какой- нибудь из регистров общего назначения
    Назовем его, например, Вначале полного цикла программы, в
    него записывается число "проходов ", то есть, число 10. Предположим, что программа работает и
    ее рабочая точка вышла на 1- й
    внутренний цикл
    А
    в его конце стоит команда, в
    результате действия которой, содержимое регистра
    1   2   3   4   5   6   7   8   9   ...   57


    написать администратору сайта