Главная страница  Комбинированное использование портов 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [ 28 ] 29 30 31 32 33 34 35 36 37 38 39 40

start

!rb, ООООООООЬ

Bee линии порта RB - выходы.

task, m

Определение числа задач.

ticks

Сброс системного таймера.

LEDs

Сброс светодиодов (LEDs).

system

task

Следующая задача.

cjne

task, #6, :cont

Все задачи выполнены?

task

Если да, сброс счетчика задач

ticks

и приращение системного таймера

:cont

w.task

pc+w

Табличный переход

taskO

к задаче N.

taski

task2

tasks

task4

tasks

task6

task?

taska

cjne

ticks, #255, :cont

; Счет до 255,

timeO

; Приращение таймера 0.

cjne

timeO, #3, :cont

; Счет до 3.

timeO

; Сброс таймера 0 и изменение

LEDs, 00000001b

; состояния светодиодов.

:cont

system

taski

cjne

tisks, ff255, :cont

timel

cjne

timel, #8, :cont

timel

LEDs, #00000010b

:cont

system

task2

cjne

ticks, #255, :cont

time2

cjne

time2, #6, :cont

time2

LEDs, #00000100b

:cont

system

tasks

cjne

ticks, #255, :cont

times

cjne

times, #11, :cont

times

LEDs, ftOOOOIOOOb

:cont

system

task4.

cjne

ticks, #255, :cont

time4

cjne

time4, #12, :cont

clr .

time4

LEDs, #00010000b

:cont

system

tasK5

cjne

ticks, #255, :cont

times

cjne

times. #4, :cont

times

LEDs, #00100000b

:cont

system

task6

cjne

ticks, #255, :cont

times

cjne

timeO, #23, :cont

times

LEDs, ftOlOOOOOOb

:cont

system

task?

cjne

ticks, #255, :cont

time?

cjne

time?, #9, :cont

time?

LEDs, #10000000b

:cont

system

РАСШИРЕНИЕ СТЕКОВОЙ ПАМЯТИ МИКРОКОН1Р011ЛЕРОВ16С5Х

Стековая память подсемейства 16С5Х Р1С-микроконтроллеров имеет только два уровня. Поэтому данные микроконтроллеры не позволяют выполнять программы с уровнем вложенности подпро-фамм более двух, поскольку при этом теряются адреса возврата.

Программа, которая вам предлагается, показывает, как реализо-вывать стековую память с пятью уровнями, разрешающую обраще-е к пяти вложенным подпрограммам. Этот пример, конечно, мо-*ет быть расширен, но поскольку размер оперативной памяти (RAM) PIC-микроконтроллеров 16С5Х невелик, советуем вам при Рработке приложений просчитывать максимальное число вложе-подпрограмм, предусмотренных в вашей программе, чтобы наи- Уим образом приспособить предлагаемый пример к конкретным бованиям.



Листинг 4.16 демонстрирует, как можно использовать в nporpjj ме макрокоманду NCALL вместо обычной CALL. Эта макрокоманда сохр няет содержимое программного счетчика PC в стековой памятц а затем выполняет обычную команду вызова подпрограммы СДЦ В конце каждой подпрограммы вместо типовой команды возврат (например, RETLW к) нужно поместить строку GOTO RTRN. RTRN-этопод. программа, выполняющая функцию, обратную макрокоманде NCALL Она загружает программный счетчик значением, полученным иа расширенного стека, и таким образом осуществляет действительный возврат из подпрограммы.

Чтобы пример был более наглядным, листинг включает главную программу, начинающуюся с макрокоманды START, которая вызывает три вложенные подпрограммы ТОМ, DICK и HARRY.

Внимание! Макрокоманда NCALL использует регистр косвенной адресации FSR (регистр f4). Если этот регистр задействован в вашей программе, нужно его сохранить, прежде чем запускать макрокоманду NCALL.

Листинг 4.16

I,******************** ************** til************ ******* ttttmt ********** ***n,tt.

Программа управления многоуровневой стековой памятью для обеспечения вложенности более двух подпрограмм. В этой демонстрационной программе вызываемые подпрограммы не выполняют никаких действий (используются команды NOP). Программа соответствует инструкции по применению AN527 фирмы Microchip. *********************************************************************************

STACK

Olff

goto

START

movlw

STACK

movwf

goto

START

; Определяем объем стековой памяти равным пяти.

Загружает STACK в качестве указателя.

*******************************************************************************

Определение макроса NCALL для использования вместо команды CALL.

NCALL

macro LABEL

movf PC.w

movwf 0

incf FSR

goto LABEL endm

Сохранить PC в стеке. /

Инкрементируем указатель стека. Переход к подпрограмме.

Возвращение после NCALL

fijfiN decf FSR ; Указатель на последнем месте стека,

movlw 3 addwf O.w

movwf PC ; Перезагрузка PC. **************************** **************************************t,i,*************

START

dick

HARRY

nop NCALL

nop nop sleep

nop NCALL

goto

NCALL

goto

nop nop goto

DICK RTRN

HARRY RTRN

RTRN

; Код главной программы. ; /

; Код подпрограммы ТОМ.

; Код подпрограммы DICK.

; Код подпрограммы HARRY. ; /



ПЕРЕДАЧА АСИНХРОННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ ПРИ ОТСУТСТВИИ ПОСЛЕДОВАТЕЛЬНОГО ПОРТА

За исключением 16С63, 16С65, 16С73 и 16С74 микроконтроллег, рассматриваемых в данной книге подсемейств не имеют последо тельного асинхронного интерфейса. Однако он очень необход когда требуется взаимодействие с терминалом или другим инфо мационным оборудованием.

В этом разделе будет рассказано, как программным способом р. ализовать передачу и прием асинхронной последовательности дац. ных, используя любую линию параллельного порта. Поскольку Р1С-микроконтроллеры подсемейства 16СХХ являются быстродей. ствующими, при определенных условиях может быть достигнута скорость передачи 19200 бод. Многие микроконтроллеры, также реализующие эту функцию с помощью программного обеспечения, ограничены скоростью 4800 и даже иногда 2400 бод!

Типичный вид байтовой посылки через асинхронный последовательный интерфейс представлен на рис. 4.9. В примере предполагается, что работа ведется в 8-битном режиме передачи данных и без контроля четности, чтобы немного упростить задачу.


СтартобьО Бит бит О

Рис. 4.9

Bum 1

Бит 2

Бит 3

Бит 4

Бит 5

Бит 6

Бит СтопобиО 7 бит

Вид байтовой посылки при асинхронной передаче

После стартового бита следуют восемь битов данных (младшие разряды впереди) и за ними один или несколько стоп-битов-

В качестве примера реализации рассмотрим схему, показани)юна рис. 4.10, которая осуществляет прием асинхронной последователе ности и индикацию принятого кода в двоичной форме с помоЩЫО восьми светодиодов, подключенных к порту В. Соответствуют программа представлена в листинге 4.17.

После конфигурирования портов эта программа входит в цикл оЖй Дания, предназначенный для обнаружения передачи стартового бит* Затем программа ожидает в течение времени, равного полоний* битовой посылки, чтобы зарегистрировать логическое значен!* принятого сигнала в середине теоретического битового интерва

Рис 4.10 . ...................-

Прием асинхронной последовательноаи

Тем самым уменьшается количество ошибок при приеме, вызванных случайными помехами.

Лиаинг 4.17

I Прием асинхронной последовательности через линии параллельного порта.

; Соответствует инструкции по применению фирмы Parallax.

; Зга программа получает данные в форме

I асинхронной последовательности через порт RA2,

; Скорость приема определена константой bit K.

! Формат посылки - 6 битов данных и 1 стоп-бит без бита четности.

bitj half bit serial in <lata out

bit K/2 ra.2

Определение переменных величин.

org В °y cntr ds 1

Выбирается в зависимости от скорости.

Счетчик времени. Количество полученных битов.



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [ 28 ] 29 30 31 32 33 34 35 36 37 38 39 40

© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.