Процессор, микропроцессор, ОЭВМ, сигнальный процессор

Страницы работы

Фрагмент текста работы

Биты RBPU – включение подтягивающих резисторов на входах порта B.

INTEDG – выбор активного фронта на входе внешнего прерывания.

TOCS, TOSE, PSA – виды управления таймером ноль.

PS2, PS1, PS0 – задают коэффициент деления предделителя.

Программирование.

Сложить регистр 30 и 31 и поместить в регистр 32.

list                  p=16f628

#include          <p16f628.inc>

REG1              equ30

REG2              equ31

org                  00

movf               30,w

addwf              31,w

movwf 32

end

Составление программ.

Согласно основной теореме структуры программирования, алгоритм любой сложности может быть построен с помощью трех управляющих конструкций:

- следования;

- цикла;

- альтернативы.

Следование -  команды выполняется одна за другой. Все процессоры имеют поддержку следования (декодеры и счетчики).

Цикл - для удобства программирования используются несколько типов циклов:

- цикл с предпроверкой;

- цикл с постпроверкой  (если количество проходов заданно равным «0», то тело цикла выполняется один раз);

- цикл с параметром - цикл повторяется неопределенное количество раз, если не выполняется условие;

- цикл с выходом из середины.

Альтернативы:

- полная;

- не полная;

- множественное ветвление.

Подпрограмма

Пример программы с арифметическими действиями:

Сложить два регистра 20 и 21,добавить число 3 и результат поместить в 22.

list                   p=16f628

#include          <p16f628.inc>

RE1                 equ20

RE2                 equ21

SUM               equ22

const               set.3

const2             setconst+.5

_ _                   CONFIG

org                  00

movf               20,w

addwf              21,w

addlw              .3

movwf            22

sleep

end

cblock             20

RE1

RE2

sum

endc

#define           growth

addlw              con

movf               RE1,w

addwf              RE2,w

growth

movwf            sum

sleep

end

LEDS_PORT              equPORTB

MY_LED                   equ5

#define zaz bsf LEDS.PORT,MY_LED

#define pot bsf LEDS.PORT,MY_LED

bsf  LEDS.PORT,MY_LED

bcf  LEDS.PORT,MY_LED

Особенности условных операторов

btfss -  пропустить следующую команду, если такой бит в таком реестре отсутствует

btfsr- пропустить следующую команду, если такой бит в таком реестре установлен

btfss REG.BIT

Достоинства:

1.  возможность ветвления по любому биту любого регистра, а не только по арифметическому признаку.

2.  условным можно сделать не только ветвление, но и другую команду

Программирование циклов

movlw CONST

movwf COUNT

Loop:

        : тело цикла

        :

            decfsz COUNT,F

goto                 Loop

IF A<B THEN A→ C ELSE B→C

1.  Ассемблер не делает логических операций над высказываниями, как  язык высокого уровня, поэтому

IF (A>10)&(B>15)

необходимо заменять вложенными альтернативами

2.  Нет возможности сравнивать два числа, как  в языке высокого уровня. Можно выполнять с числами арифметические действия и можно проверять результат на 0, заем, перенос.

Пример: IF A<B THEN A→C ELSE B→C

movf               REG_B,W; взяли B

subwf              REG_A,w ;A-B

btfsc                STATUS,C;при вычитании C/B

goto                 ELSE

THEN

                  movf               REG_A,w

                  movwf REG_C

                  goto                IF_END

ELSE

                  movf               REG_B,w

                  movwf REG_C

                  goto                IF_END

                  IF_END; продолжение программы.

Разработать программу «магнитный пускатель».

RB0 – пуск;

RB1 – стоп;

RB2 – выход.

2_1.gif

#define     START           PORTB,0

#define     STOP              PORTB,1

#define     OUT                PORTB,2

START_BEGIN

bsf                   OUT

START_LOOP

      btfsc                STOP

      goto                STOP_BEGIN

      goto                SART_LOOP

STOP_BEGIN

      bcf                  OUT

STOP_LOOP

      btfsc                STOP

      goto                STOP_LOOP

      btfsc                START

      goto                STOP_LOOP

      goto                STOP_LOOP

Обнулить 10 ячеек памяти начиная с 40.

COUNT    equ                  20

                  movlw 40

                  movwf FSR

                  movlw 10

                  movwf COUNT

Loop         clrf                  INDF

                  incf                 FSR,F

                  decfsz COUNT,F

goto                Loop

Организация  памяти данных.

3.gif

Эти регистры предназначены для временного хранения данных, для сохранения и восстановления контекста при работе с прерываниями.

Адресное пространство памяти составляет 512 байт(4 банка по 128 байт). Адреса 1F заняты регистрами специального функций. Некоторые регистры продублированы в некоторых банках.

С адреса 20 по 7F находятся регистры общего назначения.

Косвенная адресация.

Косвенная адресация - такой режим адресации регистров, при которой в команде не указывается адрес памяти данных.

Регистры специального назначения FSR используются в качестве указателей в памяти данных. В командах для обращения к памяти данных используется неявный регистр INDF.

Формирование физического адреса при прямой и косвенной адресации.

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

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

Абсолютный физический адрес формируется  из адреса находящегося в коде команды(7бит) и битов PR0, PR1(регистра STATUS).

При косвенной адресации из регистра FSR берется 8 бит адреса. Так при косвенной адресации можно работать с парой  банков 0,1 или 2,3. Для переключения между банками используют регистр статус.

4.gif

Пример. Переслать содержимое из 20 регистра «0» банка в 21 регистр «2» банка, а из 22 регистра «3» банка в 23 регистр «1» банка.

Фрагмент7е.gif

bcf STATUS,RP0

bcf STATUS,RP1

movf         20,w

bsf             STATUS,RP1

movwf      21

bsf             STATUS,RP0

movf         22,w

bcf STATUS,RP1

Использование макросов.

Макрос - определенный пользователем набор инструментов и директив, которые будут подставлены в исходный текст программы, при каждом его вызове.

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

<метка> macro <ap21>,<ap22>

local    metka1

metka2            <команда1>

                  <команда2>

                  …..

endm

bank0              macro

                        bcf       STATUS,PRO

                        bcf       STATUS,PRO

                        endm

__

bank1              macro

                        bcf       STATUS,PRO

                        bcf       STATUS,PRO

__                    endm

my_macro.inc

# include < my_macro.inc>

Команда пересылки регистр-регистр.

movff              macro             REG1,REG2

                        movf               REG1,W

                        movwf REG2

                        endm

movff              PORTA,PORTB

movff              PORTC,PORTD

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

banksel <регистр>

banksel           PORTA – банк 0

banksel           TRISA – банк 1

bankisel<регистр>-используется при косвенной адресации.

Если необходимо работать с двумя банками удобно комбинировать способы адресации.

Пример: Переслать из 20,21,22 регистров 0-го банка в 20,21,22 регистры 2-го банка.

bcf                   STATUS,PRO

bcf                   STATUS,PR1

bsf                   STATUS,IRP

movlw 20

movwf FSR

movf               20,w

movwf INDF

incf                 FSR,F

movf               21,w

movwf INDF

incf                 FSR,F

movf               22,w

movf               INDF

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

Похожие материалы

Информация о работе