Главная страница Комбинированное использование портов
РАСШИРЕНИЕ СТЕКОВОЙ ПАМЯТИ МИКРОКОН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 в качестве указателя. ******************************************************************************* Определение макроса 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 Выбирается в зависимости от скорости. Счетчик времени. Количество полученных битов.
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |