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

  • EECON2 РегистрINTCON

  • INTCON единицу). 6 - йбит (EEIE

  • PORTA иPORTB Оних - ниже. Те выводы портов, на которые поступают сигналы, инициирующие прерывания, должны работать "на вход ". Это относится квыводамRB0/INT

  • RB4...RB7 портаВи выводуRA4/TOCKI

  • TRISA иTRISB

  • TRISA иTRISB управляют направлением работы выводов портовАиВЕсли какой- нибудь из этих битов устанавливается в 1

  • TRISA/TRISB устанавливается в 0

  • PORTA иPORTB

  • PORTA иPORTB управляют этими триггерамиЕсли какой- либо из этих битов установить в 1

  • STATUS Самый часто применяемый из них - флаг нулевого результата (2 - йбит сназваниемZ

  • STATUS в 1

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


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

    19 Если нужно произвести чтение или запись, тов программу просто вставляется соответствующая стандартная процедура, рекомендованная разработчиками, в
    которой все действия стандартно "расписаны " (включая и
    работу с
    этими битами. Об этих процедурах я
    расскажу позднее
    Сказанное выше относится и
    к регистру
    EECON2
    Регистр
    INTCON
    имеет
    5 рабочих битов
    Это регистр управления прерываниями
    После возникновения факта прерывания, за счет "ухода " рабочей точки программы в
    подпрограмму прерываний, происходит временная приостановка выполнения "основной " условно) программы
    После возврата из подпрограммы прерываний, отработка "основной " программы продолжается
    Если в
    составе программы имеется подпрограмма прерываний, тов "шапке " программы (пока привыкните к
    этому названию, а
    объяснение будет позднее) устанавливается так называемый вектор прерываний, который также, как и
    команда старта для "основной " программы, определяет начальный адрес счетчика команд для первой команды, но только неосновной" программы, а
    подпрограммы прерываний "Основная " программа стартует и
    выполняется до тех пор, пока рабочая точка программы не войдет в "зону " разрешения прерываний
    Если в
    этой "зоне " происходит, например, внешнее прерывание по входу, то адрес следующей команды "основной " программы запоминается (адрес возврата записывается в
    стек
    - об этом позднее, выполнение "основной " программы приостанавливается, и
    происходит переход (по вектору прерывания) на начало исполнения подпрограммы прерывания
    Далее
    , подпрограмма прерываний выполняется по такому же принципу, как и "основная " программа, вплоть до окончания этой подпрограммы
    В
    конце подпрограммы прерываний всегда исполняется специальная команда возврата
    При этом, из стека извлекается адрес возврата, после чего "основная " программа начинает исполняться далее
    Таким образом, прерывание - это специфический переход, в
    большинстве случаев, по внешнему воздействию, из "основной " программы, на выполнение подпрограммы прерывания, с
    последующим возвратом из не в "основную " программу
    В
    ПИКах имеется несколько источников прерываний
    Для того, чтобы произошло любое из них, сначала нужно установить бит глобального разрешения прерываний (установить в 7- м
    бите регистра
    INTCON
    единицу
    ).
    6
    - й
    бит
    (
    EEIE
    ) разрешает
    /
    запрещает прерывания по окончанию цикла записи в
    EEPROM
    память данных- й
    бит
    (
    TOIE
    ) разрешает
    /
    запрещает прерывания по переполнению, то есть, если этот вид прерываний разрешен, то уход в
    подпрограмму прерывания произойдет при смене содержимого
    TMR0
    с
    FFh на 00h (при переполнении.
    4
    - й
    бит
    (
    INTE
    ) разрешает
    /
    запрещает внешнее прерывание по входу- й
    бит
    (
    RBIE
    ) разрешает
    /
    запрещает прерывания по изменению уровня сигнала на любом из выводов
    RB4…RB7
    Примечание
    : направление работы выводов портов
    А
    и
    В
    можно устанавливать в
    любых комбинациях (см регистры
    PORTA
    и
    PORTB
    О
    них
    - ниже. Те выводы портов, на которые поступают сигналы, инициирующие прерывания, должны работать "на вход ". Это относится к
    выводам
    RB0/INT
    ,
    RB4...RB7
    порта
    В
    и выводу
    RA4/TOCKI
    порта
    А
    Что касается последнего, то импульсную последовательность, подаваемую на счетный вход (вывод, вполне можно считать сигналом прерываний, только косвенно, так как прерывание наступает не по факту подсчета отдельного импульса, а
    по факту подсчета группы импульсов (переполнение.
    Регистры
    TRISA_иTRISB'>TRISA
    и
    TRISB
    имеют
    5 и 8 рабочих бита соответственно (по количеству выводов портов
    А
    и
    В
    ). Их адреса - 85h и 86h (см область оперативной памяти. Распечатки на них нет, но
    Вы без труда поймете их функции
    Биты регистров
    TRISA
    и
    TRISB
    управляют направлением работы выводов портов
    А
    и
    В
    Если какой- нибудь из этих битов устанавливается в 1, то соответствующий вывод порта работает на вход, то есть, принимает данные с
    выхода внешнего устройства, подключенного к
    этому выводу

    20 Если бит
    TRISA/TRISB
    устанавливается в 0, то соответствующий вывод порта уже сам является источником сигнала для подключенного к
    этому выводу, входа внешнего устройства, и
    программа может управлять этим внешним устройством (например, светодиодом или каким- то другим исполнительным устройством. При помощи этих битов, в
    пределах каждого из портов, можно устанавливать различные комбинации направлений работы их выводов, а
    также и
    менять их (направления) входе исполнения программы
    Так как регистры
    TRISA
    и
    TRISB
    находятся в 1- м
    банке
    , то, при работе сними, необходимо перейти в 1- й
    банк
    , произвести необходимые изменения битов и
    вернуться в 0- й
    банк
    (если далее работа происходит в
    нулевом банке.
    Регистры
    PORTA_иPORTB'>PORTA
    и
    PORTB
    (см распечатку ниже регистра) управляют защелками портов
    А
    и
    В
    Количество рабочих битов в
    них такое же, как и
    количество выводов портов (5 и 8). Защелка это аппаратно реализованное устройство оперативной памяти, а
    проще говоря, триггер
    Биты регистров
    PORTA
    и
    PORTB
    управляют этими триггерами
    Если какой- либо из этих битов установить в 1, тона выходе защелки (а значит и
    на соответствующем выводе порта, настроенном "на выход ") также установится 1 а для ноля - ноль. Так как защелки являются триггерами, то перевод их выходов из одного состояния в
    другое происходит "
    одномоментно ". Это означает то, что, например, для вывода цифры на 7- сегментный индикатор, в
    течение определенного программой интервала времени, достаточно одной команды на вывод цифры
    (
    байта
    ) вначале этого интервала времени, и
    одной команды на ее сброс в
    конце этого интервала времени
    В
    промежутке времени между этими двумя командами, программа может выполнять какие- либо другие действия, формируя за счет этих действий данный интервал времени, причем эти действия могут быть напрямую несвязанными с
    работой по выводу цифры в- сегментный индикатор (например, может производиться подсчет количества импульсов, операции с
    регистрами
    , работа с
    EEPROM
    памятью и
    т д. Следует четко уяснить следующее биты регистров
    PORTA
    и
    PORTB
    защелками управляют всегда, ноне всегда данные с
    выходов защелок присутствуют на выводах портов
    Выходы защелок портов подключаются к
    выводам портов только при работе этих выводов "на выход. При работе выводов портов на вход, выходы защелок от соответствующих выводов портов отключаются
    .
    В
    отличие от выводов порта
    В
    , к
    которым могут быть либо подключены, либо отключены внутренние, подтягивающие резисторы, выводы порта
    А
    внутренней "подтяжки " не имеют
    Таким образом, если они настроены на работу на вход, ток ним нужно подключать внешние подтягивающие резисторы
    Если нужно организовать счет импульсов (задействован, то роль подтягивающего резистора для вывода
    RA4/TOCKI
    может выполнять, например, коллекторная нагрузка внешнего устройства
    Регистр счетчика команд (13 бит) разделен на 2 регистра
    В
    регистре счетчика команд
    PC
    с названием (младший байт счетчика команд) находится младшие 8 битов адреса команды
    Остальные
    5 битов (старшие) "лежат " в
    старшем байте счетчика команд
    PC
    с названием старших его бита не используются. Изначально, "
    понятийновыгодно " представить себе 13- битное слово регистра
    PC
    как "неразделимый массив " с
    одним исключением (о нем - ниже, что (без учета этого исключения) означает если команды отрабатываются последовательно (без "прыжков ") и
    произошло переполнение (состояние 255 сменилось на состояние 0), то содержимое
    PCH
    инкрементируется
    (увеличивается на 1).
    13- разрядное слово позволяет организовать максимальный объем памяти программ до
    256
    х
    2
    х
    2
    х
    2
    х
    2
    х
    2=8192 слов (в тексте программы можно использовать до 8192- х
    команд
    ). Для 5- битного
    PCH
    , это "потолок ". Могут использоваться не все 5 бита меньшее их количество
    Соответственно
    , объем памяти программ, в
    этих случаях, будет меньше

    21 Память программ многих типов м
    /
    контроллеров меньше 8192 словно есть и
    м
    /
    контроллеры с
    объемом памяти программ по максимуму (8 килослов
    ).
    С
    регистром
    PCL
    никаких проблем нет
    Проблемы есть с
    регистром
    PCH
    В
    частности
    , они связаны с
    вычисляемым переходом
    Вычисляемым переходом (это стандартное название процедуры) называется приращение содержимого
    PC
    на величину числового содержимого регистра, называемого аккумулятором (об этом - в
    следующих разделах. Проще говоря, если перед выполнением команды вычисляемого перехода, в
    PC
    имела место быть команда, например, с
    адресом
    5 , а
    в регистре "лежит " число 2, тов результате исполнения команды вычисляемого перехода, произойдет переход (прыжок ") на команду с
    адресом
    5+2=7. Это упрощенный пример, который я
    привожу для обозначения сути вычисляемого перехода
    На самом деле, существуют некоторые нюансы (суть от этого не меняется, о
    которых я
    расскажу позднее
    Таким образом, вычисляемый переход является четвертой разновидностью переходов по тексту программы после переходов по стеку (условный переход, переходов в
    подпрограммы
    (
    безусловный переходи переходов наметки (разновидность безусловного перехода. Какой именно из этих переходов применить - решает программист в
    соответствии с
    оптимальным
    , на его взгляд, способом решения стоящих передним задач
    Выше было сказано, что в
    том случае, если программа отрабатывается последовательно, при переполнении регистра, происходит инкремент содержимого регистра
    PCH
    Это имеет место быть, но только не в
    случае исполнения процедуры вычисляемого перехода
    В
    этом случае, при переполнении, инкремента
    PCH
    не происходит
    В
    технических описаниях м
    /
    контроллеров
    (речь идет о
    ПИКах среднего семейства) причина этого не объясняется, а
    только дается указание о
    недопустимости пересечения границы блока памяти программ (каждый блок 256 команд. Поэтому можно только предположить, что это ограничение объясняется какими- то специфическими особенностями организации взаимодействия
    PCL
    и
    PCH
    , детали которого разработчики
    ПИКов не посчитали нужным разъяснить (просто поставили перед фактом.
    И
    это непустые слова
    Нарушение этого указания приводит к
    тому
    , что вычисляемый переход происходит не на ту команду, на которую нужно перейти (сбой работы программы. Пример начало исполнения вычисляемого перехода приходится на команду с
    номером
    , в
    памяти программ, равным 508.
    508 - 256 = 252. Число 252 вплотную, слева, "подступает к
    границе " 256- байтного блока (этой "границей " является переход от 255 к 0, ив этом случае, нужно "держать ушки на макушке " в
    смысле
    : "а как бы ее не пересечь ". Если максимальное приращение счетчика команд
    PC
    будет менее числа 3 включительно, то "произойдет переход на планируемую программистом команду (509, 510, 511), а
    если оно будет более трех, например, 4, тов результате сложения, содержимое регистра
    PCL
    окажется нулевыми- одно и
    то же, но общепринято указывать 0), плюс инкремент содержимого регистра
    PCH
    Но
    , в
    случае вычисляемого перехода, инкремента содержимого регистра
    PCH
    не происходит
    В
    конечном итоге, переход на 512- ю
    команду не осуществляется, а
    вместо этого осуществляется возврат назад, на 256- ю
    команду
    (в "лежало " число, ионов случае вычисляемого перехода, не изменилось, а
    в регистре
    PCL
    будет "лежать "
    00000000
    ), что есть сбой
    Пояснения к
    этому примеру Двоичное представление числа 508:
    00000001
    (
    PCH
    )
    11111100
    (
    PCL
    ). Для вычисляемого перехода с
    приращением
    3, результат
    00000001 11111111
    - все в
    норме
    : переход будет осуществлен на 508+3=511- ю
    команду
    Для вычисляемого перехода с
    приращением
    4, должен быть результат 00000000

    , нона самом деле, будет результат 00000000

    (
    приращения
    PCH
    нет
    ), то есть, 256. Переход будет осуществлен на 256- ю
    команду
    , а
    должен быть на 512- ю
    команду
    (сбой. Для того чтобы предотвратить подобного рода сбои, операцию вычисляемого перехода ненужно организовывать в
    непосредственной близости от "границ " 256- командных блоков памяти программ

    22 Практический вывод в
    части касающейся в 1024 слова, если вычисляемого перехода нетто о
    регистре
    PCH
    можно вообще "забыть ", то есть, не обращать на него внимания, так как содержимое этого регистра будет изменяться "в автомате " и
    вмешательства программиста в
    этот процесс просто не требуется
    Если производится вычисляемый переход, тов ходе его исполнения, переполнения регистра PCL допускать нельзя.
    Регистры
    INDF
    и
    FSR
    - регистры косвенной адресации
    Здесь необходимо кое- что пояснить
    Существует
    2 вида адресации прямая и
    косвенная
    Прямая адресация это обращение к
    регистру напрямую, то есть в
    команде указывается название регистра, с
    содержимым которого нужно произвести какое- то действие
    При этом, адрес этого регистра в
    области оперативной памяти, определяется в "автомате " по его названию. При косвенной адресации, название регистра не указывается, а
    указывается адрес этого регистра в
    области оперативной памяти, предварительно записанный в
    регистр
    FSR
    Для того, чтобы осуществить действие с
    регистром
    , адрес которого записан в
    регистре
    FSR
    , необходимо обратиться к
    регистру
    INDF
    Для начинающих это звучит достаточно непонятно
    Пока примите это к
    сведению
    Это нужно уяснять на конкретных примерах
    Конечный результат прямой и
    косвенной адресации один и
    тот же, просто в
    некоторых случаях, используя косвенную адресацию, можно обойтись гораздо меньшим количеством команд
    Сначала нужно как следует освоить прямую адресацию, как более простую для понимания, а
    только после этого переходить к
    косвенной
    И
    то
    , и
    другое предстоит сделать
    И
    наконец
    , самый часто используемый регистр - регистр
    W
    или его еще называют аккумулятором
    Это тот же регистр общего назначения, только с
    определенным названием (в том смысле, что оно заранее определено также, как и
    названия регистров специального назначения. Его адрес, в
    отличие от регистра общего назначения, знать необязательно и "прописывать " его адрес ненужно Стоит только обратиться к
    регистру
    W
    , как адрес автоматически поставится ему в
    соответствие
    Он также является 8- битным и
    выполняет функцию оперативной памяти, обычно, на время одного, двух, трех машинных циклов (а также и
    более
    ). Наиболее часто он применяется по той простой причине, что большое количество команд ориентировано именно на операции с
    этим регистром (
    буква
    W
    входит в
    состав этих команд. Например, для того чтобы перегрузить данные из одного регистра в
    другой
    , сначала данные из регистра- отправителя загружаются в
    регистр
    W
    , а
    затем из
    W
    загружаются в
    регистр
    - получатель, так как команды "прямой переправки " байта из одного регистра в
    другой
    , в
    списке команд нет
    Флаги
    Определение флагов дано выше
    Основная часть флагов находится в
    регистре
    STATUS_Самый_часто_применяемый_из_них_-_флаг_нулевого_результата_(2_-_йбит_сназваниемZ'>STATUS
    Самый часто применяемый из них - флаг нулевого результата (
    2
    - й
    бит с
    названием
    Z
    ). Он показывает, является ли результатом проведенной операции нулевой результат (флаг поднят, что соответствует установке- го бита регистра
    STATUS
    в
    1) или этот результат ненулевой (флаг опущен во- м
    бите
    - 0). Кроме информирования программиста о
    результате операции, содержимое бита
    Z
    может являться критерием выбора того или иного сценария работы программы, для чего он чаще всего и
    применяется
    Например
    , программист поставил условие если результат операции неравен, то программа исполняется далее, а
    если равен нулю, то происходит переход на выполнение подпрограммы (или наметку) После выполнения операции, флаг или останется опущенным (0) или поднимется (1). Далее следует команда ветвления типа если- й
    бит регистра
    STATUS
    не равен 0, то программа исполняется дальше, а
    если равен 0, то происходит переход на выполнение

    23 подпрограммы (или наметку) Дешево и
    сердито
    Если использовать цепочку таких проверок, то можно, например, выяснить, попадает ли результат операции в
    какой
    - то числовой "сектор " или нет, равен ли он какому- то числу или нет, ив зависимости от этого, направить программу в
    то или иное "русло ". Нетрудно заметить, что анализ содержимого бита (а также и
    некоторых других флагов, происходит при выполнении так называемых команд ветвления, суть которых если X, то так, а если Y, то по другому, применяющихся при выборе так называемых "сценариев работы программы ". Это словосочетание также, как и
    словосочетание "рабочая точка программы " - моя "самодеятельность ", и
    я "ввожу его в
    эксплуатацию " с
    целью наиболее комфортного восприятия информации
    Сценарии работы программы это возможные варианты ее исполнения,
    которые
    1   2   3   4   5   6   7   8   9   ...   57


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