44946

Организация вычисляемого перехода

Реферат

Информатика, кибернетика и программирование

Вычисляемый переход осуществляется при помощи команды ddwf PCF которая формально описывается так: сложить содержимое регистров W и PC с сохранением результата сложения в регистре PC имеется ввиду младший байт счетчика команд с названием PCL. Для вычисляемого перехода адрес в PC на момент исполнения команды ddwf PCF является как бы начальной точкой отсчета т. число находящееся в регистре W на момент исполнения команды ddwf PCF которое и будет приращением счетчика команд PC.

Русский

2013-11-14

41.46 KB

2 чел.

Организация вычисляемого перехода

Нам уже известно, что команды ветвления “порождают” 2 сценария работы программы. А как быть, если нужно “компактно разветвиться” на большее число сценариев, например, на 4 сценария (для того чтобы впоследствии “уйти” на исполнение того или иного из этих 4-х сценариев). Нетрудно догадаться, что для этого можно организовать серию последовательных проверок. Но это можно сделать и при помощи, так называемого, вычисляемого перехода (стандартное название операции). В последнем случае можно обойтись количеством команд меньшим, чем в первом случае. Такого рода выигрыш тем заметнее, чем на большее количество сценариев нужно “разветвиться”.

Вычисляемый переход осуществляется при помощи команды addwf PC,F, которая формально описывается так: сложить содержимое регистров W и PC, с сохранением результата сложения в регистре PC (имеется ввиду младший байт счетчика команд с названием PCL). Для вычисляемого перехода адрес в PC на момент исполнения команды addwf PC,F является как бы начальной точкой отсчета, т.е. выбор дальнейшего сценария работы программы зависит от приращения счетчика команд PC.

Прежде чем вставить в текст программы команду addwf PC,F, необходимо определиться с критерием перехода, т.е. с содержимым чего-то, что определяет, какой именно из 4-х сценариев будет далее исполняться. Это “чего-то” есть регистр W, а критерием перехода является его содержимое, т.е. число, находящееся в регистре W на момент исполнения команды addwf PC,F, которое и будет приращением счетчика команд PC.

Какие числа должны быть записаны в регистр W? Для того чтобы процедура вычисляемого перехода получилась “компактной”, значения этих чисел, в данном случае (4 сценария), должны быть равны 0, 1, 2, 3 (почему именно такие значения, а не 1, 2, 3, 4, разберемся позже). Если сценариев больше чем 4, то этот числовой ряд нужно продолжить (количество этих чисел должно быть равно количеству сценариев).  

Например, для случая 4-сценарной работы, перед исполнением команды addwf PC,F, нужно откуда-то (из регистра общего назначения, предназначенного для осуществления этой операции) скопировать в регистр W одно из чисел, находящихся в числовом диапазоне от нуля до трех включительно. Если это сделать, то после исполнения команды addwf PC,F произойдет переход (“прыжок”) рабочей точки программы на одну из четырех команд начала исполнения сценариев программы. В дальнейшем, после перехода на начало исполнения выбранного сценария, он и будет исполнен.

Командами начала исполнения сценариев могут быть:

  1.  Команды goto. Такой вычисляемый переход применяется в тех случаях, когда выбор того или иного сценария работы программы нужно поставить в зависимость от внешнего управления (например, от состояния клавиатуры) или от результатов работы программы (например, от результата вычисления). Последним сценарием в этом случае может быть (а может и не быть. Зависит от задумки) сценарий “программа исполняется далее”;
  2.  Команды retlw. Такой вычисляемый переход применяется для выборок данных из таблицы данных (в том числе и для перекодировок).

Команды начала исполнения сценариев обычно “компактно” размещают сразу же после команды addwf PC,F, т.е. адреса этих команд в памяти программ “идут друг за другом” (команды не “разбросаны” по памяти программ). В любом случае, “прыжок” рабочей точки программы на одну из команд начала исполнения сценариев программы происходит по принципу: если в регистре W, на момент исполнения команды addwf PC,F, записано число N, то после исполнении команды addwf PC,F, произойдет переход рабочей точки программы на команду начала исполнения сценария программы, с номером N+1. Обратите внимание на то, что этот “прыжок” (переход) происходит без применения команды перехода, а за счет приращения содержимого счетчика команд PC, которое происходит после исполнения команды addwf PC,F. Итак, вычисляемый переход является третьей разновидностью переходов (после условных и безусловных переходов).

Если “привязаться” к случаю управления сценариями работы программы с помощью клавиатуры, реализующей одно из 4-х возможных состояний, то для этого потребуется 2 кнопки. В конечном итоге, содержимое регистра W формируется по результатам опроса клавиатуры. Можно опросить клавиатуру и из большего количества кнопок. В этом случае, количество возможных состояний увеличится и можно реализовать большее количество сценариев работы программы.

Следующая программа иллюстрирует принцип “разветвления” программы на 4 сценария, выбор одного из которых ставится в зависимость от текущего состояния клавиатуры, состоящей из двух кнопок, подключенных между выводами RA0, RA1 порта А и корпусом.

; Computed Branch-1

;=========================

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;=========================

Sec  equ  0Ch

Num  equ  0Dh

SecL  equ  0Eh

SecH  equ  0Fh

;=========================

 org  0

 goto  START

; ****************************

START bsf  Status,RP0

 movlw .3

 movwf TrisA

 movlw .0

 movwf TrisB

 bcf  Status,RP0

;------------------------------------------

PULSES movlw .255

 movwf SecL

 movlw .3

 movwf SecH

DEL  decfsz SecL,F

 goto  DEL

 decfsz SecH,F

 goto  DEL

 movlw .10

 movwf Num

 movf  PortA,W

 addwf  PCL,F

 goto  F0

 goto  F1

 goto  F2

;=========================

F3  movlw .128

 movwf Sec

F3_0  bcf  PortB,3

;------------------------------------------

 decfsz Sec,F

 goto  F3_0

 movlw .127

 movwf Sec

F3_1  bsf  PortB,3

;------------------------------------------

 decfsz Sec,F

 goto  F3_1

;------------------------------------------

 clrwdt

 decfsz Num,F

 goto  F3

 bcf  PortB,3

 goto  PULSES

;=========================

F2  movlw .99

 movwf Sec

 bcf  PortB,2

 nop

;------------------------------------------

F2_0  decfsz Sec,F

 goto  F2_0

 movlw .98

 movwf Sec

 bsf  PortB,2

;------------------------------------------

F2_1  decfsz Sec,F

 goto  F2_1

;-------------------------------

 clrwdt

 decfsz Num,F

 goto  F2

 bcf  PortB,2

 goto  PULSES

;=========================

F1  movlw .66

 movwf Sec

 bcf  PortB,1

;------------------------------------------

F1_0  decfsz Sec,F

 goto  F1_0

 movlw .64

 movwf Sec

 bsf  PortB,1

 nop

 nop

;------------------------------------------

F1_1  decfsz Sec,F

 goto  F1_1

;------------------------------------------

 clrwdt

 decfsz Num,F

 goto  F1

 bcf  PortB,1

 goto  PULSES

;=========================

F0  movlw .32

 movwf Sec

 bcf  PortB,0

 nop

 nop

;------------------------------------------

F0_0  decfsz Sec,F

 goto  F0_0

 movlw .31

 movwf Sec

 bsf  PortB,0

 nop

;------------------------------------------

F0_1  decfsz Sec,F

 goto  F0_1

;------------------------------------------

 clrwdt

 decfsz Num,F

 goto  F0

 bcf  PortB,0

 goto  PULSES

; ****************************

 end

В соответствии с изложенным выше принципом, команды начала исполнения сценариев программы должны располагаться компактно, сразу же после команды addwf PC,F, что Вы и видите. В данном случае, вычисляемый переход на исполнение одного из 4-х сценариев программы, производится следующим образом. C помощью команды movf PortA,W, производится опрос клавиатуры. Так как команда movf является байт-ориентированной, то в регистр W записывается байт (8 битов). Так как задействован порт А, имеющий 5 выводов (PIC16F84A), то в битах № 5, 6, 7 регистра PortA, по умолчанию, всегда будут выставляться нули. Таким образом, при наличии нулей на выводах RA2, RA3, RA4 (это нужно обеспечить до “влёта” в эту процедуру), возможные числовые значения содержимого регистра W будут строго определенными: 0, 1, 2, 3, т.е. имеет место быть компактная группа чисел. Выбор начального значения этого набора чисел, равным нулю, объясняется тем, что счетчик команд PC автоматически инкрементируется при исполнении любой команды. Следовательно,  если в регистре W на момент исполнения команды addwf PC,F записано число N, то после исполнения этой команды произойдет переход рабочей точки программы на команду начала исполнения сценария программы с номером N+1. Следовательно, если в регистре W “лежит” число 0, то произойдет переход на начало исполнения сценария №1 (команда его выбора находится сразу же после команды addwf PC,F). И т.д.

Рассмотрим подготовительный этап. К моменту исполнения команды movf PortA,W первые 2 вывода порта А должны быть настроены на работу ”на вход”, а на выводах RA2 ... RA4 должны быть нулевые уровни. В этом случае в соответствии с тем, что нажатию кнопки соответствует 0, а отжатию – 1, возможные результаты опроса клавиатуры будут следующими:

  1. 00000000 – для 1-го сценария, обе кнопки нажаты;
  2. 00000001 – для 2-го сценария, 1-я кнопка нажата, а 2-я отжата;
  3. 00000010 – для 3-го сценария, 2-я кнопка нажата, а 1-я отжата;
  4. 00000011 – для 4-го сценария, обе кнопки отжаты.

В результате опроса клавиатуры, в регистр W записывается одно из этих чисел, и далее происходит приращение содержимого счетчика команд PC на величину этого числа, плюс один автоинкремент. Переходы на исполнение первых трех сценариев организованы с помощью команд безусловных переходов (goto), а 4-м сценарием является сценарий “программа исполняется далее”. В зависимости от того, какая из первых трех команд goto будет исполнена, будет отработана одна из трех подпрограмм (“F0” – 1-й сценарий, “F1” – 2-й сценарий, “F2” – 3-й сценарий). В последнем, 4-м сценарии, также можно использовать команду goto или применить сценарий “программа исполняется далее” (как в приведенном примере). Естественно, что количество сценариев может быть и больше.

При экспериментальной проверке работы программы выбор определенного сценария исполнения программы осуществляем с помощью соответствующих кнопок в окне стимулятора внешних воздействий (Microcontroller View). В качестве сценариев исполнения программы в программе осуществлены формирование последовательностей пачек импульсов различных частот. Результаты работы программы по различным сценариям необходимо наблюдать на осциллографе.

В следующей программе показана организация так называемого табличного вычисляемого перехода с целью преобразования двоично-десятичного кода в код 7-сегментного индикатора. При конструировании устройств с отображением данных в одном или нескольких 7-сегментных индикаторах, такого рода преобразование является абсолютно необходимым. Подпрограмму этого преобразования (подпрограмма TABLE, но можно назвать ее как угодно) построена по классическому принципу.

; Computed Branch-2

;===============================

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;===============================

Sec  equ  0Ch

Number equ  0Dh

SecL  equ  0Eh

SecH  equ  0Fh

;===============================

 org  0

 goto  START

;*******************************

TABLE addwf  PCL,F

 retlw  b'00111111'

 retlw  b'00000110'

 retlw  b'01011011'

 retlw  b'01001111'

 retlw  b'01100110'

 retlw  b'01101101'

 retlw  b'01111101'

 retlw  b'00000111'

 retlw  b'01111111'

 retlw  b'01101111'   

 retlw  .00

 retlw  .62

 retlw  .116

 retlw  .56

 retlw  .115

 retlw  .118

;*******************************

START bsf  Status,RP0

 movlw .15

 movwf TrisA

 movlw .0

 movwf TrisB

 bcf  Status,RP0

;----------------------------------------------------

 movlw .255

 movwf SecL

 movlw .255

 movwf SecH

DEL  clrwdt

 decfsz SecL,F

 goto  DEL

 decfsz SecH,F

 goto  DEL

 movf  PortA,W

 call  TABLE

 movwf PortB

 goto  START

;===============================

 end

Эта программа иллюстрирует принцип “разветвления” программы на 16 сценариев, выбор одного из которых ставится в зависимость от текущего состояния клавиатуры, состоящей из четырех кнопок, подключенных между выводами RA0, RA1, RA2, RA3 порта А и корпусом. В подготовительном этапе программы, т.е. к моменту исполнения команды movf PortA,W первые 4 вывода порта А должны быть настроены на работу ”на вход”, а на пятом выводе (RA4) должен быть установлен нулевой уровень.

В этой программе вычисляемый переход на исполнение одного из 16-ти сценариев программы, производится следующим образом. C помощью команды movf PortA,W, производится опрос состояний кнопок. Таким образом, возможные числовые значения содержимого регистра W будут строго определенными (от 0 до 15). В этой программе, после стандартной команды вычисляемого перехода addwf PC,F, компактно расположены 16 команд начала исполнения коротких сценариев программы. “Расшифровка” команды retlw k: в регистр W, записывается константа, после чего, автоматически осуществляется возврат по стеку. Различие команды retlw от команды return (обычный возврат из подпрограммы по стеку) в том, что она совмещает в себе рабочую операцию (копирование в регистр W константы) и возврат по стеку. Таким образом, команду retlw можно рассматривать как “микроподпрограмму”, состоящую из одной рабочей команды (копирование константы в регистр W), после исполнения которой, осуществляется автоматический возврат по стеку.

После исполнения текущей команды retlw (того или иного сценария), в регистре W “оседает” некое число (то, которое требуется получить в результате реализации текущего сценария, а другими словами – результат кодового преобразования), которое, в дальнейшем, используется в программе. В рассматриваемом случае осуществляется кодовое преобразование чисел, “привязанное” к 7-сегментному индикатору, но можно осуществить эту “привязку” и к чему-то другому, например, к жидкокристаллическим модулям, к которым тоже требуется кодовое преобразование.

Посмотрите на первые 10 команд retlw и обратите внимание на числовые значения констант, которые, для удобства, представлены в бинарном виде. Сверьтесь с “раскладкой” секторов 7-сегментного индикатора (A,B,C,D,E,F,H), и Вы без особого труда заметите, что например, после исполнения команды 1-го сценария, в регистр W скопируется число, отображающее в 7-сегментном индикаторе символ 0, 2-го сценария – символ 1, 3-го сценария – символ 2 и т.д. Это означает то, что например, весовой код двоичного числа 0h, непригодный для отображения в 7-сегментном индикаторе в виде символа 0, с помощью подпрограммы табличного, вычисляемого перехода, будет преобразован в код, который 7-сегментный индикатор отображает в виде символа 0. То же самое относится и ко всем остальным двоичным числам до 9 включительно. Итак, первые 10 команд retlw осуществляют кодовое преобразование двоичных чисел в коды символов 0 … 9. Принцип работы последующих 6-ти команд такой же, только осуществляется кодовое преобразование не в символы цифр, а в символы латинских букв, и константы представлены не в бинарной, а в десятичной системе исчисления (можно перевести и в бинарную).

Итак, после исполнения того или иного сценария, в регистре W “осело” число, соответствующее коду одного из нескольких символов, которые способен отобразить 7-сегментный индикатор. Остается только скопировать это число из регистра W в регистр порта (его выводы должны быть настроены на работу “на выход”), к выводам которого подключены секторы 7-сегментного индикатора, и вывести символ на индикацию.

Команда call TABLE может находиться в тексте программы или до, или после подпрограммы TABLE, так как в PIC16F84A (в связи с отсутствием разделения на страницы памяти программ) условный (и безусловный тоже) переход можно осуществить из любого “места” текста программы, в любое “место” текста программы. Единственное ограничение: “граница” между блоками памяти программ (один блок это 256 ячеек) не должна “проходить” через таблицу вычисляемого перехода. В нашем случае, команда call TABLE находится ниже (по тексту программы) подпрограммы TABLE.

Необходимое для реализации вычисляемого перехода значение числа, копируемого в регистр W, перед началом отработки подпрограммы табличного вычисляемого перехода TABLE, вводится в виде двоичного кода с помощью кнопок, размещенных около соответствующих выводов порта A. В случае работы на 16 сценариев и с учетом того, что команды начала исполнения сценариев программы расположены компактно, максимальное значение вводимого, т.е. записываемого затем в регистр W числа, должно быть 16-1=15. Следовательно, в регистр W, предварительно, должны записываться числа, находящиеся в числовом диапазоне от .0 до .15.

Задержка, реализуемая с помощью регистров SecH и SecL, введена в программу для обеспечения “комфортности” осуществления операции ввода двоичного кода необходимого числа и достаточного времени для отображения предыдущего символа перед сменой его на другой.


 

А также другие работы, которые могут Вас заинтересовать

25376. Социальная работа как вид профессиональной деятельности: объекты и субъекты 35 KB
  чтобы понять сущность социальной работы как профессионального вида деятельности необходимо дать определение рядовому понятию деятельность. Деятельность это способ существования и развития социальной действительности проявление социальной активности целенаправленное отражение и преобразование окружающего мира. Основой социальной работы в России выступает благотворительность уходящая своими корнями в глубокую древность. Профессия социальный работник специалист по социальной работе официально зарегистрированы в мартеапреле...
25377. Основные тенденции истории социальной работы за рубежом 62.5 KB
  Основные тенденции истории социальной работы за рубежом Периодизация истории социальной работы за рубежом повторяет основные периоды в истории развития народов: 1.Развитие социальной работы в новое время середина XVII начало XX в.Развитие социальной работы в новейшее время XXв. Кроме этой классификации не менее распространена следующая: пять периодов в истории социальной работы за рубежом: 1.
25378. Основные тенденции становления социальной работы в России 133 KB
  Родоплеменные и общинные формы помощи и взаимопомощи у славян до Х в. Самыми распространенными формами помощи бедным односельчанам являлось кормление по домам призреваемые находились целые сутки в одном доме переходя на следующие в другой и подаяние милостыни но в деревнях денег было мало и подавали чаше всего едой и одеждой. Характеризуется отсутствием государственной систему социальной помощи населению. Самая распространенная форма помощи подача милостыни.
25379. Сущность и классификация технологий социальной работы 36 KB
  Сущность и классификация технологий социальной работы При определении технологий в социальной работе необходимо учитывать общую трактовку социальных технологий особенности социальной работы как одного из видов человеческой деятельности а также особенности объектов субъектов содержания средств и других элементов социальной работы как системы. В отечественной литературе социальные технологии применительно к социальной работе трактуются как совокупность приемов методов и воздействий применяемых социальными службами отдельными учреждениями...
25380. Проблемы эффективности в социальной работе и методы ее оценки 52.5 KB
  Проблемы эффективности в социальной работе и методы ее оценки. Другими важными проблемами ЭСР являются оценка эффективности выбор предметов оценки эффективности; субъекты оценивающие эффективность; методы и методики оценки эффективности; факторы влияющие на эффективность неэффективность. Наиболее типичными разделами методики являются: назначение; контур и предмет оценки эффективности; рекомендуемые методы оценки эффективности их характеристика; порядок определения эффективности; пример расчета эффективности; приложения при...
25381. ОРГАНИЗАЦИОННО-РАСПОРЯДИТЕЛЬНЫЕ МЕТОДЫ В СОЦИАЛЬНОЙ РАБОТЕ 79.5 KB
  ОРГАНИЗАЦИОННОРАСПОРЯДИТЕЛЬНЫЕ МЕТОДЫ В СОЦИАЛЬНОЙ РАБОТЕ Существуют различные позиции относительно систем управления в области социального обслуживания. Административные организационные методы их иногда называют организационнораспорядительными имеют большое значение в практике управления. Если в качестве критерия или основания классификации взять функцию которую выполняют способы административного воздействия в реальном управлении то можно выделить три большие группы: регламентирующие распорядительные и дисциплинарные методы....
25382. Особенности реализации технологии социальной диагностики 43 KB
  Особенности реализации технологии социальной диагностики Социальные технологии могут быть рассмотрены как совокупность операций процедур социального воздействия на пути получения оптимального социального результата. Представление о патологиях состояния общества или индивидов и групп в этом обществе как о социальных болезнях утвердилось вместе с зарождением социальной работы. Распознавание социальной патологии которую желательно изжить или социальной проблемы которую необходимо разрешить вызывает в первую очередь вопрос о том что...
25383. Особенности реализации технологии социальной профилактики 40.5 KB
  Технология социальной работы это совокупность научных знаний средств приемов методов и организационных процедур направленных на оптимизацию объекта социального воздействия. Важный принцип социальной работы состоит в том что помощь людям должна оказываться исходя из их социального и физического состояния. Профилактика является одним из основных и перспективных направлений деятельности в социальной работе.
25384. Социальная адаптация 52 KB
  Она характеризует с одной стороны процесс взаимодействия объекта СР с социальной средой а с другой стороны является отражением результата СР который может выступать критерием ее эффективности. Важнейшая задача адаптационного процесса это проблема выживания человека через приспособление потенций организма индивид с процессами природной и социальной среды. Социальная адаптация представляет собой не только состояние человека но и процесс в течение которого социальный организм приобретает равновесие и устойчивость к влиянию и воздействию...