В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Обзоры по типам > Микроконтроллеры > MCS-51 > Команды
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


Команда CJNE <байт-назначения>,
<байт-источник>, <смещение>

Команда "сравнение и переход, если не равно" сравнивает значения первых двх операндов и выполняет ветвление, если операнды не равны. Адрес перехода (ветвления) вычисляетчя при помощи сложения значения (со знаком), указанного в последнем байте команды, с содержимым счетчика команд после увеличения его на три.

Флаг переноса "С" устанавливается в "1", если значение целого без знака <байта назначения> меньше, чем значение целого без знака <байта источника>, в противном случае перенос сбрасывается (если значения операндов равны, флаг переноса сбрасывается). Эта команда не оказывает влияния на операнды.

Операнды, стоящие в команде, обеспечивают комбинации четырех режимов адресации:

    • если байтом-назначения является аккумулятор:
  1. прямой
  2. непосредственный
    • если байтом-назначения является любая ячейка ОЗУ с косвенно-регистровой или регистровой адресацией:
  3. непосредственный к регистровому
  4. непосредственный к косвенно-регистровому

Рассмотрим их.


  1. Ассемблер: CJNE A, <direct>, <метка>
    Код:
    1 0 1 1 0 1 0 1
    direct address
    rel8
    Время: 2 цикл
    Алгоритм: (PC) : =(PC)+3
    если (direct) < (A) то (PC) :=(PC)+<rel8>, C:=0
    если (direct) > (A) то (PC) :=(PC)+<rel8>, C:=1
    Пример:
                        ;(A)=97H, (P2)=F0H, (C)=0
         CJNE  A,P2,MT3 
         ...
    MT3: CLR   A        ;(A)=97H, (P2)=F0H, (C)=1
                        ;Адрес, соответствющий метке
                        ;МТ3 вычисляется, как
                        ;(PC):=(PC)+3+(rel8)
               



  2. Ассемблер: CJNE A, #data, <метка>
    Код:
    1 0 1 1 0 1 0 0
    #data8
    rel8
    Время: 2 циклa
    Алгоритм: (PC) :=(PC)+3,
    если #data< (A), то (PC)+<rel8>, C:=0
    если #data8>(A), то (PC) :=(PC)+<rel8>, C:=1
    Пример:
                        ;(A)=FCH, (C)=1
      CJNE  A,#0BFH,MT4 
         ...
    MT4: INC   A        ;(A)=FDH, (C)=0
                        ;(PC):=(PC)+3+(rel8)         
    		   



  3. Ассемблер: CJNE Rn,#data, <метка>; где n=0-7
    Код:
    1 0 1 1 1 rrr
    #data8
    rel8
    Время: 2 циклa
    Алгоритм: (PC) : = (PC)+3,
    если #data <(Rn), то (PC) :=(PC)+<rel8>, C:=0
    если #data8 >(Rn), то (PC)+<rel8>, C:=1
    Пример:
                        ;(R7)=80H, (C)=0
       CJNE  R7,#81H,MT5 
         ...
    MT5: NOP            ;(R7)=80H, (C)=1
                        ;(PC):=(PC)+3+(rel8)
    



  4. Ассемблер: CJNE @Ri, #data, <метка>; где i=0,1
    Код:
    1 01 1 1 0 1 1 i
    #data8
    rel8
    Время: 2 циклa
    Алгоритм: (PC) :=(PC)+3,
    если #data <((Ri)), то (PC)+<rel8>, C:=0
    если #data8>((Ri)), то (PC)+<rel8>, C:=1
    Пример:
                        ;(R0)=41H, (C)=1, (ОЗУ[41])=57H
         CJNE  @R0,#29H,MT6 
         ...
    MT6: DEC   R0       ;(ОЗУ[41])=57H, (C)=0
                        ;(PC):=(PC)+3+(rel8)