Студопедия — SWAPF f, d
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

SWAPF f, d






Ця команда змінює місцями напівбайт в заданому регістрі. Як і для інших команд, при d = 0 результат записується в робочий регістр W, а при d = 1 заноситься в регістр, заміщаючи колишнє його вміст.

 

RRF f, d C FC

RLF f, d CFC

В Асемблері PIC є дві команди зсуву - зрушення вправо через ознака C будь-якого регістра f (RRF) і зрушення вліво через ознака C будь-якого регістра f (RLF). Як і для інших команд, при d = 0 результат зсуву записується в регістр W, а при d = 1 залишається в регістрі f.

У всіх випадках біт, що висувається з 8-бітного регістру f, записується як ознака C в регістр STATUS і формує тим самим значення ознаки C (CARRY), а на місце звільняється при зсуві розряду регістра f записується значення ознаки C з регістра STATUS, яке було сформовано до моменту виконання даної команди.

При зсуві вліво (RLF) значення ознаки C записується в молодший біт регістра, а при зсуві вправо (RRF) - в старший біт регістра.

Інструкції зсуву використовуються для виконання операцій множення і ділення, для послідовної передачі даних і для інших цілей.

 

BCF f, b

BSF f, b

Команди очищення біта BCF і установки біта BSF використовуються для роботи з окремими бітами в регістрах. Параметр b означає номер біта, з яким проводиться операція, і може приймати значення від 0 до 7.

 

BTFSC f, b

BTFSS f, b

Команди умовних переходів BTFSC і BTFSS перевіряють стан заданого біта в будь-якому регістрі і залежно від результату пропускають чи ні наступну команду. Команда BTFSC пропускає команду, якщо заданий біт скинутий, а команда BTFSS - якщо

встановлений.

 

CALL k

RETURN

 

Ці дві команди призначені для роботи з підпрограмами.

 

Команда CALL використовується для переходу на підпрограму за адресою, що задається в команді, а команда RETURN - для повернення з підпрограми. Обидві команди виконуються за 2 циклу. Адреса команди, наступної після команди CALL, запам'ятовується в стеку. Стек недоступний для звернення і використовується тільки при викликах підпрограм і поверненнях з них. Глибина стека, тобто число спеціальних регістрів, що входять до його складу, дорівнює 8. Тому з основної програми можна зробити не більше 8 вкладених викликів підпрограм. Останньою командою підпрограми завжди є команда RETURN, при виконанні якої адресу з стека записується в РС, і таким чином після повернення з підпрограми виконання основної програми продовжується з наступного після CALL команди. Відзначимо особливо, що оскільки в більшості випадків регістр W і регістр STATUS можуть

бути використані в підпрограмі, їх вміст на момент виклику підпрограми буде втрачено. Тому при виклику підпрограми їх вміст потрібно зберегти у вільних ячейках пам'яті, а перед командою RETURN помістити команди, що відновлюють їх вміст на момент виклику підпрограми.

 

RETLW k

RETFIE

Існують ще дві команди, призначені для повернення з підпрограм. Команда RETLW записує при поверненні в робочий регістр W константу, задану в цій команді, а команда RETFIE використовується при поверненні з переривання.

 

 

Спеціальні команди

 

Залишилося згадати про двох спеціальних командах - CLRWDT і SLEEP.

 

Команда CLRWDT призначена для програмного скидання сторожового таймера (WDT). Ця команда має бути присутня в таких ділянках програми, щоб час виконання програми між двома сусідніми командами CLRWDT не перевищувало періоду спрацьовування сторожового таймера, тобто інтервалу часу, протягом якого WDT проходить всі стани і повертається в початковий стан (апаратний скидання). Програмне скидання не впливає на роботу системи, виникнення апаратного скидання вказує на наявність збою в роботі системи, викликаного зацикленням програми. Обробка переривання, викликаного апаратним скиданням, передбачає дії, спрямовані на усунення наслідків від збою.

Команда SLEEP призначена для перекладу процесора в режим зниженого енергоспоживання. Після виконання цієї команди тактовий генератор процесора вимикається, і назад в робочий режим процесор можна перевести або по входу скидання, або по спрацьовуванню сторожового таймера, або по перериванню.

Система команд наведена в табл. П11.1. Більшість команд виконується за 1 цикл (4 такту, 200 нс при F = 20 МГц). Команди байтовой обробки включають звичайний набір арифметичних, логічних і зсувних операцій. При наявності двох операндів один з них завжди знаходиться в акумуляторі W.

Для організації циклів і умовних переходів в програмі використовуються команди пропуску DECFSZ, INCFSZ, BTFSC, BTFSS, які в разі виконання заданої умови пропускають наступну команду - збільшують лічильник команд PC відразу на 2.

При переходах по команді GOTO 11бітовий адресу переходу з коду команди завантажується в розряди PC.10-0, а два старших розряду беруться з 5бітового регістра PCLATH (PC.12-11 = PCLATH. 4-3), т. е. без переустановки PCLATH перехід можливий в межах 2 Кслов.

Аналогічно формується адреса переходу командою CALL, проте вона попередньо рятує в стеку вміст PC. Апаратний стек глибиною 8 слів користувачеві недоступний, завантаження PC з стека здійснюється командами RETURN, RETFIE, RETLW, причому остання команда перед поверненням завантажує в W константу і використовується для організації таблиць даних в пам'яті програм. Формування ознак зазначено в останній графі табл. П11.1, самі ознаки фіксуються в молодших розрядах регістра STATUS (табл. П11.2).

При запису програм на Асемблері ім'я команди можна вказувати малими або великими літерами, в імені змінних ці літери мають різні значення. Цілі числа можна задавати в двійковому, десятковому чи шістнадцятковому форматі в слідую

щей формі:

 

MOVLW b'10100110 '; двійкове чісло11

MOVLW d'166 '; десяткове число

MOVLFSRW 0A6; шестнадцатірічное число

 

Далі в основному використовується шестнадцатірічное форма представлення чисел.

У звичайному тексті і поле коментаря ми будемо використовувати запис типу A6, однак на Асемблері слід записувати 0A6, так як шестнадцатірічное число повинно починатися з цифри.

Для більшості команд байтовой обробки можливі 2 варіанти, наприклад:

ADDWF Adr1, w; W = W + (Adr1)

ADDWF Adr1, f; (Adr1) = W + (Adr1)

 

У першому випадку біт d в коді команди дорівнює 0 і сума залишається в акумуляторі W, у другому випадку d = 1 і сума залишається в осередку з адресою Adr1.

Адреса Adr1 може бути визначений на початку програми як 8-розрядний, однак в код команди транслятор поміщає лише 7 молодших розрядів, а старший розряд адреси вибирається з 5го біта регістра STATUS (це біт реєстрового банку RP0). Якщо Adr1 = 20, то при RP0 = 0 повна адреса буде 20, а при RP0 = 1 повний адресу з

ставить A0.

Необхідність перемикання реєстрового банку RP0 створює певні незручності при складанні програм. Їх можна уникнути при використанні непрямої адресації, якщо попередньо завантажити 8-розрядний адресу в регістр непрямої адресації FSR:

 

MOVLW Adr1; W = Adr1

MOVWF FSR; (FSR) = W

ADDWF INDF, f; ((FSR)) = ((FSR)) + W

 

Нульовий адресу INDF в коді команди ініціює вибірку повного 8-розрядної адреси з регістра FSR, тобто остання команда завжди працює з повною адресою 20. Непряму адресацію зазвичай використовують при необхідності модифікації адреси в програмі, для чого достатньо змінити вміст FSR.

При виконанні роботи необхідно для заданого варіанта програми вказати в полі коментаря динаміку зміни вмісту акумулятора W і осередків 20, 21, 22, 23. Як приклад розглянемо наступний варіант програми:

Title “Lab1.asm”

;

list p=16c74; processor type

errorlevel 1, (305)12

;

#include “p16c74.inc”

;

Buf1 equ 20

Cnt equ 23

RxBufequ 24

org 0; стартовый переход

movlw 0

movwf PCLATH

goto Start

org 100; программа пользователя

Start; начальная установка

call ConstInit

Priem caLL Receiv

movlw 2

xorwf PORTA,f

movlw 3

movwf Cnt

movlw Buf1

movwf FSR

bsf STATUS,C

movf RxBuf,w

; if (RfBuf)=21

; W 20 W 20 21 W 20 21 22 23

Beg1 movwf INDF; 21 21 4 3 67 43 86 67 CF 86

rlf INDF,w; 43 21 86 67 43 0C 67 CF 86

addwf INDF,f; 43 64 86 67 C9 0C 67 CF 92

iorwf INDF,f; 43 67 86 67 CF 0C 67 CF 9E

incf FSR,f

decfsz Cnt,f

End1 goto Beg1

; W 20 21 22 23

movwf INDF; 0C 67 CF 9E 0C

incf FSR,f

movf STATUS,w

movwf INDF

movlw 513

movwf Cnt

movlw Buf1

movwf FSR

Tra movf INDF,w

call Transm

incf FSR,f

decfsz Cnt,f

goto Tra

goto Priem

ConstInit

bsf STATUS,RP0

bcf TRISA,1; диод

movlw b’10000011'

movwf OPTION_REG

movlw d’129'

movwf SPBRG

movlw b’00100100'

movwf TXSTA

bcf STATUS,RP0

clrf INTCON

clrf PORTC

movlw b’10010000'

movwf RCSTA

return

Receiv; прием байта в RxBuf

RecA btfss PIR1,RCIF; check for received data

goto RecA

RecB movf RCREG,w

movwf RxBuf

return

Transm; выдача байта из W

movwf TXREG; transmit byte to PC

bcf PIR1,TXIF

tr3 btfss PIR1,TXIF

goto tr3

return

end

 

На початку програми визначаються значення використовуваних змінних, тобто задається розподіл оперативної пам'яті. Оператор ORG фіксує початкова адреса розміщення кодів програми в постійній пам'яті.

Як згадувалося раніше, завантажувальний модуль передає управління на мітку Start і підпрограма ConstInit виконує настройку асинхронного каналу на швидкість 9600 бод. На мітці Priem програма очікує приходу байта з ПЕОМ. Прийнятий підпрограмою Receiv байт записується в комірку RxBuf, перемикається світлодіод командою XORWF PORTA, f і початкова адреса Buf1 завантажується в Регистр FSR. Встановлюється біт переносу C в регістрі STATUS, і в лічильник циклу Cnt завантажується число 3. Ця частина програми ідентічна для всіх варіантів.

З мітки Beg1 починається конкретний варіант програми. У акумулятор W завантажується початкове значення, і цикл з кількох команд повторюється 3 рази. Вміст акумулятора W і осередків ОЗУ при кожному проході циклу слід вказати в полі коментаря. У циклі виконуються зрушення, арифметичні і логічні команди. Слід враховувати, що біт перенесення формується арифметичними командами і включається в кільце зсуву при виконанні команд RLF, RRF.
Після виходу з циклу вміст W і регістра STATUS записується в осередку 23, 24 і в поле коментаря відзначаються заключні значення всіх змінних. Далі для контролю ці значення в циклі Tra передаються в ПЕОМ по послідовному каналу і відображаються на екрані дисплея. Управління повертається на мітку Priem.

На закінчення зупинимося трохи докладніше на використовуваних підпрограмах. Для завантаження регістрів SPBRG і TXSTA в підпрограмі Init спочатку встановлюється перший регістровий банк. У регістрі TXSTA задається 8бітовий формат, дозвіл видачі, асинхронний режим і підвищена швидкість (табл. П11.2). При частоті кварцу 20 МГц і підвищеної швидкості завантаження десяткового числа d'129 'в регістр SPBRG забезпечує асинхронну передачу зі швидкістю 9600 бод. Потім встановлюється нульовий регістровий банк і в регістрі RCSTA задається дозвіл прийому та 8бітовий формат. Скидання регістра INTCON забороняє переривання.

Прийом байта підпрограмою Receiv починається з циклу очікування готовності на мітці RecA до установки прапора готовності RCIF в регістрі PIR1. Потім байт листується з буфера прийому RCREG в клітинку RxBuf. При видачі байта підпрограмою Transm він спочатку завантажується в буфер видачі TXREG, потім скидається прапор видачі TXIF і програма входить в цикл очікування Tr3 до установки прапора TXIF після закінчення видачі байта з буфера TXREG.







Дата добавления: 2015-10-15; просмотров: 430. Нарушение авторских прав; Мы поможем в написании вашей работы!



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Общая и профессиональная культура педагога: сущность, специфика, взаимосвязь Педагогическая культура- часть общечеловеческих культуры, в которой запечатлил духовные и материальные ценности образования и воспитания, осуществляя образовательно-воспитательный процесс...

Устройство рабочих органов мясорубки Независимо от марки мясорубки и её технических характеристик, все они имеют принципиально одинаковые устройства...

Ведение учета результатов боевой подготовки в роте и во взводе Содержание журнала учета боевой подготовки во взводе. Учет результатов боевой подготовки - есть отражение количественных и качественных показателей выполнения планов подготовки соединений...

Тема 2: Анатомо-топографическое строение полостей зубов верхней и нижней челюстей. Полость зуба — это сложная система разветвлений, имеющая разнообразную конфигурацию...

Виды и жанры театрализованных представлений   Проживание бронируется и оплачивается слушателями самостоятельно...

Что происходит при встрече с близнецовым пламенем   Если встреча с родственной душой может произойти достаточно спокойно – то встреча с близнецовым пламенем всегда подобна вспышке...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия