
- •Элементы и устройства автоматики. Часть 1
- •Алматы 2006
- •Внимание! Далее во всех лабораторных работах создавайте окно наблюдения за всеми регистрами.
- •Программа 2.1
- •Фрагмент 4.1. Программирование клавиатуры.
- •Приложение г Описание некоторых команд микропроцессора pic
- •Перевод чисел из двоичной системы в шестнадцатеричную и обратно
Программа 2.1
include <p16F877.inc>
R1 EQU h’20’ ; R1 – символьное имя со значением 20h (адрес регистра).
R2 EQU h’24’ ; R2 – символьное имя со значением 24h (адрес регистра).
org 0x000
nop
nop
nop
org 05h
START ; Начало исполняемой части программы.
CLRF STATUS ; Очистка регистра, выбор банка 0.
BSF STATUS, RP0 ; Выбор банка 1.
CLRF TRISC ; Конфигурировать все биты порта C как выход.
CLRF STATUS ; Выбор банк 0.
CLRF PORTC ; Записать в порт С нули (потушить световоды).
; Ввод данных R2>R1.
MOVLW 0FAh ; Запись константы FAh в W.
MOVWF R2 ; Запись константы FAh в регистр R2.
MOVLW 02h ; Запись константы 02h в W.
MOVWF R1 ; Запись константы 02h в регистр R1.
SUBWF R2,0 ; Вычитание R2 - R1(W). Результат пересылаем в W.
MOVWF PORTC ; Загрузить содержимое W в регистр PORTС.
MOVF R2,0 ; Запись константы FAh в регистр W.
ADDWF R1,0 ; Сложение R1+R2(W). Результат записывается в W.
MOVWF PORTC ; Загрузить содержимое W в регистр PORTС
MOVF R2,0 ; Запись константы FAh в регистр W.
ANDWF R1,0 ; Логическое умножение R1 AND R2, результат в W.
MOVWF PORTC ; Загрузить содержимое W в регистр PORTС
COTO $ ; Зацикливание программы на этой строке.
END
Во фрагменте программы 2.2 показано применение операций инверсия, стирание бита, обмен полубайтами, сдвиг вправо.
Фрагмент программы 2.2.
MOVLW B'11110000' ; Запись константы в аккумулятор W.
MOVWF PORTC ; Копирование константы из W в порт С.
COMF PORTC,1 ; Инвертирование порта С. Результат - в порт С.
MOVWF PORTC ; Копирование константы из W в порт С.
BCF PORTC,7 ; Сброс седьмого бита порта С.
MOVWF PORTC ; Копирование константы из W в порт С.
SWAPF PORTC,1 ; Обмен полубайтами порта С.
BCF STATUS,0 ; Записать нуль в бит С регистра status.
MOVWF PORTC ; Копирование константы из W в порт С.
RRF PORTC,1 ; Сдвиг вправо порта С. Результат - в порт С.
Задания к выполнению лабораторной работы на УМК-7
Задание 1. Запустите подготовленную дома программу по заданию 2.1. Результаты работы всех команд запишите в таблицу 2.3.
Таблица 2.3- Пример записи результатов работы команды ADDWF
Двоичные числа на входе |
Команда |
Число на выходе в порте С |
||
R1 |
R2 |
Форма b |
Форма h |
|
11111010 |
00000010 |
ADDWF (R1+W) |
11111100 |
FС |
Внимание! Не забывайте создавать окно наблюдения для всех регистров в необходимом формате чисел.
Задание 2. Запустите подготовленную дома программу по заданию 2.2. Результаты работы всех команд запишите в таблицу 2.4
Таблица 2.4- Пример записи результатов работы команды BCF
Число на входе |
Команда |
Число на выходе в порте С |
||
Форма b |
Форма h |
Форма b |
Форма h |
|
11110000 |
F0 |
BCF (7-й бит) |
01110000 |
70 |
Контрольные вопросы
Какие действия выполняют команды ADDWF, SUBWF?
Какие действия выполняют команды ANDWF, IORWF?
Почему для записи чисел использованы адреса начиная с 20h.
Приведите команды установки и сброса битов.
Как происходит сдвиг вправо (влево). Какой бит регистра status меняется при операции сдвига?
Расскажите об операции инверсия.
Расскажите об операции «поменять местами полубайты».
Лабораторная работа 3. Сравнение чисел. Маскирование. Организация переходов. Использование косвенной адресации.
Цель работы: Использование флагов регистра status для сравнения чисел. Изучение команд маскирования, Изучение, программных способов маскирования данных. Использование косвенной адресации.
Оборудование и программное обеспечение: Windows98, среда MPLAB, комплекс УМК-7.
Задания для домашней подготовки
Задание 1. Изучите операции по организации условных переходов BTFSC и BTFSS по приведенным ниже фрагментам программ.
Проверка бита CARRY
BTFSS STATUS, C ; Если в бите С установлена единица, то ; пропустить следующую команду (GOTO МЕТКА) и выполнить команду 1.
GOTO METKA
Команда 1
Проверка бита ZERO
BTFSS STATUS, Z ; Если в бите Z установлена единица, то ; пропустить следующую команду (GOTO МЕТКА) и выполнить команду 2.
GOTO METKA
Команда 2
Изучите фрагмент 3.1 для проверки бита С и вывода меньшего чиста на светодиоды. Во фрагменте уменьшаемое обозначено как UMENSH.
Ф
рагмент
3.1.
MOVLW B’Число 1’ ; Число 1 à W
MOVWF R1 ; W à R1
MOVWF UMENSH ; W àUMENSH
MOVLW B’Число 2’ ; Число 2 àW
MOVWF R2 ; W à R2
SUBWF UMENSH,1 ; UMENSH=
; UMENSH – W=
; = R1 – R2
BTFSS STATUS,C ; C = 1?
MOVF R1,0 ; R1 à W
MOVWF PORTC ; W à PORTC
Задание 2. Подготовьте программу 3.1 по заданию 3.1 из таблицы 3.1, использующую значения флагов из таблицы 3.2 и выполняющую действия:
сравнение чисел, расположенных в разных регистрах. Большее число выводится на светодиоды;
сравнение одинаковых чисел R1 и R1.
При написании программы используйте блок-схему на рисунке 3.1.
Рекомендация. При написании программы создайте символьные переменные для хранения заданных чисел.
Таблица 3.1 - Варианты задания 3.1
Вари- ант |
Число R1 |
Число R2 |
Вари- ант |
Число R1 |
Число R2 |
1 |
00111100 |
00001111 |
6 |
11100001 |
00110011 |
2 |
01100111 |
11110000 |
7 |
11001111 |
00111011 |
3 |
00011110 |
00111100 |
8 |
10010110 |
01101010 |
4 |
11110000 |
10101010 |
9 |
01110110 |
00101011 |
5 |
11000011 |
01010101 |
10 |
01100001 |
00111011 |
Таблица 3.2 – Флаги команды SUBWF UMENSH,d то, есть (UMENSH - W)
Соотношения значений в рабочем регистре (W) и регистре общего назначения (UMENSH) |
Значения флагов регистра status |
||
Z |
DC |
C |
|
UMENSH>W |
0 |
1 |
1 |
UMENSH<W |
0 |
0 |
0 |
UMENSH=W |
1 |
1 |
1 |
Примечание – Регистр UMENSH это уменьшаемое при вычитании |
Задание 3. Изучите способы организации программ с косвенной адресацией на примере приведенных ниже фрагментов. Регистр FSR хранит адрес ячейки, к которой происходит обращение через имя формально существующего регистра INDF.
Обратите внимание на то, что в составе команд микропроцессора нет команд условного перехода, поэтому циклические структуры организуются с помощью операторов условий совместно с оператором перехода.
Изучите фрагмент программы 3.2, предназначенной для сложения массива чисел, расположенных по адресам 24h…27h:
Фрагмент 3.2. Суммирование массива.
MOVLW REG24 ; Запись адреса регистра общего назначения (РОН)
; 24h с символьным именем REG24 в регистр W.
MOVWF FSR ; Запись в регистр FSR адреса РОН.
CLRW ; Очистка рабочего регистра W перед суммированием.
NEXT
ADDWF INDF, 0 ; Сложить значение рабочего регистра W и РОН
; с сохранением результата в рабочем регистре W.
INCF FSR, 1 ; Увеличение указателя адреса FSR на единицу.
BTFSS FSR, 3 ; Проверка – все выполнено? Дошли до адреса 28h?
GOTO NEXT ; Если нет, не дошли переходим на метку NEXT,
MOVWF PORTC ; если да, дошли выводим сумму на светодиоды.
Примечание – При достижении адреса 28h, появляется ‘1’ в третьем разряде двоичной формы числа 28h=В’00101000’.
Аналогично пишется программа для очистки массива информации в оперативной памяти.
Задание 4. Используя приведенный фрагмент 3.2, подготовьте программу 3.2 по заданию 3.2 из таблицы 3.3, выполняющую сложение указанных регистров.
Таблица 3.3 – Варианты задания 3.2
Вариант |
Число |
Маска |
Адреса регистров массивов |
Вариант |
Число |
Маска |
Адреса регистров массивов |
1 |
10110011 |
11000001 |
20h - 23h |
6 |
00111001 |
11100110 |
44h - 47h |
2 |
10011111 |
00110010 |
24h - 27h |
7 |
11011100 |
01101100 |
50h - 53h |
3 |
10101001 |
01110011 |
30h - 33h |
8 |
10001110 |
01001111 |
54h - 57h |
4 |
01110111 |
01010100 |
24h - 37h |
9 |
00111001 |
00110001 |
60h - 63h |
5 |
01101101 |
10100101 |
40h - 43h |
10 |
01110101 |
10010111 |
64h - 67h |
Примечание – Во все регистры массива в качестве числовых данных записать номер варианта. Для массивов использовать символьные имена. |
Задание 5. Ознакомьтесь с правилами маскирования с помощью логических операций:
логическое умножение (AND) исходного числа и числа-маски очищает разряд числа в исходном числе, если в соответствующем разряде числа-маски записан 0, и не изменяет его, если в разряде маски записана 1. Применяется для очищения нескольких разрядов в числе;
логическое сложение (OR) исходного числа и числа-маски устанавливает в разряд исходного числа 1, если в таком же разряде маски будет записана 1, и не изменяет его, если в этом разряде записан 0. Применяется для установки нескольких бит в числе;
логическое «исключающее ИЛИ» (XOR) исходного числа и числа-маски инвертирует содержимое бита исходного числа, если в соответствующем разряде числа маски записана 1, и не изменяет его, если в этом разряде записан 0. То есть эта команда реагирует на различие между разрядами исходного числа и слова- маски. Часто применяется для определения равенства регистра какому-либо числу.
Примеры результатов маскирования приведены в таблице 3.4.
Таблица 3.4 – Результаты применения масок по фрагментам 3.3, 3.4 и 3.5
Объекты |
Операция |
||
OR (установка бит) |
AND (очистка бит) |
XOR (проверка на равенство) |
|
Число |
10101010 |
10101010 |
10101010 |
Маска |
11110000 |
11110000 |
10101010 |
Результат |
11111010 |
10100000 |
00000000 |
Задание 6. Изучите приемы маскирования с помощью логических операций, рассмотрев фрагменты программ 3.3, 3.4, 3.5.
Фрагмент 3.3. Процедура установки четырех бит с помощью команды логического сложения.
MOVLW B’10101010’ ; Загрузить константу ААh в регистр W.
MOVWF PORTC ; Переслать число в порт С.
MOVLW B’11110000’ ; Установить маску в регистр W.
IORWF PORTC, 1 ; Установить биты в порте C по маске из W.
Фрагмент 3.4. Сброс четырех бит путем логического умножения.
MOVLW B’10101010’ ; Загрузить константу ААh в регистр W.
MOVWF PORTC ; Установить единицы во все биты порта C.
MOVLW B’11110000’ ; Установить маску в регистре W.
ANDWF PORTC, 1 ; Очистить биты в порте С по маске W.
Фрагмент 3.5. Процедура определения равенства чисел.
MOVLW 0ААh ; Загрузить ААh в регистр W.
MOVWF REG1 ; Загрузить ААh W в REG1 .
XORWF REG1, 0 ; Применяем логическую операцию и ; результат записываем в W.
MOVWF PORTC ; Проверяем светодиодами результат в порте С.
Задание 7. Подготовьте программу 3.3, выполняющую маскирование для заданного варианта из таблицы 3.2.
Задание к выполнению лабораторной работы на УМК-7
Задание 1. Введите подготовленную дома программу по заданию 3.1, создайте проект, запустите проект. Запишите результат.
Внимание! Не забудьте создать окно наблюдения для всех регистров.
Задание 2. Ввести в микропроцессор подготовленную в домашнем задании программу 3.2. Записать результаты в таблицу 3.4.
Задание 2. Ввести в микропроцессор подготовленную в домашнем задании программу 3.3. Записать результаты в таблицу 3.5.
Таблица 3.5 – Результаты суммирования массива
Вариант |
Адрес регистра массива |
Число в регистре массива |
Сумма в регистре W |
11 |
70h |
0Bh |
0Bh |
|
71h |
0Bh |
16h |
|
72h |
0Bh |
21h |
Контрольные вопросы
Какие разряды регистра status меняют свои значения при логических и математических операциях?
Поясните команду условного перехода BTFSC.
Поясните команду условного перехода BTFSS.
Какую логическую операцию надо использовать, чтобы очистить (установить) определенные разряды.
Какую логическую операцию надо использовать, чтобы определить равенство чисел?
Какие способы адресации вы знаете?
Как при косвенной адресации устанавливается номер банка?
Лабораторная работа 4. Программирование клавиатуры. Написание подпрограмм и обращений к ним
Цель работы: обучение программированию ввода с клавиатуры. Закрепление навыков организации условных переходов и инициализации портов. Обучение написания и обращение к подпрограммам.
Оборудование и программное обеспечение: Windows98, среда MPLAB, комплекс УМК-7.
Задания для домашней подготовки
З
адание
1. Изучите схему подключения клавиатуры
на УМК-7, изображенную на лицевой панели
стенда (рисунок 4.1). Здесь в виде контактов
изображены кнопки клавиатуры. На рисунке
4.2 приведена, как пример, схема подключения
кнопки с цифрой «1» к порту D.
Одна клемма кнопки «1» подключена к
выводу RD7, а вторая клемма
кнопки «1» подключена к выводу RD3.
Предположим, что бит RD7
запрограммирован на выход, а бит
RD3 на вход. Когда кнопка нажата, с
выходного бита RD7 проходит
сигнал через кнопку «1» на клемму
RD3, запрограммированную на вход. В
случае появления сигнала на RD3,
можно зажечь один или несколько
светодиодов, подключенных к клеммам
порта С. Предположим, требуется
зажечь один светодиод, подключенный к
клемме RC6.
Задание
2. Изучите программу 4.1, выполняющую
описанные действия и демонстрирующую
зажигание светодиода, подключенного к
выводу RC7.