![]() | |
НПО Системы Безопасности (499)340-94-73 График работы: ПН-ПТ: 10:00-19:00 СБ-ВС: выходной ![]() ![]() |
Главная » Периодика » Безопасность 0 ... 112113114115116117118 ... 159 ПЕРЕХОД ЗА ПРЕДЕЛЫ ТЕКУЩЕЙ СТРАНИЦЫ В общем случае для микроконтроллеров младшего подсемейства межстраничный переход имеет вид: movf STATUS, w ; Модификация трех старших бит andlw OxOIF ; регистра состояния, lorlw HIGH ((Label << 4) & ОхОЕО) movwf STATUS goto (Label & OxOIFF) ($ & OxOEOO) Межстраничный переход в PIC-микроконтроллерах, принадлежащих к среднему подсемейству, и в микроконтроллерах PIC iVCxx выглядит так: movlw HIGH label : Получение номера текущего : блока (256 команд), movwf PCLATH : Сохранение его таким образом, , чтобы последующий переход ; был корректным, goto Label & 0x07FF) ($ & 0x01800) Приведенный ниже фрагмент выполняет межстраничный переход (goto и call) в микроконтроллерах PIC 18Схх. Переход может осуществляться в пределах всей памяти программ. В нем использована команда branch always - BRA: movlw UPPER Label movwf PCLATU Получение номера текущего блока команд. Сохранение его таким образом, чтобы последующий переход , был корректным, movlw HIGH Label movwf PCLATH bra (Label & 0x07FF) ($ & OxOIEOOO) Если используется команда вызова (call) подпрограммы с другой страницы, необходимо убедиться в том, что содержимое PCLATH (и PCLATU) восстанавливается после возврата из подпрограммы. ТАБЛИЦЫ В общем случае программная таблица в PIC-микроконтроллерах младшего подсемейства описывается следующим образом: Tablel ; Возврат значения из таблицы, ; расположенной в любом месте памяти, , в регистр W movwf Temp movf STATUS, w andlw iorlw ftiovwf movlw addwf movwf Сохранение табличного указателя. Подготовка к модифицикации трех старших бит регистра состояния. OxOIF HIGH {{TableEntries << 4) & ОхОЕ) STATUS LOW TableEntries Temp, w Задание блока. Вычисление смещения в блоке. Запись правильного адреса в программный счетчик. TableEnt ries dt Table", В PIC-микроконтроллерах младшего подсемейства указатель на TableEntries ни при каких обстоятельствах не должен оказаться во втором блоке страницы. В общем случае программа табличной выборки микроконтроллеров среднего подсемейства и PIC 17Схх имеет вид: ТаЫе2 novwf Temp Mvlw HIGH TableEntries Mvwf PCLATH roovwf Temp, w addlw LOW TableEntries btfsc STATUS, С incf PCLATH, f movwf PCL TableEnt dt Возврат табличного в регистр w. Сохранение таблично Получение номера те Сохранение его таки чтобы последующий п был правильным. Соответственно movf для PIG 17СХХ. Прибавление младших Если в следующем бл то инкрементируется PCLATH. Запись правильного в программный счетч значения го указателя, кущего блока, м образом, ереход р Temp, WREG разрядов. оке, содержимое адреса ик. ries "Table", Если используется PIC-микроконтроллер 18Схх, необходимо умножить указатель на два, прежде чем изменить PCL, а также обновить содержимое PCLATU и PCLATH: Tables movwf Temp movlw UPPER TableEntries Возврат табличного значения в регистр W. Сохранение табличного указателя Получение номера текущего блока.
Сохранение его таким образом, чтобы последующий переход был правильным. Умножение указателя на два. Если установлен перенос, инкрементируется PCLATH/PCLATU Смещение в таблице При необходимости инкрементируется PCLATH/PCLATU. Запись правильного адреса в программный счетчик ВЕТВЛЕНИЕ ПО УСЛОВИЮ В табл. 1I.I представлены фрагменты, используемые для различных типов сравнений и последующих переходов по условию. Обратите внимание, что в нее включены команды, оперирующие и переменными, и константами. ВРЕМЕННЫЕ ЗАДЕРЖКИ Ниже приведен макрос, генерирующий задержку от О до 777 циклов. DlayMacro Macro Cycles ; Задержка. variables i, Tcycles, Value, Tflag TCycles = Cycles Value = 1 << 7 1 = 7 TFlag = 0 TFlag = 0 If (TCycles > 5) while (i >= If ((TFlag = = 0) ((Value . 3) <= TCycles)) DlayCount, 1 0 ... 112113114115116117118 ... 159 |