Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Обзоры по типам > Микроконтроллеры > MAXQ

реклама

 




Мероприятия:




Считывание и запись регистров

Все функции в микроконтроллерах MAXQ выполняются через регистры непосредственно или косвенно. В данном разделе рассматривается загрузка регистров конкретным значением и перенос данных между регистрами одинаковых и различных размеров.

Загрузка 8-битного регистра непосредственным значением

Любые доступные для записи 8- битные регистры с субиндексом в пределах модуля от 0h до 7h могут быть загружены за один цикл при помощи команды MOVE.

move   AP, #05h     ; загрузка в регистр указателя аккумулятора значения 05h

Доступные для записи 8- битные регистры с субиндексом в пределах модуля 8h и выше могут быть загружены значением непосредственно при помощи команды MOVE, но требуется дополнительный цикл для установки префиксного значения для адресата.

move  WDCN, #33h    ; транслируется в команды: move PFX[2], #00h
                    ;                          move (WDCN-80h), #33h

Загрузка 16-разрядного регистра 16-разрядным непосредственным значением

Любые доступные для записи 16- битные регистры с субиндексом в пределах модуля от 0h до 7h могут быть загружены за один цикл при помощи команды MOVE, но только если старший байт непосредственно загружаемого значения является нулевым.

move 	LC[0], #0010h 	; 

Если старший байт непосредственного значения не является нулевым или если 16- разрядный субиндекс больше 7h, то потребуется дополнительный цикл для установки значения старшего байта и/или старшего индекса регистра.

                         ; старший байт <> #00h
move    LC[0], #0110h    ; транслируется в команды: move PFX[2], #01h
                         ;                          move LC[0], #10h
                         ; субиндекс получателя > 7h
move    A[8], #0034h     ; транслируется в команды: move PFX[2], #00h
                         ;                          move (A[8]-80h), #34h

Перемещение значений между регистрами с одинаковым размером

Перемещение данных между регистрами с одинаковым размером может быть выполнено при помощи команды MOVE за один цикл, но только в том случае, если индекс регистра получателя от 0h до 7h и индекс регистра источника - от 0h до Fh.

move    A[0], A[8]     ; копирование данных из аккумулятора 8 в аккумулятор 0
move    LC[0], LC[1]   ; копирование данных из следящего счетчика 1 в следящий счетчик 0

Если индекс регистра получателя больше чем 7h или если адрес регистра источника больше чем Fh, то необходимо выполнить следующие команды.

move    A[15], A[0]    ; транслируется в команды: move PFX[2], #00h
                           ;                          move (A[15]-80h), A[0]

Перемещение значений между регистраторами различных размеров

Перед рассмотрением всех возможных случаев, сначала представим вам регистр, который будет использоваться практически во всех случаях. В микроконтроллерах имеется 16-разрядный регистр общего назначения (General Register - GR). Старший и младший байты регистра GR индивидуально доступны как регистры GRH и GRL соответственно. Доступные только для чтения регистры GRS и GRXL позволяют ввести для регистров GR и GRL знак.

Загрузка в 8-битный получатель младшего байта 16-разрядного источника

Самая простая операция - загрузка 8- разрядного регистра младшим байтом 16- разрядного регистра. Для этой операции не требуется использование регистра GR и требует префиксных операций только в том случае, если индексы регистров получателя и источника соответственно больше 07h и 0Fh.

move    OFFS, LC[0]     ; копирование младшего байта LC[0] в регистр OFFS
move    IMR, @DP[1]     ; копирование младшего байта @DP[1] в регистр IMR
move    WDCN, LC[0]     ; транслируется в команды: move PFX[2], #00h
                        ;                          move (WDCON-80h), LC[0]

Загрузка в 8-битный получатель старшего байта 16-разрядного источника

Для загрузки 8- разрядного регистра значением старшего байта 16- разрядного регистра лучше всего было бы использовать регистр GR. Перенос 16- разрядного значения источника в регистр GR выполняется за один цикл.

move    GR, LC[0]     ; перемещение значения регистра LC[0] в регистр GR
move    IC, GRH       ; копирование старшего байта в регистр IC

Загрузка 16-битного регистра содержимым двух 8-битных регистров

Два 8- битных источника могут быть связаны и запомнены в 16- разрядном регистре при помощи префиксного регистра, содержащего старший байт передаваемого слова. Дополнительный цикл может потребоваться только если индекс регистра источника больше чем 0Fh или если индекс 16- разрядного получателя больше чем 07h.

move    PFX[0], IC    ; загрузка содержимого регистра IC в регистр PFX
move    @++SP, AP     ; сохранение в @DP[0] сцепки IC:AP
                      ; 16-битный субиндекс получателя: dst=08h
                      ; 8-битный субиндекс источника:
                      ; старший = 10h, младший = 11h
move    PFX[1], #00h  ;
move    PFX[3], high  ; PFX=00: старший
move    dst, low      ; dst= старший байт: младший байт

Загрузка младшего байта 16-разрядного регистра 8-битным значением регистра источника

Для того, чтобы изменить значение только младшего байта 16- разрядного регистра необходимо сохранить значение этого регистра в регистре GR. Дополнительный цикл потребуется только если индекс получателя больше чем 0Fh.

move    GR, DP[0]       ; перемещение значения регистра DP[0] в регистр GR
move    PFX[0], GRH     ; получение значения старшего байта DP[0] через регистр GRH
move    DP[0], #20h     ; сохранение нового значения регистра DP[0]
                        ; сохранение нового значения регистра DP[0
                        ; 8- битный субиндекс источника: src=11h
move    PFX[1], #00h    ;
move    GR, dst         ; считывание слова dst в регистр GR 
move    PFX[5], GRH     ; получение значения старшего байта через регистр GRH
move    dst, src        ; сохранение нового значения dst

Загрузка старшего байта 16-разрядного регистра 8-битным значением регистра источника

Для того чтобы изменить значение только старшего байта 16- разрядного регистра необходимо сохранить значение этого регистра в регистре GR. Дополнительный цикл потребуется только если индекс получателя больше чем 0Fh.

move    GR, DP[0]       ; перемещение значения регистра DP[0] в регистр GR
move    PFX[0], #20h    ; получение значения старшего байта DP[0] через регистр GRH
move    DP[0], GRL      ; сохранение нового значения регистра DP[0
                        ; сохранение нового значения регистра DP[0
                        ; 8- битный субиндекс источника: src=11h
move    PFX[1], #00h    ;
move    GR, dst         ; считывание слова dst в регистр GR
move    PFX[1], #00h
move    PFX[4], src     ; получение нового src байта
move    dst, GRL        ; сохранение нового значения dst

Если старший байт должен быть очищен, то операция может быть сохранена за счет передачи 16-разрядному получателю только байта регистра GRL:

move    GR, DP[0]   ; перемещение значения регистра DP[0] в регистр GR
move    DP[0], GRL  ; сохранение нового значения регистра DP[0], в старший байт 
	                  записано значение 00h


<-- Предыдущая страница Оглавление Следующая страница -->





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники