Главная страница Комбинированное использование портов ACKloop
Ожидаем, пока SCL = 0. Подтверждаем прием. Устанавливаем подтверждение приема. Быстрая программа пользователя. Ожидаем, пока SCL = 1. Ожтдаем, пока SCL = 0. Заканчиваем подтверждение приема. Пропускаем, если чтение (подтверждаем только прием адреса). ; Чтение по шине I2C. ; Здесь должна быть размещена программа пользователя. ; Подпрограмма считывает данные, определенные I2CSUBA, и передает их на шину I2C. ; Эта версия ограничивает число последовательно считываемых байтов восьмью ; за счет коньюнкции (И) номера регистра с 7. Если необходимо передавать ; большее количество байтов, код может быть изменен. NEXTOUT ;...*......... < Поместить следующий байт в регистр I2C. >....**.... .....***. USER XMIT ; Программа подготовки очередного байта для передачи (например, ; программа, формирующая последовательность идентификации). MOVLW 07Н ANDWF I2CSUBA,f MOVLW I2CR0 ADDWF I2CSUBA,W INCF I2CSUBA MOVWF FSR MOVFW Ind Устанавливаем счетчик. Ограничиваем модуль счета. Псевдорегистры Смещение от начала буфера. Следующий субадрес. Косвенный адрес. Получаем данные. OUT CONT MOVWF I2CREG ;.* Инициализация счетчика битов. MOVLW 8 ; Устанавливаем счетчик битов. MOVWF I2CBITS ** nepeccii.Ka битов. ** SCL = О - значит, изменяем данные. GOTO liOUT 1 CLB B.SDA MOVLW TAWRITE TRIS PORTA CLB B SDA iiOJTJ CLRWDT USER 0 Выдаем следующую единицу. Выдаем нуль. Сбрасываем сторожевой таймер.
iiOUTJoop 1 RLF I2CREG,F SKPNC ; Левый сдвиг данных. Старший бит помещается вперед-; Если перенос равен нулю, то пропускаем. ; Подготовка следующего байта. iiOUT Loop a3 ВВС B.SCL.NEXTOUT BBS B SDA, iiOUT loop a3 GOTO I2CWAIT- USER READ GOTO I2CWAIT ; Ожидаем, пока SCL = 0. Выдаем следующий зна, ; Ожидаем нового стартового условия. ; Прекращаем прием. ; Программа пользователя по обработке данных ****************************** * Получен адрес, выполняется его проверка. ******** ** ***************************** АСК UA *****************< k***********n t*************************1
Получен второй адрес. SA = О преобразуется в 128 для упрощения считывания ID. АСК SA t**********i CLB BJA CLB .BJD MOVFW I2CREG SKPNZ SEB BJD MOVWF I2CSUBA GOTO ACKloop END Флаг приема вторичного адреса. Получаем субадрес. Пропускаем, если не 0. Флажок - идентификационное поле выбрано. Установить подадреса. ЧЕТЫРЕХКАНАЛЬНЫЙ ВОЛЬТМЕТР СО СВЕТОДИОДНОЙ ИНДИКАЦИЕЙ Данное устройство использует рассмотренные нами в главе 3 принципы организации динамической индикации многоразрядных иВДй каторов с одновременным управлением матричной клавиатурой-Кроме того, оно обеспечивает измерение аналоговых сигналов на четырех входах, которые совмещены с линиями управления разрядами индикатора. В устройстве используется PIC-микроконтроллер типа 16С71, им ющий встроенный аналого-цифровой преобразователь с четырьмя рходами. Принципиальная схема устройства представлена на рис. 5 12. Входы аналого-цифрового преобразователя в ИС 16С71 совмещены с цифровыми портами RAO - RA3, которые используются для управления индикаторами. Поэтому одной из задач, решаемой программой микроконтроллера, является мультиплексирование портов. ?о О 4,7к0 4,7kQ -CZb- 4,7kfi RAO RBO RAl RBI RA2 RB2 RA3 RB3 RB4 RB5 RB6 RB7 4.2200ЙйГ]Г] 4IZb 4ZZb 4x220Q PIC16C71 4х2,2коу Q OirO <y* otro о CHpO о OirO Of r-o o- Рис. 5.12 . . Схема четырехконсльного вольтметра Устранить влияние цифровых выходов на измеряемые аналоговые сигналы можно двумя способами. Одно из решений представлено на рис. 5.13: здесь используется внешний операционный усилитель включенный в качестве повторителя напряжения. Это решение зволяет значительно сократить интерференционные шумы в Широкой полосе частот входных аналоговых сигналов. Второе решение представлено на рис. 5.14 и заключается в использовании фильтрух. щей RC-цепочки. Такое решение приемлемо, если сопротивление источника аналогового сигнала остается относительно небольшим В противном случае надо обязательно использовать решение, проиллюстрированное рис. 5.13. PIC 16С71 АналогоЬьО Вход ЦифробоО бх./бох. -cd- Рис, 5,13, Первый способ устранения интерференции между иаочником онологовых сигналов и цифровыми входами/выходами ЦифроВоО бх./Вьх. АналогобиО бход о-1 h 1кП lOnFii: PIC 16C71 -ст- Рис. 5.14 Второй способ устронения интерференции между иаочником аналоговых сигналов и цифровыми входами/выходами Программа, которая обеспечивает управление микроконтроллером, достаточно проста (листинг 5.3). Аналоговые входы опрашиваются каждые 20 мс. Для этого сначала выключаются индикаторы за счет подачи низких логических уровней на все линии порта В. Затем линии порта А переводятся в режим аналоговых входов. Для j-габилизации постоянного напряжения на аналоговых входах устанавливается цикл ожидания, соотнесенный с инерционностью ис-цользуемых в нашем примере RC-цепочек. Предлагаемая программа содержит различные подпрограммы, осуществляющие управление индикаторами, клавиатурой и аналого-цифровым преобразователем, В целом она реализует функции четы-рехканального вольтметра. При включении устройство автоматически переходит в режим измерения напряжения по входу RA0, результат представляется на индикаторе. Выбор измеряемого канала производится нажатием соответствующей клавиши (0-3). Нажатия других клавиш игнорируются, и могут быть использованы в вашем приложении для реализации различных функций. Листинг 5.3 Эта программа иллюстрирует возможность одновременного управления четырехразрядным индикатором, клавиатурой и измерения напряжений четырех аналоговых входов посредством микроконтроллера PIC 16С71. При включении питания устройство индицирует значение напряжения на входе 0. При нажатии одной из клавиш (0-3) происходит переключение входов. Обновление индикации осуществляется каждые 20 мс, сканирование клавиатуры производится с той же периодичностью. Аналоговые входы опрашиваются по очереди, что обеспечивает обновление каждые 60 мс. Таймер (RTCC) использован для генерации прерываний каждые 5 мс. Программа соответствует инструкции по применению AN557 фирмы Microchip. LIST Р=16С71, F=INHX8M include plcreg.equ
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |