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

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

УПРАВЛЕНИЕ АНАЛОГО-ЦИФРОВЫМ ПРЕОБРАЗОВАТЕЛЕМ

Только РЮ-микроконтроллеры 16С71, 16С73 и 16С74 уже HMejo-j, внутренние аналого-цифровые преобразователи. Что касается мцц, роконтроллеров других типов, то их взаимодействие с внешними АЦП может производиться по последовательному интерфейсу.

В качестве примера рассмотрим популярную микросхем)ADC0831 фирмы National Semiconductor (рис. 3.37). Этот восьмиразрядный АЦП выдает нулевой байт, когда напряжение прямого входа Vin(+j равно напряжению инвертирующего входаУш(-). Когда напряжение между прямым и инвертирутощим входами равно Vref, на вьгходе будет байт, равный 255 (или FF в шестнадцатеричном представлении).

+ 5V

ADC0831

Вход 0...5V

Vin(-r)

Vin(-)

Vref

-0+5V


Рис. 3.37

Подключение PIC-микроконтроллера

к аналого-цифровому преобразователю через последовательный интерфейс

В этом примере Vin (-) подсоединен к нулевому потенциатху схемы, а вход Vref - к потенциалу+5 В, но вы можете выбрать свои потенциалы входов, поскольку это не влияет на программное обеспечение, реализующее взаимодействие между Р1С-микроконтроллером и пр образователем.

Для взаимодействия используется трехпроводный интерфейс включающий следующие линии:

4 CS - линия выбора микросхемы (разрешения обмена), активный уровень - низкий; 4 CLK - тактирование обмена данными; ♦ DO - выход данных преобразователя.

Программа, управляющая работой этой схемы, приведена в листинге 3.12. Индикатором уровня измеренного напряжения является светодиод. Он будет мигать тем медленнее, чем выше напря-зкение.

Основную часть диалога с преобразователем выполняет подпрограмма conve rt. Алгоритм взаимодействия следующий. Сначала на линию CS выдается низкий логический уровень, разрешающий обмен. Затем микроконтроллер генерирует первый тактовый импульс на линию CLK, чтобы инициировать преобразование. Для считывания результата микроконтроллер генерирует восемь тактовых импульсов на линию CLK и принимает бит за битом байт результата. Прием байта осуществляется в цикле loop, побитная запись во внутренний регистр выполняется через бит переноса посредством команды сдвига влево (г 1).

Листинг 3.12

; Управление аналого-цифровым преобразователем

; по последовательному интерфейсу Microwire.

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

; Эта программа управляет взаимодействием с внешним АЦП

; с последовательным интерфейсом.

; Индикацию уровня напряжения осуществляет светодиод, который мигает тем медленнее, ; чем больше величина измеренного напряжения, elk = ra.O ; Линия синхронизации, tota = ra.l ; Линия данных.

К = га.2 ; Линия выбора микросхемы (разрешения обмена). Я! = га.З ; Линия управления светодиодом.

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

org 8 counter! ds 1 counter2 ds 1

ADresult ds 1 ; Регистр результата.

Определение используемого PIC.

devicepicl6c54,xt osc,wdt off,protect off reset start



; Программа.

start

rajOOOOOlOOb

; CS = 1, выбор ИС АЦП.

!ra,#00000010b

; RA.1 - вход.

!rb,#OO0O00O0b

; Все линии RB - выходы.

blink

ra.#8

; Инверсия сигнала линии

; управления светодиодом RA3.

call

wait

; Ожидание окончания преобразования.

goto

blink

; Повтор.

wait

call

convert

; Считывание результата ADC в counter2

counter2,ADresult

counter2.#1

; Добавление единицы.

; Задержка.

:loop

djnz

counterl,:loop

djnz

counter2,:loop

convert

clrb

CS :

Подтверждение ADC.

counter2,#8 ;

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

setb

elk ;

Генерация тактового импульса.

если таймер PIC > 4 МГц.

clrb

elk ;

Сброс тактового сигнала.

ADresult ;

Сброс байта для приема новых данных.

:loop

setb

elk ;

Генерация тактового импульса,

если таймер PIC > 4 МГц.

clrb

movb

Cdata ;

Бит данных в С.

Adresult ;

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

djnz

Counter2,:loop ;

восемь битов получено?

setb

CS ;

Конец преобразования.

Выход.

ЗАКЛЮЧЕНИЕ

Конечно, в одной главе невозможно рассмотреть все ситуации, с которыми вы можете столкнуться при создании приложений на основе микроконтроллеров. Но, проанализировав предложенные примеры, вы будете обладать прочной базой для самостоятельной работы. Мы также предлагаем посмотреть программы, представленные в главе 5. Они содержат подпрограммы, которые здесь не приведены (например, совместное управление клавиатурой/индикатором/ аналого-цифровым преобразователем и др.).

БИБЛИОТЕКА

В:этрй главе:

й1ЗИфметические подпрограммы

Шрграммная реализация прерываний Шикроконтроллеро816С5Х

Ринцип многозадачности

рсширение стековой памяти

шредача асинхронной пооюдовательности отсутствии последовательного порта



в этой главе вашему вниманию предлагается библиотека грамм, которая включает функции, необходимые для paapaGoxj собственньгх приложений. Некоторые программы, ориентиров!} ные на аппаратуру, т.е. на управление периферийными устройства ми, были описаны в главе 3, здесь же рассматриваются програм1ц{ обработки данных.

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

В этой главе вы найдете целую коллекцию арифметических подпрограмм, которые часто затрудняются написать даже те, кто хорошо знает машинный язык, несколько подпрограмм, связанных с обработкой прерываний, и подпрограмм, обеспечивающих реализацию асинхронных последовательных интерфейсов на микроконтроллерах, не имеющих для этого аппаратной поддержки. Если вам будет что-то непонятно в листингах, обращайтесь к главе 2, где описан синтаксис двух используемых ассемблеров.

АРИФМЕТИЧЕСКИЕ ПОДПРОГРАММЫ

Если разработка арифметических подпрограмм на языке высокого уровня не вызывает трудностей, то их написание на машинном языке требует знаний и опыта, каким бы простым ни был используемый микроконтроллер. Поэтому вам предлагается ряд готовых решений. В этом разделе содержатся арифметические подпрограммы, реализующие следующие функции:

♦ целочисленное умножение двух беззнаковых 8-разрядньгх one рандов;

♦ умножение двутс 16-разрядных операндов с учетом знаков;

♦ деление 16-разрядных операндов со знаками и без знаков;

♦ сложение и вычитание 16-разрядных операндов;

♦ умножение чисел с плавающей запятой;

♦ сложение и вычитание чисел с плавающей запятой;

♦ преобразование двоично-десятичных кодов (BCD) в двоичные и наоборот;

♦ сложение и вычитание чисел в двоично-десятичном представлении;

♦ извлечение квадратного корня.

наиболее сложных операций приводятся схемы алгоритмов.

{Некоторые из этих программ допускают две формы реализации: обеспечивает максимальную скорость выполнения, так как клчает минимум командных циклов, другая же благодаря компак-тности кода позволяет сократить объем занимаемой памяти, но вы-ролияется достаточно долго.

Беззнаковое умножение 8-разрядных чисел

Эта подпрограмма вычисляет произведение двух чисел, представленных 8-разрядными двоичными кодами без знаков и формирует 1б-разрядный результат. Схема ее алгоритма приведена на рис. 4.1.

Q Начоло

COUNT=S

h byte = L aYTE=0

Мнсжичое помещсеггся 6 регистр V.

Сброс бита перенссо


нег i h byte=h BYTEi-w

1 Cq5u8 5ipaBc h eyte

1 Cq6ue ВпрпВо L byte

col:nt-count--.

Рис4.1

Anro

Конец

ритм умножения восьмиразрядных операндов



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.
Копирование материалов разрешено исключительно при условии цититирования.