Общая структура микропроцессорной системы. Развитие фон-Неймовской архитектуры. Микроконтроллеры средней серии Microchip. Программирование микроконтроллеров Microchip средней серии, страница 7

JP <адрес>

При выполнении команды переноса, если результат операции положительный, то С = 1

btfsc           STATUS, C

goto            Metka

Вызов подпрограммы, если 0:

CZ <адрес>

btfsc           STATUS, Z

call              Metka

Вызов подпрограммы, если не 0:

RNZ

btfss            STATUS, Z

return.

Недостатки и достоинства условных команд Microchip средней серии

«-»: отсутствие полноценных условных переходов, вызовов и возвратов

«+»: 1. можем сделать условной любую команду

        2. в качестве команды может использоваться как байт регистра признаков, так и любой бит любого регистра

Пути упрощения альтернатив

1.)  

btfss STATUS, Z

goto Metka

2.)  использование микрокоманд. Любую последовательность команд можно оформить в виде макроса и присвоить ему свое уникальное имя, и дальше использовать как команду Ассемблера.

incfsr2        macro

                    inc f FSR, F

                    inc f FSR, F

                    end m.

inc f2          macro         REG

                    inc f             REG, F

                    inc f             REG, F

                    end m.

Организация памяти данных (ПД)

          Адресное пространство памяти данных составляет 512 байт. Шина адреса ПД имеет разрядность 9 байт. Вся ПД разделена на четыре банка – 0, 1, 2, 3. Адреса с 0 по 1F в каждом банке заняты регистрами специальных функций. Наиболее важные регистры, например, STATUS, FSR, продублированы в нескольких или во всех банках. Адреса с 20 по 7F в каждом банке – регистры общего назначения. В некоторых микроконтроллерах регистры с 70 по 7F являются общими для всех банков. При прямой адресации из кода команды используется только 7 бит адреса, т. е. с помощью одной адресации можно работать только с одним банком. Для выбора банка используется биты RP0 и RP1 регистра STATUS.

          go pos        macro         adres

                              btfsc           STATUS, C

                              goto            adres

                              end m.

          9-ти битное двоичное число, состоящее из битов RP1 и RP0 регистра STATUS, и семь младших бит адреса из кода команды, можно рассматривать как отдельный физический адрес. При косвенной адресации регистра FSR извлекается 8 бит адреса. Недостающий девятый бит IRP извлекается из регистра STATUS.

Переместить 6F в регистр 120

mov f          6F, W

mov wf       120

bcf              STATUS, RP0

bcf              STATUS, RP1

mov f          6F, W

bcf              STATUS, RP0

bsf              STATUS, RP1

mov wf       120

bank 0        macro

                    bcf              STATUS, RP0

bcf              STATUS, RP1

                    end m

bank 1        macro

                    bsf              STATUS, RP0

bcf              STATUS, RP1

                    end m

bank 2        macro

                    bcf              STATUS, RP0

bsf              STATUS, RP1

                    end m

bank 3        macro

                    bsf              STATUS, RP0

bsf              STATUS, RP1

                    end m

bank 0        mov f          6F, W

bank 2        mov wf       120

При пересылках из банка в банк, чтобы не тратить ресурсы на постоянные переключения, можно использовать разные способы адресации:

bcf              STATUS, RP0

bcf              STATUS, RP1

bsf              STATUS, IRP

mov lw        120

mov wf       FSR

mov f          6F, W

mov wf       INDF

inc f             FSR, F

mov f          70, W

mov wf       INDF

inc f             FSR, F

Особенности организации памяти данных в микроконтроллерах расширенного семейства

1.  памяти стало больше

2.  банки остались по 256 байт

3.  биты переключения банков вынесли в отдельный регистр BSR, и ввели специальную команду lbsr

4.  косвенная адресация работает со всей памятью, без деления ее на банки. Указателей банков стало три: FSR0, FSR1, FSR2

5.  Появилась команда пересылки mov ff <адрес 1>, <адрес 2>, которая не использует деление на банки