ЛАБОРАТОРНАЯ РАБОТА № 1
Тема: Исследование работы команд пересылки и арифметических операций контроллеров среднего семейства серии PIC
Цель работы: получение навыков использования команд пересылки и арифметических операций для вычисления простейших арифметических выражений.
1 Сведения об исследуемых командах
1.1 Команды пересылки:
1 MOVLW K – пересылает константу К в аккумулятор.
Пример:
MOVLW 3 – запись числа 3 в аккумулятор.
2 MOVWF F – пересылает содержимое аккумулятора в регистр ОЗУ с адресом F.
Пример:
MOVWF 0x0c – скопирует значение, находящееся в аккумуляторе в регистр с адресом 0x0c ("0c" – число 12 в шестнадцатеричном формате, "0x" перед ним показывает, что число шестнадцатеричное)
3 MOVF F, 0 – пересылает содержимое регистра ОЗУ с адресом F в аккумулятор.
Пример:
MOVF 0x0c , 0 – скопирует значение, находящееся в регистре с адресом 0x0c, в аккумулятор.
1.2 Примеры использования команд пересылки:
а) пусть требуется записать число 5 в регистр с адресом 0x0c. Для этого число сначала нужно записать в аккумулятор, затем из аккумулятора – в регистр:
MOVLW 5
MOVWF 0x0c
б) пусть требуется скопировать содержимое регистра 0x0c в регистр 0x0d. Для этого содержимое регистра 0x0c нужно скопировать в аккумулятор, затем содержимое аккумулятора переместить в регистр 0x0d:
MOVF 0x0c ,0
MOVWF 0x0d
1.3 Команды арифметических операций
1 ADDLW K – складывает константу К с содержимым аккумулятора и оставляет в нем результат.
Пример:
ADDLW 5 – добавит к значению, содержащемуся в аккумуляторе,
число 5
2 ADDWF F, D – складывает содержимое регистра ОЗУ с адресом F с содержимым аккумулятора, результат остается:
а) в аккумуляторе, если D = 0;
б) в регистре F, если D = 1.
Пример:
ADDWF 0x0c,0 – сложит значения аккумулятора и регистра с адресом 0x0c, результат сложения остается в аккумуляторе, значение в регистре не изменяется.
ADDWF 0x0c,1 – сложит значения аккумулятора и регистра с адресом 0x0c, результат сложения остается в регистре, значение в аккумуляторе не изменяется.
3 SUBLW K – вычитает из константы К содержимое аккумулятора и оставляет в нем результат.
Пример:
SUBLW 7 – вычтет из числа 7 значение аккумулятора, результат остается в аккумуляторе.
4 SUBWF F, D – вычитает из содержимого регистра ОЗУ с адресом F содержимое аккумулятора, результат остается:
а) в аккумуляторе, если D = 0;
б) в регистре F, если D = 1.
Пример:
SUBWF 0x0c,0 – вычтет из регистра с адресом 0x0c значение аккумулятора, результат вычитания остается в аккумуляторе.
SUBWF 0x0c,1 – вычтет из регистра с адресом 0x0c значение аккумулятора, результат вычитания остается в регистре, значение в аккумуляторе не изменяется.
1.4 Пример использования команд арифметических операций
Вычислить 3–(0x0c)+(0x0d)–(0x0f), результат оставить в регистре 0x0d
MOVF 0X0C,0 ; W=0X0C
ADDWF 0X0F,0 ; W=0X0C+0X0F
SUBLW 3 ; W=3 – (0X0C+0X0F)
ADDWF 0X0D,1 ; 0X0D= 0X0D+3–(0X0C+0X0F)
2 Порядок выполнения
1 Запустите среду MPLAB 5.01.
2 Создайте новый проект: Project/New. Дайте имя проекту и расширение .pjt. Нажмите ОК. Вы попадете в следующее диалоговое окно редактирования проекта.
3 Подсоедините к проекту файл исходного модуля с тем же именем, что и проект. Для этого нажмите кнопку Add Node, задайте имя файла исходного модуля с расширением .asm. Нажмите ОК.
4 Создайте файл исходного модуля: File/New. Сохраните его с именем, которое дали в предыдущем пункте: File/Save As.
5 В созданном файле наберите программу (варианты заданий находятся в табл. 1 приложения). Команды набираются не ранее, чем со второй позиции в строке, метки – с первой позиции. Комментарии к командам можно писать после точки с запятой – этот текст не воспринимается компилятором.
Программа должна заканчиваться командами:
NOP
END
6 Откомпилируйте набранную программу: Project/Build All. При наличии ошибок (error) исправьте их и откомпилируйте проект заново. Если не можете найти ошибку, откройте файл листинга: File/Open, выберите тип файлов с расширением .lst, найдите имя своего файла с этим расширением, откройте его. Ошибки указаны перед командами, в которых они встретились.
7 Если проект успешно откомпилировался, запустите его в пошаговом исполнении: нажмите F6 для запуска сначала, F7 – переход к следующей команде. Для просмотра результатов выполнения команд откройте окна RAM и SFR. RAM – это окно состояния оперативной памяти, в нем вы видите содержимое ее регистров в шестнадцатеричном формате, и SFR – окно регистров специального назначения, где можно проследить за состоянием аккумулятора. Оба окна открываются щелчком по соответствующим пиктограммам на панели инструментов.
8 Выполните программу. Убедитесь, что результат выполнения совпадает с ожидаемым. Оформите программу в отчете.
3 Содержание отчета
Отчет должен содержать:
- описание команд пересылки и арифметических операций;
- программы для каждой задачи с трассировочными таблицами.
Трассировочная таблица содержит напротив каждой команды результат ее выполнения – содержимое ячеек, которые используются в программе.
Пример оформления задания:
Задание 1.
Вычислить значение выражения (после стрелки указано, где нужно получить результат).
3–(0x0c)+(0x0d)–(0x0f) →(0x0d)
Примечание: символом «х» в трассировочной таблице обозначается неизвестное значение, последняя строка таблицы должна показать, что в заданной ячейке получилось правильное выражение.
Далее показано оформление решения в виде трассировочной таблицы.
Решение.
Команда |
W |
0x0c |
0x0f |
0x0d |
MOVF 0X0C,0 |
(0x0c) |
x |
x |
x |
ADDWF 0X0F,0 |
(0x0c)+(0x0f) |
x |
x |
x |
SUBLW 3 |
3–((0x0c)+(0x0f)) |
x |
x |
x |
ADDWF 0X0D, 1 |
3–((0x0c)+(0x0f)) |
x |
x |
(0x0d)+(3–((0x0c)+(0x0f))) |
Варианты заданий на лабораторную работу № 1
Вариант 1 (0x0c)=2, (0x0f)=7, (0x1d)=35 (0x0c)+(0x0f)→(w) (0x0c)+7+(0x1d)–5→ (0x0c) 15–20+45–(0x0c→ (w) (w)=15, 22–(w)+(0x1d)–3→ (0x1d) 11–5+44–12+(0x0f)–(0x0c) → (w) (w)=33, (w)–12+(0x0f) → (w) |
Вариант 2 0x1c=20, 0x1a=17, 0x0d=25 (0x1c)+(0x0d) → (w) (0x1c)+27+(0x0d)–15→ (0x1c) 12–22+35–(0x1c) → (w) (w)=35, 12–(w)+(0x0d)–3→0x0d) 21–15+24–2+(0x1a)–(0x1c) → (w) (w)=30, (w)–22+(0x1a) → (w) |
|
Вариант 3 (0x0e)=12, (0x0f)=10, (0x1d)=25 (0x0e)+(0x0f)→(w) (0x0e)+7+(0x1d)–5→ (0x0e) 15–20+45–(0x0e→ (w) (w)=15, 22–(w)+(0x1d)–3→ (0x1d) 11–5+44–12+(0x0f)–(0x0e) → (w) (w)=33, (w)–12+(0x0f) → (w) |
Вариант 4 (0x0f)=22, (0x0d)=7, (0x1c)=5 (0x0c)+(0x0f)→(w) (0x0c)+7+(0x1d)–5→ (0x0c) 15–20+45–(0x0c→ (w) (w)=15, 22–(w)+(0x1d)–3→ (0x1d) 11–5+44–12+(0x0f)–(0x0c) → (w) (w)=33, (w)–12+(0x0f) → (w) |
|
Вариант 5 (0x0c)=32, (0x0e)=17, (0x1d)=3 (0x0c)+(0x0e)→(w) (0x0c)+7+(0x1d)–5→ (0x0c) 15–20+45–(0x0c→ (w) (w)=15, 22–(w)+(0x1d)–3→ (0x1d) 11–5+44–12+(0x0e)–(0x0c) → (w) (w)=33, (w)–12+(0x0e) → (w) |
Вариант 6 (0x0c)=4, (0x1f)=4, (0x1d)= 5 (0x0c)+(0x1f)→(w) (0x0c)+7+(0x1d)–5→ (0x0c) 15–20+45–(0x0c→ (w) (w)=15, 22–(w)+(0x1d)–3→ (0x1d) 11–5+44–12+(0x1f)–(0x0c) → (w) (w)=33, (w)–12+(0x1f) → (w) |
|
Вариант 7 (0x1c)=6, (0x0f)=4, (0x1d)=15 (0x1c)+(0x0f)→(w) (0x1c)+7+(0x1d)–5→ (0x1c) 15–20+45–(0x1c→ (w) (w)=15, 22–(w)+(0x1d)–3→ (0x1d) 11–5+44–12+(0x0f)–(0x1c) → (w) (w)=33, (w)–12+(0x0f) → (w) |
Вариант 8 (0x0c)=5, (0x2f)=1, (0x1d)=12 (0x0c)+(0x2f)→(w) (0x0c)+7+(0x1d)–5→ (0x0c) 15–20+45–(0x0c→ (w) (w)=15, 22–(w)+(0x1d)–3→ (0x1d) 11–5+44–12+(0x2f)–(0x0c) → (w) (w)=33, (w)–12+(0x2f) → (w) |
|
Вариант 9 0x1d=27, 0x11=9, 0x10=5 (0x1d)+(0x11)–>(w) (0x1d)+17+(0x10)–25–>(0x1d) 21–20+15–(0x1d)–>(w) (w)=11, 20–(w)+(0x1d)–3–>(0x1d) 31–24+14–22+(0x11)–(0x10)–>(w) (w)=30, (w)–8+(0x11)–>(w) |
Вариант 10 0x0c=6, 0x0d=17, 0x12=23 (0x0c)+(0x0d)–>(w) (0x12)+9+(0x0d)–11–>(0x0d) 17–7+15–(0x12)–>(w) (w)=40, 52–(w)+(0x0d)–3–>(0x0d) 21–25+14–4+(0x0d)–(0x0c)–>(w) (w)=20, (w)–8+(0x0c)–>(w) |
|
Вариант 11 0x13=4, 0x14=10, 0x15=5 (0x13)+(0x14)–>(w) (0x13)+7+(0x15)–5–>(0x15) 11–21+25–(0x15)–>(w) (w)=14, 12–(w)+(0x14)–3–>(0x14) 16–15+14–11+(0x14)–(0x15)–>(w) (w)=40, (w)–22+(0x13)–>(w) |
Вариант 12 0x16=32, 0x17=27, 0x18=14 (0x16)+(0x17)–>(w) (0x16)+17+(0x18)–15–>(0x18) 5–2+15–(0x17)–>(w) (w)=23, 32–(w)+(0x18)–30–>(0x18) 10–7+14–11+(0x16)–(0x18)–>(w) (w)=14, (w)–11+(0x17)–>(w) |
|
Вариант 13 0x19=32, 0x1a=17, 0x1b=16 (0x19)+(0x1a)–>(w) (0x19)+27+(0x1b)–11–>(0x19) 10–12+15–(0x1a)–>(w) (w)=6, 20–(w)+(0x1b)–3–>(0x1b) 21–14+4–2+(0x1a)–(0x19)–>(w) (w)=10, (w)–2+(0x1b)–>(w) |
Вариант 14 0x2a=12, 0x20=17, 0x21=15 (0x2a)+(0x20)–>(w) (0x2a)+17+(0x21)–15–>(0x2a) 35–27+41–(0x20)–>(w) (w)=21, 26–(w)+(0x21)–3–>(0x21) 31–15+24–22+(0x2a)–(0x20)–>(w) (w)=31, (w)–12+(0x20)–>(w) |
|
Вариант 15 0x12=12, 0x1a=27, 0x1b=26 (0x12)+(0x1a)–>(w) (0x12)+27+(0x1b)–11–>(0x19) 10–12+15–(0x1a)–>(w) (w)=6, 20–(w)+(0x1b)–3–>(0x1b) 21–14+4–2+(0x1a)–(0x12)–>(w) (w)=10, (w)–2+(0x1b)–>(w) |
Вариант 16 0x18=3, 0x1a=7, 0x1b=6 (0x18)+(0x1a)–>(w) (0x18)+27+(0x1b)–11–>(0x19) 10–12+15–(0x1a)–>(w) (w)=6, 20–(w)+(0x1b)–3–>(0x1b) 21–14+4–2+(0x1a)–(0x18)–>(w) (w)=10, (w)–2+(0x1b)–>(w) |
|
Вариант 17 0x11=21, 0x1a=12, 0x1c=23 (0x11)+(0x1a)–>(w) (0x11)+27+(0x1c)–11–>(0x11) 10–12+15–(0x1a)–>(w) (w)=6, 20–(w)+(0x1c)–3–>(0x1c) 21–14+4–2+(0x1a)–(0x11)–>(w) (w)=10, (w)–2+(0x1c)–>(w) |
Вариант 18 0x10=34, 0x2b=12, 0x1b=4 (0x10)+(0x2b)–>(w) (0x10)+27+(0x1b)–11–>(0x10) 10–12+15–(0x2b)–>(w) (w)=6, 20–(w)+(0x1b)–3–>(0x1b) 21–14+4–2+(0x2b)–(0x10)–>(w) (w)=10, (w)–2+(0x1b)–>(w) |
|
Вариант 19 0x19=23, 0x1c=17, 0x0b=15 (0x19)+(0x1c)–>(w) (0x19)+27+(0x0b)–11–>(0x19) 10–12+15–(0x1c)–>(w) (w)=6, 20–(w)+(0x0b)–3–>(0x0b) 21–14+4–2+(0x1c)–(0x19)–>(w) (w)=10, (w)–2+(0x0b)–>(w) |
Вариант 20 0x19=12, 0x2a=2, 0x2b=15 (0x19)+(0x2a)–>(w) (0x19)+27+(0x2b)–11–>(0x19) 10–12+15–(0x2a)–>(w) (w)=6, 20–(w)+(0x2b)–3–>(0x2b) 21–14+4–2+(0x2a)–(0x19)–>(w) (w)=10, (w)–2+(0x2b)–>(w) |
|
Вариант 21 0x2b=11, 0x22=12, 0x21=13 (0x2b)+(0x22)–>(w) (0x2b)+17+(0x21)–15–>(0x2b) 35–27+41–(0x22)–>(w) (w)=21, 26–(w)+(0x21)–3–>(0x21) 31–15+24–22+(0x2b)–(0x22)–>(w) (w)=31, (w)–12+(0x22)–>(w) |
Вариант 22 0x2c=21, 0x20=22, 0x24=23 (0x2c)+(0x20)–>(w) (0x2c)+17+(0x24)–15–>(0x2c) 35–27+41–(0x20)–>(w) (w)=21, 26–(w)+(0x24)–3–>(0x24) 31–15+24–22+(0x2c)–(0x20)–>(w) (w)=31, (w)–12+(0x20)–>(w) |
|
Вариант 23 0x2f=10, 0x20=27, 0x11=25 (0x2f)+(0x20)–>(w) (0x2f)+17+(0x11)–15–>(0x2f) 35–27+41–(0x20)–>(w) (w)=21, 26–(w)+(0x11)–3–>(0x11) 31–15+24–22+(0x2f)–(0x20)–>(w) (w)=31, (w)–12+(0x20)–>(w) |
Вариант 24 0x2d=22, 0x10=11, 0x21=12 (0x2d)+(0x10)–>(w) (0x2d)+17+(0x21)–15–>(0x2d) 35–27+41–(0x10)–>(w) (w)=21, 26–(w)+(0x21)–3–>(0x21) 31–15+24–22+(0x2d)–(0x10)–>(w) (w)=31, (w)–12+(0x10)–>(w) |
|
Вариант 25 0x2b=12, 0x20=13, 0x29=12 (0x2b)+(0x20)–>(w) (0x2b)+17+(0x29)–15–>(0x2b) 35–27+41–(0x20)–>(w) (w)=21, 26–(w)+(0x29)–3–>(0x29) 31–15+24–22+(0x2b)–(0x20)–>(w) (w)=31, (w)–12+(0x20)–>(w) |
Вариант 26 0x2a=12, 0x10=11, 0x11=13 (0x2a)+(0x10)–>(w) (0x2a)+17+(0x11)–15–>(0x2a) 35–27+41–(0x10)–>(w) (w)=21, 26–(w)+(0x11)–3–>(0x11) 31–15+24–22+(0x2a)–(0x10)–>(w) (w)=31, (w)–12+(0x10)–>(w) |
|
Вариант 27 0x22=13, 0x23=12, 0x20=15 (0x22)+(0x20)–>(w) (0x22)+17+(0x23)–15–>(0x22) 35–27+41–(0x20)–>(w) (w)=21, 26–(w)+(0x21)–3–>(0x23) 31–15+24–22+(0x22)–(0x20)–>(w) (w)=31, (w)–12+(0x20)–>(w) |
Вариант 28 0x1a=19, 0x20=12, 0x21=14 (0x1a)+(0x20)–>(w) (0x1a)+17+(0x21)–15–>(0x1a) 35–27+41–(0x20)–>(w) (w)=21, 26–(w)+(0x21)–3–>(0x21) 31–15+24–22+(0x1a)–(0x20)–>(w) (w)=31, (w)–12+(0x20)–>(w) |
|
Скачано с www.znanio.ru
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.