Однокристальные микроконтроллеры семейства MCS-51. Команды передачи данных. Пересылка в аккумулятор прямоадресуемого байта, страница 5

RET                                 ; Возврат из подпрограммы

; Таблица квадратов чисел

SQTAB:     DB  00H                                                                          

DB   01H                                                  

DB   04H                                               

DB   09H                                      

DB   10H

DB   19H                                              

DB   24H                                                        

DB   31H                                                        

DB   40H                                               

DB   51H                                       

DB   64H                                             

END                ; Конец программного модуля

3.7.1. Создайте в вашей папке файл sq.asm и запишите в него коды программы SQ. Получите файлы с расширением .obj и .hex. Запустите симулятор AVSIM51 и загрузите в него файл sq.hex. Отключите отображения меток с помощью комбинации клавиш Alt-F5. При рассмотрении текста подпрограммы SQ недоумение могут вызвать команды, расположенные с адреса 0006H.  В исходной программе здесь должны располагаться константы 00H, 01H и т.д. Дело в том, что симулятор AVSIM51 не может различать константы и коды команд, которые размещены в программной памяти. Любые данные он интерпретирует как коды команд. Таким образом, значению 00H соответствует команда NOP и т.д.

Отладка подпрограммы SQ состоит в проверке соответствия полученных данных (выходной параметр) и исходных данных (входной параметр). Исследуйте работу подпрограммы SQ в пошаговом режиме при следующих исходных данных: (R7) = 00H, (R7) = 05H, (R7) = 0AH. Выполнение подпрограммы заканчивайте при достижении команды RET.  

3.8. Программирование операций пересылки между регистрами общего назначения

При разработке программ часто возникает необходимость в пересылке данных между регистрами общего назначения. К сожалению, такие команды в  МК51 отсутствуют. Выполнить пересылку между регистрами можно двумя основными способами.

3.8.1. Первый способ основан на использовании аккумулятора в качестве регистра временного хранения данных. Например, необходимо переслать данные из регистра R3 в регистр R7 текущего банка РОН.

Запишите в память симулятора коды программы, выполняющую пересылку из R3 в R7:

MOV   A, R3     ; Пересылка содержимого R3 в аккумулятор

MOV   R7, A     ; Пересылка содержимого аккумулятора в регистр R7

NOP

Выполните программу пересылки в пошаговом режиме, предварительно занеся в регистр R3 исходные данные, например, число 33H.

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

3.8.2. Второй способ основан на том, что регистры общего назначения располагаются в памяти данных МК, т.е. являются обычными ячейками ПД с определенными адресами в диапазоне 00H…1FH. Для пересылки между регистрами можно использовать команды вида:

MOV  add, ads  , где обозначено: ads – адрес ячейки ПД источника,  add – адрес ячейки ПД приемника. Пересылка выполняется без использования аккумулятора.

Пусть, например, надо переслать данные из регистра R3 в регистр R7 банка 0. Адрес регистра  R3 в 0-м банке РОН будет 03H, а регистра R7 – 07H.

Запишите в память симулятора команды:

MOV  07H, 03H  ; Пересылка содержимого ячейки ПД с адресом 03H (регистр R3)

; в ячейку ПД с адресом 07H (регистр R7)

NOP

Выполните команду в пошаговом режиме, предварительно занеся в регистр R3 число 03H.

Этот способ позволяет пересылать данные между регистрами, находящимися в разных регистровых банках. Пусть, например, требуется переслать данные из регистра R3 0-го банка РОН в регистр R7 3-го банка. Адрес регистра R3 в 0-м банке будет 03H, адрес регистра R7 в 3-м банке РОН будет 1FH.

Занесите в память программ симулятора команды:

MOV  1FH, 03H   ; Пересылка содержимого ячейки 03H в ячейку 1FH

NOP

Исследуйте работу программы в пошаговом режиме, наблюдая за изменением содержимого ячеек ПД.

Достоинствами второго способа пересылки являются то, что не используется аккумулятор, а также не требуется переключать банки РОН при пересылке. Недостатки – команда пересылки занимает в памяти 3 ячейки, требуется знать адреса регистров в каждом банке РОН.