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

 


По базе:  

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

реклама

 




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




Организации работы циклов

Организация цикличности программы может быть осуществлено при помощи команд условного перехода. Однако есть встроенные функциональные возможности в виде команды 'DJNZ LC[n], src', позволяющей сформировать более компактную процедуру цикла при помощи кольцевого счетчика. Для хранения содержимого этого кольцевого регистра используются 16- разрядные регистры LC[0] и LC[1]. Команда 'DJNZ LC[n], src' автоматически уменьшает содержимое регистра цикла и при достижении нулевого значения этого регистра переходит по адресу, указанному в регистре источнике.

Чтобы инициализировать цикл, установите в регистре LC[n] необходимое значение.

Необходимое значение должно содержаться в операнде src команды 'DJNZ LC[n], src'. Когда в команду 'DJNZ LC[n]', как это обычно бывает, будет передано относительное значение, ассемблер автоматически вычисляет смещение относительного значения и вставляет это непосредственное значение в объектный код.

    move     LC[1], #10h       ; 16 циклов
    LoopTop:                   ; относительный адрес для djnz LC[n],src 
    call     LoopSub
    djnz     LC[1], LoopTop    ; декремент LC[1] и переход если не нулевое значение

Если адрес цикла находится вне диапазона перехода, то для задания старшего байта адреса используется префиксный регистр смещения PFX [0].

    move     LC[1], #10h      ; 16 циклов
    LoopTop:                  ; не относительный адрес для djnz LC[n],src
    call     LoopSub
    ...
    djnz     LC[1], LoopTop   ; декремент LC[1] и переход если не нулевое значение
                              ; транслируется в команды: move PFX[0], #high(LoopTop)
                              ; djnz LC[1], #low(LoopTop)

Если быстродействие работы кольцевого регистра является критическим параметром и относительный переход не может быть использован, то можно осуществить предварительную загрузку регистра циклов. Это позволит исключить необходимость загружать регистр цикла перед самим циклом и позволит обеспечить максимальное быстродействие команды DJNZ.

    move    LC[0], #LoopTop    ; использование LC[0] в качестве регистра хранения адреса
                               ; транслируется в команды: move PFX[0], #high(LoopTop)
                               ; move LC[0], #low(LoopTop)
    move    LC[1], #10h        ; 16 циклов
    ...
    LoopTop:                   ; не относительный адрес для djnz LC[n],src
    call    LoopSub
    ...
    djnz    LC[1], LC[0]       ; декремент LC[1] и переход если не нулевое значение

В режиме предварительной загрузки адреса загрузка должна быть осуществлена до начала цикла:

    move    LC[1], #10h     ; запись в счетчик цикла значения, равного 16
    move    LC[0], IP       ; установка адреса цикла на следующий адрес
    LoopTop:                ; не относительный адрес для djnz LC[n],src
    ...


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





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