Лекция № 4 (Лекции МП)
Описание файла
Файл "Лекция № 4" внутри архива находится в папке "Лекции МП". Документ из архива "Лекции МП", который расположен в категории "". Всё это находится в предмете "микропроцессоры" из 7 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "микропроцессоры" в общих файлах.
Онлайн просмотр документа "Лекция № 4"
Текст из документа "Лекция № 4"
ЛЕКЦИЯ № 4.
3. Инкремент.
Увеличение на единицу содержимого заданного регистра F. Если d = 0, то результат сохраняется в регистре W. Если же d = 1, то результат сохраняется в регистре F.
F при d = 1
W при d = 0
INCF F,d (F) + 1 →
Если после выполнения команды регистр обнулится, то установится флаг Z.
4. Декремент.
Уменьшение на единицу содержимого заданного регистра F. Если d = 0, то результат сохраняется в регистре W. Если же d = 1, то результат сохраняется в регистре F.
F при d = 1
W при d = 0
DECF F,d (F) − 1 →
Если после выполнения команды регистр обнулится, то установится флаг Z.
5. Команды очистки.
5.1. Очистить содержимое заданного регистра F и установить флаг Z:
CLRF F 0 → (F) Z = 1
5.2. Очистить содержимое рабочего регистра W и установить флаг Z:
CLRW W 0 → (W) Z = 1
5.3. Сброс сторожевого таймера (Watch Dog) и установка флагов TO и PD в регистре STATUS:
CLRWDT 0 → (WDT)
III.) Команды логических операций.
Сюда входят:
-
Команды конъюнкции (в двух вариантах).
-
Команды дизъюнкции (в двух вариантах).
-
Команды исключающего «ИЛИ» (в двух вариантах).
-
Команда инверсии.
-
Команды сдвига (в двух вариантах).
1. Команды конъюнкции.
1.1. Побитно выполняется логическое «И» содержимого рабочего регистра W и константы:
Если после выполнения команды регистр обнулится, то установится флаг Z.
1.2. Побитно выполняется логическое «И» содержимого рабочего регистра W и содержимого заданного регистра F. Если d = 0, то результат сохраняется в регистре W. Если же d = 1, то результат сохраняется в регистре F.
F при d = 1
W при d = 0
ANDWF F,d (F) (W) →Если после выполнения команды регистр обнулится, то установится флаг Z.
2. Команды дизъюнкции.
2.1. Побитно выполняется логическое «ИЛИ» содержимого рабочего регистра W и константы:
Если после выполнения команды регистр обнулится, то установится флаг Z.
2.2. Побитно выполняется логическое «ИЛИ» содержимого рабочего регистра W и содержимого заданного регистра F. Если d = 0, то результат сохраняется в регистре W. Если же d = 1, то результат сохраняется в регистре F.
F при d = 1
W при d = 0
IORWF F,d (F) (W) →Если после выполнения команды регистр обнулится, то установится флаг Z.
3. Команды исключающего «ИЛИ».
3.1. Побитно выполняется исключающее «ИЛИ» содержимого рабочего регистра W и константы:
Если после выполнения команды регистр обнулится, то установится флаг Z.
3.2. Побитно выполняется исключающее «ИЛИ» содержимого рабочего регистра W и содержимого заданного регистра F. Если d = 0, то результат сохраняется в регистре W. Если же d = 1, то результат сохраняется в регистре F.
F при d = 1
W при d = 0
Если после выполнения команды регистр обнулится, то установится флаг Z.
4. Команда инверсии.
Побитно инвертируются все разряды заданного регистра F. Если d = 0, то результат сохраняется в регистре W. Если же d = 1, то результат сохраняется в регистре F.
F при d = 1
W при d = 0
COMF F,d ( ) →Если после выполнения команды регистр обнулится, то установится флаг Z.
5. Команды сдвига.
-
Выполняется циклический сдвиг влево содержимого заданного регистра F через бит C
регистра STATUS. Если d = 0, то результат сохраняется в регистре W. Если же d = 1, то результат сохраняется в регистре F.
RLF F,d
Команда влияет на сдвиг переноса C.
Пример: RLF REG1,0
До выполнения команды: REG1 = 11100110
С = 0
После выполнения команды: REG1 = 11100110
W = 11001100
С = 1
5.2. Выполняется циклический сдвиг вправо содержимого заданного регистра F через бит C
регистра STATUS. Если d = 0, то результат сохраняется в регистре W. Если же d = 1, то результат сохраняется в регистре F.
RRF F,d
Команда влияет на сдвиг переноса C.
Пример: RRF REG1,0
До выполнения команды: REG1 = 11100110
С = 0
После выполнения команды: REG1 = 11100110
W = 01110011
С = 0
IV. Команды битовых операций.
4.1. Выполняется установка бита в заданном регистре F (номер разряда регистра указывает b):
BSF F,b
Пример: BSF STATUS,5 1 → STATUS.5
4.2. Выполняется сброс бита в заданном регистре F (номер разряда регистра указывает b):
BCF F,b
Пример: BCF STATUS,5 0 → STATUS.5
V. Команды передачи управления.
Сюда входят:
-
Команда безусловного перехода.
-
Команды условных переходов (в четырех вариантах).
-
Команда вызова подпрограммы.
-
Команды возврата из подпрограммы (в трех вариантах).
1. Команда безусловного перехода.
Одиннадцать бит адреса загружаются из кода команды в счетчик команд PC<10:0>. Счетчик команд модифицируется по метке. Метку ассемблер переведет в число. Это обеспечивает переход в пределах 1 страницы. Переход на другую страницу осуществляется с помощью регистра PCLATH. При этом, два старших бита загружаются в счетчик команд PC<12:11> из регистра PCLATH. Тогда команда GOTO перейдет на другую страницу, но её предварительно нужно указать. Команда GOTO выполняется за два цикла.
GOTO Метка
2. Команды условных переходов.
2.1. Если бит b в заданном регистре F равен нулю, то исполняется следующая команда. Если бит b в заданном регистре F равен единице, то следующая по порядку указанная команда пропускается и выполняется команда через одну.
BTFSS F,b Если (F.b) = 0, то (PC) + 1 → (PC)
Если (F.b) = 1, то (PC) + 2 → (PC)
2.2. Если бит b в заданном регистре F равен единице, то исполняется следующая команда. Если бит b в заданном регистре F равен нулю, то следующая по порядку указанная команда пропускается и выполняется команда через одну.
BTFSC F,b Если (F.b) = 1, то (PC) + 1 → (PC)
Если (F.b) = 0, то (PC) + 2 → (PC)
2.3. Выполняется декремент и проверка на ноль. Для этого: содержимое заданного регистра F декрементируется. Если d = 0, то результат сохраняется в регистре W. Если же d = 1, то результат сохраняется в регистре F. Независимо от того, куда отправили, результат проверяется на ноль. Если результат не равен нулю, то выполняется следующая по списку команда, а если результат равен нулю, то следующая по порядку указанная команда пропускается и выполняется команда через одну.
F при d = 1; Если (F) = 0, то (PC) + 2 → (PC)
Если (F) ≠ 0, то (PC) + 1 → (PC)
W при d = 0; Если (W) = 0, то (PC) + 2 → (PC)
Если (W) ≠ 0, то (PC) + 1 → (PC)
DECFSZ F,d (F) – 1 →
2.4. Выполняется инкремент и проверка на ноль. Для этого: содержимое заданного регистра F инкрементируется. Если d = 0, то результат сохраняется в регистре W. Если же d = 1, то результат сохраняется в регистре F. Независимо от того, куда отправили, результат проверяется на ноль. Если результат не равен нулю, то выполняется следующая по списку команда, а если результат равен нулю, то следующая по порядку указанная команда пропускается и выполняется команда через одну.
F при d = 1; Если (F) = 0, то (PC) + 2 → (PC)
Если (F) ≠ 0, то (PC) + 1 → (PC)
W при d = 0; Если (W) = 0, то (PC) + 2 → (PC)
Если (W) ≠ 0, то (PC) + 1 → (PC)
INCFSZ F,d (F) + 1 →
3. Команда вызова подпрограммы.
Команда CALL выполняется за два цикла. Сначала текущее значение счетчика команд помещается в стек по адресу, указанному указателем стека. Затем одиннадцать бит адреса расположения подпрограммы загружаются из кода команды в счетчик команд PC <10:0>, а два старших бита загружаются в счетчик команд PC <12:11> из регистра PCLATH.
(PC) → ((SP));
CALL “NAME” (PC<10:0>) ← “NAME”;
(PC<12:11>) ← (PCLATH<4:3>).
4. Команды возврата из подпрограммы.
4.1. Выполняется возврат из подпрограммы. Для этого: Указатель стека сначала модифицируется, а потом адрес возврата загружается в счетчик команд PC:
RETURN (SP) + 1→ (SP); ((SP)) → (PC)
4.2. Выполняется возврат из подпрограммы c загрузкой константы в W. Для этого: Указатель стека сначала модифицируется, а потом адрес возврата загружается в счетчик команд PC. Помимо этого, число, указанное в команде, записывается в рабочий регистр W.
RETLW L (SP) + 1→ (SP); ((SP)) → (PC); L → (W)
4.3. Выполняется возврат из подпрограммы с разрешением прерываний. Для этого: Указатель стека сначала модифицируется, а потом адрес возврата загружается в счетчик команд PC. Помимо этого, флаг глобального разрешения прерываний GIE (INTCON<7>) устанавливается в единицу.
RETFIE (SP) + 1→ (SP); ((SP)) → (PC); 1 → GIE
VI. Безадресные команды.
6.1. Нет операции. Пустая (холостая) команда:
NOP
Пример: HERE NOP
До выполнения команды: PC = адрес HERE
После выполнения команды: PC = адрес HERE + 1
6.2. Выполняется переход в энергосберегающий режим SLEEP. Для этого: Сбросить флаг включения питания PD в ноль. Установить флаг переполнения WDT – TO в единицу. Очистить таймер WDT и его предделитель. Перевести микроконтроллер в энергосберегающий режим SLEEP и выключить тактовый генератор.
Структурная схема подпрограммы задержки на заданный интервал.
Подпрограмма задержки на заданный интервал.
I. ВАРИАНТ: DELAY: MOVLW K1 ; K – число от 0 до 255 MOVWF COUNT1 AGAIN: DECF COUNT1,F BTFSS STATUS,2 GOTO AGAIN ; если Z = 0 RETURN ; если Z = 1 Определим, сколько времени выполняется эта подпрограмма: 1 мкс + 1 мкс + 1 мкс + K1 ∙ 3 мкс + 1 мкс | II. ВАРИАНТ: DELAY: MOVLW K1 MOVWF COUNT1 DECFSZ COUNT1 GOTO $−1 RETURN Определим, сколько времени выполняется эта подпрограмма: 1 мкс + 1 мкс + 1 мкс + K1 ∙ 2 мкс + 1 мкс |
Основные директивы Ассемблера для PIC – контроллеров.
Директивы (псевдокоманды) – это команды, которые входят в состав исходного текста программы, но не порождают машинный код.
1.) TITLE – определение заголовка программы. Есть ограничение: не более 60 символов (пробел – тоже символ). В заголовке указывается: автор, время или число, демонстрационная отладочная плата и используемые модули. Эта директива будет указана в листинге на каждой странице. Это необязательная директива. В комментариях после директивы TITLE: после точки с запятой русскими словами пишем в 5 строчек содержимое (определение) программы.
Например: TITLE "< title_text >" ; Вывод показания АЦП на ЖКИ.
2.) LIST – список параметров. Совершенно обязательная директива, в которой указывается тип микроконтроллера. Директива LIST должна быть размещена на отдельной строке. Причем, все параметры директивы LIST указываются в десятичных числах, а буква P – может писаться как прописная или как заглавная.
Например: LIST P = 16F873