Цифровой частотомер, собранный на микроконтроллере
Принцип работы цифрового частотомера, собранного на отечественном микроконтроллере КР1878ВЕ1. Входная формирующая цепь. Внешний генератор тактовых импульсов и устройство индикации. Стабилизатор напряжения питания для входной цепи и устройства индикации.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 23.08.2011 |
Размер файла | 363,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
РЕФЕРАТ
В данной курсовой работе рассмотрен цифровой частотомер, собранный на микроконтроллере. Взят отечественный микроконтроллер КР1878ВЕ1. Принцип работы описываемого прибора (как и других частотомеров) заключается: в подсчете пришедших на его вход импульсов за фиксированный интервал времени [1].
Устройство включает в себя: МК 1878ВЕ1; входную формирующую цепь; внешний генератор тактовых импульсов (ГТИ) для МК; устройство индикации; отдельный стабилизатор напряжения питания для входной цепи и ГТИ; отдельный стабилизатор напряжения питания для МК и устройства индикации.
Разработанный частотомер можно применять как отдельный прибор так и в составе какого-либо оборудования, где требуется индикация или контроль частоты.
Проект содержит 32 стр., 1 таблицу, 10 рисунков, 7 стр. приложений, 7 литературных источников.
СОДЕРЖАНИЕ
РЕФЕРАТ
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1. ОСНОВНЫЕ ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
2. ОПИСАНИЕ РАБОТЫ ПРИНЦИПИАЛЬНОЙ СХЕМЫ
3. ОПИСАНИЕ ПРОГРАММЫ ДЛЯ МИКРОКОНТРОЛЛЕРА
3.1 ОБЛАСТЬ ВЕКТОРОВ ПРЕРЫВАНИЙ ПРОЦЕССОРА
3.2 ОСНОВНАЯ ПРОГРАММА
3.3 ПОДПРОГРАММА ИНИЦИАЛИЗАЦИИ ПОРТОВ И ТАЙМЕРА
3.4 ПОДПРОГРАММА ПРЕОБРАЗОВАНИЯ ДВОИЧНОГО ЧИСЛА (ЧИСЛА ПОДСЧИТАННЫХ ИМПУЛЬСОВ) В ДВОИЧНО-ДЕСЯТИЧНЫЙ КОД
3.5 ПОДПРОГРАММА ПЕРЕВОДА ДВОИЧНО-ДЕСЯТИЧНОГО КОДА В КОД СЕМИСЕГМЕНТНОГО ИНДИКАТОРА
3.6 ПОДПРОГРАММА ВЫВОДА НА ИНДИКАТОР (ПОДПРОГРАММА ПЕРЕКЛЮЧЕННИЯ СКАНИРУЮЩЕЙ)
3.7 ПОДПРОГРАММА ЗАПУКА ТАЙМЕРА И ИНДИКАЦИИ НА 1 СЕКУНДУ (ОТСЧЕТ СЕКУНДНОГО ИНТЕРВАЛА СЧЕТА)
3.8 ПОДПРОГРАММА ВЫЕМКИ ДАННЫХ ИЗ ТАЙМЕРА И ПРЕДДЕЛИТЕЛЯ
4. УЛУЧШЕНИЕ ТЕХНИЧЕСКИХ ХАРАКТЕРИСТИК УСТРОЙСТВА
4.1 УВЕЛИЧЕНИЕ ЧУВСТВИТЕЛЬНОСТИ
4.2 РАСШИРЕНИЕ ДИАПАЗОНА ИЗМЕРЕНИЙ
5. КОНСТРУКТОРСКОЕ ОФОРМЛЕНИЕ
ЗАКЛЮЧЕНИЕ
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
ПРИЛОЖЕНИЕ 1
ВВЕДЕНИЕ
Во многих устройствах техники связи и управления возникают задачи измерения и наблюдения за частотой периодических импульсов. Устройства, осуществляющие измерение частоты периодических импульсов (сигналов), называются частотомерами [3]. На выходе таких устройств часто осуществляется индикация измеряемой величины. Однако во многих случаях требуется автоматический контроль и управление частотой импульсов (в некоторых устройствах автоматики) и индикация может отсутствовать.
На проектирование был взят частотомер с верхним пределом измерения частоты 30МГц.
Устройство осуществляет индикацию частоты поданного на вход сигнала. Имеет один диапазон измерений 1Гц - 30МГц. Для расширения пределов измерений ко входу схемы можно подключить внешний делитель частоты.
Есть возможность организовать параллельный или последовательный интерфейс связи с компьютером (в курсовой не рассмотрено). Это позволит запоминать показания в файлах или даст большие возможности по визуализации полученных данных (построение графиков), а также позволит выдавать с компьютера ответные (управляющие) сигналы на объект управления.
1. ОСНОВНЫЕ ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
Основные технические характеристики устройства приведены в табл.1.1.
Таблица 1.1
Основные технические характеристики
Параметр |
Величина или диапазон |
|
Диапазон измеряемых частот |
1Гц...30МГц |
|
Количество разрядов индикатора |
8 |
|
Дискретность отсчета |
1Гц |
|
Время измерения |
1 секунда |
|
Чувствительность |
500 mV |
|
Напряжение питания |
9В |
|
Потребляемый ток |
100мА (при индикации всех восьмерок) |
Для увеличения диапазона измеряемых частот можно применить внешний делитель частоты (схема и описание приведены ниже).
Чувствительность частотомера можно также увеличить, применив другой формирователь [1] (схема и описание приведены ниже).
2. ОПИСАНИЕ РАБОТЫ ПРИНЦИПИАЛЬНОЙ СХЕМЫ
Как уже отмечалось, главной частью проектируемого устройства является микроконтроллер. Взят отечественный микроконтроллер КР1878ВЕ1 [6], который обладает всеми требуемыми характеристиками. Следует также сказать, что данный микроконтроллер производится фирмой «Ангстем» и на этот МК есть достаточно литературы на русском языке. Есть также программный эмулятор, что позволяет отлаживать программы для МК, написанные на ассемблере.
В используемом микроконтроллере КР1878ВЕ1 шестнадцатиразрядный таймер-счетчик имеет восьмибитный предделитель и трехбитный счетчик переполнений, что в сумме составляет 27 разрядов. Таким образом, счетчик может считать до 134217727. Максимальная измеряемая частота 30 МГц. Секундный интервал отсчитывают с помощью программно opгaнизованных циклов, в течении которых выполняется динамическая индикация предыдущих показаний.
По окончании счета получить значение измеренной частоты простым опросом регистров можно только из шестнадцатиразрядного таймера-счетчика и трехразрядного счетчика переполнений. Данные, находящиеся в восьмиразрядном предделителе извлекают методом досчета до переполнения. На вход предделителя подают одиночные импульсы и когда фиксируют его переполнение (во все разрядах - нули), вычисляют записанное в нем значение, равное 256 (FF) за вычетом числа поданных импульсов. После этого двоичное число, соответствующее измеренной частоте, преобразуют в двоично-десятичное, а затем - в код семиэлементного индикатора, при этом, в нем гасятся незначащие нули, и при следующем измерении это число выводится на табло.
В устройстве применён девятиразрядный светодиодный индикатор серии АЛС 318. Аноды индикаторов через токоограничительные резисторы R8-R15 подключены к порту В микроконтроллера. Катоды соединены с выходами дешифратора DD3 К555ИД10, втекающий ток которых в состоянии логического 0 может достигать 80 мА. Индикация идет справа на лево, т. е. первый разряд - правый по схеме. Девятый разряд не подключен, однако, при необходимости его можно использовать для вывода какой-либо служебной информации.
Для повышения стабильности измерений, используется внешний задающий генератор, который выполнен на элементах DD1.1-DD1.3, питаемых от отдельного стабилизатора DA1. Программный способ отсчета времени измерения позволяет применять кварцевые резонаторы на любую частоту. Следует лишь изменить программные циклы, а это весьма просто, так как все инструкции в микроконтроллере выполняются за два такта. Верхнее значение образцовой частоты составляет 8 МГц, нижнее 1МГц.
3. ОПИСАНИЕ ПРОГРАММЫ ДЛЯ МИКРОКОНТРОЛЛЕРА
Полный вариант программы (листинг) приведен в приложении 1. Ниже будут рассмотрены отдельные подпрограммы и приведены алгоритмы этих подпрограмм.
3.1 ОБЛАСТЬ ВЕКТОРОВ ПРЕРЫВАНИЙ ПРОЦЕССОРА
В программе используются 3 вектора прерываний:
<0> - начальный пуск программы. По адресу этого вектора прерывания находится команда безусловного перехода jmp, которая заносит в счетчик команд адрес точки старта (start) главной программы;
<2> - выход за границу стека. Это прерывание обрабатывается командой rst (происходит установка указателей стеков команд и данных в начальное положение и сбрасывается сигнал прерывания по переполнению стеков команд или данных);
<3> - счетчик-таймер (переполнение счетного регистра). По этому прерыванию происходит безусловный переход (jmp) на подпрограмму count, действие которой будет рассмотрено ниже;
<15> - завершение записи в флэш. Обрабатывается прерывание также как прерывание с вектором <2>.
Следует также сказать, что в памяти по адресу code находится таблица кодов семисегментного индикатора.
3.2 ОСНОВНАЯ ПРОГРАММА
Основная программа организована в виде бесконечного цикла. Блок-схема программы изображена на рисунке 3.2.1.
Рис.3.2.1. Блок-схема основной программы
После начального пуска программы запускается подпрограмма init инициализации портов и таймера. Затем подпрограмма b_bcd преобразования двоичного кода в двоично-десятичный и подпрограмма преобразования двоично-десятичного кода в код семисегментного индикатора bcd_7. Затем происходит переключение сканирующей (включается один из разрядов (первый) и на индикатор выводится число). Далее подпрограммой sec вырабатывается секундный интервал времени в течение которого будет происходить подсчет входных импульсов счетчиком-таймером и высвечивание на индикаторе результата предыдущего измерения.
После измерения происходит выемка данных из счетчика-таймера подпрограммой data. Затем снова высвечивается один из разрядов и цикл повторяется.
Более подробно подпрограммы описаны ниже.
3.3 ПОДПРОГРАММА ИНИЦИАЛИЗАЦИИ ПОРТОВ И ТАЙМЕРА
Подпрограмма инициализации портов и таймера init устанавливает режимы работы портов и счетчика-таймера:
Порт A:
Выводы PA0-PA2 переключаются на вход/выход;
Вывод PA4 - активный выход;
Нагрузочные резисторы отключены кроме PA3;
Прерывания от отрицательного и положительного фронтов запрещены.
Порт B:
Все линии порта переключены на вход/выход;
Выводы PB0-PB7 - активные выходы;
Нагрузочные резисторы отключены;
Прерывания от отрицательного и положительного фронтов запрещены.
Таймер:
Таймер работает в режиме счетчика внешних импульсов;
Источник счетных импульсов вход PA4/TCLC;
16-и разрядный счетный регистр;
Коэффициент деления предделителя 1/256.
После установки режимов периферийных устройств производится начальная загрузка для теста (после включения устройства на индикаторе должно высветиться число «87654321»):
Тест:
movl a0,020h ; a0<-020h = 0010 0000b адрес a0 -40h
movl a1,0F6h ; a1<-0F6h = 1111 0110b адрес a1 -41h
movl a2,02Fh ; a2<-02Fh = 0010 1111b адрес a2 -42h
movl a3,0A7h ; a3<-0A7h = 1010 0111b адрес a3 -43h
В сегментах a0-a3 (адреса 40-43h) хранится число подсчитанных импульсов в двоичном виде (27 разрядов). Младшие 5 битов в a0 не используются (рис.3.3.1).
Рис.3.3.1 Хранение 27-разрядного двоичного числа подсчитанных импульсов в памяти
В сегменты a4-a7 (адреса 44-47h) записываются нули(сегменты a4-a7 используются для хранения числа подсчитанных импульсов в двоично-десятичном коде).
3.4 ПОДПРОГРАММА ПРЕОБРАЗОВАНИЯ ДВОИЧНОГО ЧИСЛА (ЧИСЛА ПОДСЧИТАННЫХ ИМПУЛЬСОВ) В ДВОИЧНО-ДЕСЯТИЧНЫЙ КОД
Подпрограмма b_bcd преобразовывает двоичное 27-разрядное число, записанное по адресам 40-43h (или в сегментах a0-a3 рис.3.3.1) в двоично-десятичный код.
После преобразования число записывается по адресам 44-47h (сегменты a4-a7) как показано на рисунке 3.4.1.
Рис.3.4.1 Пример записи в памяти двоично-десятичного кода десятичного числа 87654321
В каждой тетраде байта a4-a7 находится двоичный код десятичного числа. Блок-схема алгоритма подпрограммы b_bcd показана на рис.3.4.2. На рисунке также приведена блок-схема алгоритма вспомогательной подпрограммы тестирования тетрад (если тетрада >=5 то к ней прибавляется 3).
Рис.3.4.2 Блок-схема алгоритма подпрограммы b_bcd (слева) и подпрограмма test (справа)
3.5 ПОДПРОГРАММА ПЕРЕВОДА ДВОИЧНО-ДЕСЯТИЧНОГО КОДА В КОД СЕМИСЕГМЕНТНОГО ИНДИКАТОРА
Подпрограмма bcd_7 считывает двоичный код символов индикатора из ячеек памяти 44-47h (сегменты a4-a7). Для каждой тетрады подбирается соответствующий код семисегментного индикатора (из таблицы в памяти - вспомогательная подпрограмма to_led), который записывается в ячейки памяти 50-57h (сегменты с0-с7). В 50h код первого в 57h код (код семисегментного индикатора) восьмого (последнего) разряда индикатора.
Кроме того, в подпрограмме bcd_7 высвечивается кило-точка и с помощью вспомогательной подпрограммы no_0 осуществляется гашение незначащих нулей.
Блок-схема алгоритма подпрограммы bcd_7 показана на рисунке 3.5.1.
Рис.3.5.1. Блок-схема алгоритма подпрограммы bcd_7
3.6 ПОДПРОГРАММА ВЫВОДА НА ИНДИКАТОР (ПОДПРОГРАММА ПЕРЕКЛЮЧЕННИЯ СКАНИРУЮЩЕЙ)
Подпрограмма led_scan производит поочередное включение каждого из разрядов индикатора. Для этого создан счетчик находящийся по адресу 4Fh (a7). Счетчик принимает значения от 0 до 7, что соответствует номеру подключаемого разряда. По линиям PA0-PA2 на дешифратор передается двоичный код (значение счетчика) и включается соответствующий разряд.
Затем на порт B поступает число (в коде семисегментного индикатора) которое должно отобразиться в подключенном разряде индикатора.
3.7 ПОДПРОГРАММА ЗАПУКА ТАЙМЕРА И ИНДИКАЦИИ НА 1 СЕКУНДУ (ОТСЧЕТ СЕКУНДНОГО ИНТЕРВАЛА СЧЕТА)
Подпрограмма sec производит отсчет интервала времени в 1 секунду и подключение вывода PA4/TCLC ко входу на данный интервал времени, в течении которого происходит подсчет поступающих на вход PA4/TCLC импульсов.
Во время подсчета импульсов происходит индикация предыдущих измерений с помощью подпрограммы led_scan.
Блок-схема алгоритма подпрограммы sec приведена на рисунке 3.7.1.
Из блок-схемы видно, что обращение к подпрограмме led_scan происходит 232*5=1160 раз в секунду. Отсюда видно, что каждый разряд индикатора включается с частотой 1160/7?166(Гц). Такая частота включения достаточно высока (+послесвечение) и человеческий глаз не замечает мерцания.
Рис.3.7.1 Блок-схема алгоритма подпрограммы sec
3.8 ПОДПРОГРАММА ВЫЕМКИ ДАННЫХ ИЗ ТАЙМЕРА И ПРЕДДЕЛИТЕЛЯ
Подпрограмма data извлекает данные, находящиеся в восьмиразрядном предделителе и данные из 16-разрядного таймера-счетчика.
После запуска подпрограммы разрешаются прерывания на процессор. Если в таймере-счетчике возникали переполнения (необработанные прерывания), то запускается подпрограмма count обработки прерывания с вектором <3>, которая в ячейку 43h (a3) записывает количество необработанных прерываний по переполнению (3 разряда).
Блок-схема алгоритма подпрограммы data показана на рис.3.8.1.
Рис.3.8.1 Блок-схема алгоритма подпрограммы data
4. УЛУЧШЕНИЕ ТЕХНИЧЕСКИХ ХАРАКТЕРИСТИК УСТРОЙСТВА
Есть возможность улучшить некоторые технические характеристики проектируемого устройства. Установкой на входе внешнего делителя частоты можно расширить диапазон измеряемых частот; установив на входе усилитель можно увеличить чувствительность разрабатываемого прибора.
4.1 УВЕЛИЧЕНИЕ ЧУВСТВИТЕЛЬНОСТИ
Другой вариант схемы формирующего устройства показан на рис.4.1.1. Данный формирователь увеличивает чувствительность до 100 - 200 мВ и защищает вход от воздействия сигналов с большой амплитудой.
Рис.4.1.1 Формирователь
Импульсы измеряемой частоты подаются на входной формирователь, выполненный на VT1 и DD1. Диоды VD1 и VD2 ограничивают амплитуду входного сигнала на уровне 1В. Для синусоидального входного сигнала нижняя граница измеряемых частот определяется емкостью C4 и C5, при указанном на схеме значении она равна 10Гц. С выхода DD1 сформированные импульсы поступают на контроллер (через резистор).
Входное сопротивление формирователя довольно низкое, поэтому для расширения возможностей прибора и устранения влияния емкости кабеля к нему подключается выносной пробник. Его схема показана на рис.4.1.2.
Рис.4.1.2 Принципиальная схема выносного пробника
Благодаря применению полевого транзистора входное сопртивление пробника около 500ком, выходное - 50 ... 100ом. Коэффициент усиления - около 2, а полоса пропускания - до 100...150МГц. Диоды VD1, VD2 защищают полевой транзистор от выхода из строя при попадании на вход высокого напряжения.
4.2 РАСШИРЕНИЕ ДИАПАЗОНА ИЗМЕРЕНИЙ
Для увеличения диапазона измерений можно применить внешний делитель частоты. Схема одного из вариантов делителя на 10 показана на рис.4.2.1.
Рис.4.2.1. Внешний СВЧ делитель на 10
С внешним СВЧ делителем цена младшего разряда - 10 Герц, а верхнее значение измеряемой частоты 300МГц.
5. КОНСТРУКТОРСКОЕ ОФОРМЛЕНИЕ
Спроектированное устройство может размещаться на отдельной печатной плате, или находиться вместе с какими - либо другими электронными узлами, в зависимости от предназначения.
Входной сигнал подается на схему через разъем. Если используется пробник то он должен располагаться на отдельной печатной плате.
При монтаже на печатную плату следует подобрать материал, к которому предъявляются следующие требования:
- устойчивость к механическим воздействиям
- хорошие тепловые характеристики
- высокое удельное сопротивление
- диэлектрическая проницаемость ? 1
- высокая надежность
Материал для изготовления печатной платы выбирается по ГОСТ 10316 - 78 [7].
Применяются отечественные интегральные микросхемы. Шаг между выводами у микросхем 2,5 мм, поэтому при проектировании печатной платы шаг масштабной сетки следует выбрать 2,5 мм.
ЗАКЛЮЧЕНИЕ
В курсовом проекте по заданным техническим характеристикам (измерение частоты сигналов до 30МГц) разработана принципиальная электрическая схема частотомера на МК 1878ВЕ1. Написана программа для используемого МК, приведены алгоритмы подпрограмм.
Также в курсовом проекте указано как можно улучшить некоторые характеристики разработанного устройства.
В приложении приводится листинг программы для МК.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Алиев Т.М. Тер-Хачатуров А.А. Измерительная техника. -М.: В.Ш. 1991 г.
2. Воробьев Н.И. Проектирование электронных устройств. М.: Высшая школа, 1989. 230с., ил.
3. Ерофеев Ю.Н. Импульсные устройства. - М.: В.Ш., 1989.
4. Партала О.Н. Радиокомпоненты и материалы. Каталожное издание. - М.: "КУБК - а", 1998.
5. Преснухин Л.Н. и др. Расчет элементов цифровых устройств. М.: В.Ш. 1991.
6. ftp://ftp.angstrem.ru/
7. http://www.kirov.ru/
ПРИЛОЖЕНИЕ 1
;: программа измерения частоты для 1878ВЕ1
;: PB0-PB7 сегменты индикатора A,B,-,H.
;: PA0-PA2 разряды индикатора 1-8. PA3 - не используется
;: PA4 вход частоты (обязательно через сопротивление~470
;: Ом)
цифровой частотомер микроконтроллер индикация
;--- область векторов прерываний процессора-----------------------
jmp start ;<0> Начальный пуск программы
nop ;<1> Сторожевой таймер(не используется)
rst ;<2> выход за границу стека
jmp count ;<3> Таймер A
nop ;<8> не используется
nop ;<5> не используется
nop ;<6> Порт A (прерывания не используются)
nop ;<7> Порт B (прерывания не используются)
nop ;<8>
nop ;<9>
nop ;<10>
nop ;<11>
nop ;<12>
nop ;<13>
nop ;<14>
rst ;<15>Завершение записи в флэш
code: .byte 03fh,006h,05bh,04Fh,066h, ;таблица
06Dh,07Dh,027h,07Fh,06Fh ;таблица
;#######################################################:
; Точка старта программы :
;#######################################################:
start:
jsr init ;инициализация портов и таймера
loop: jsr b_bcd ;двойчный к двоично-десятичному
jsr bcd_7 ;в код 7-и сегментного индикатора
jsr led_scan ;переключение сканирующей
jsr sec ;пуск и стоп через 1с
jsr data ;выемка данных из таймера
jsr led_scan ;переключение сканирующей
jmp loop ;бесконечный цикл
;#######################################################:
; старт таймера и индикации на 1 секунду :
;#######################################################:
sec:
movl d4,3 ;разрешение работы таймера
movl b1,00001011b ;выбор регистра кофигурации порта а
movl b1,00000111b ;перевод ножки а4 (TCLC) на вход
movl a3,70 ;устанавливаем
movl a2,5 ;начальные
$3: movl a1,232 ;значения циклов
$2: movl a0,243 ;
$1: nop ;начало циклa
nop ;
nop ;
nop ;
nop ;
dec a0 ;уменьшение -1
jnz $1 ;переход 1 (цикл 14 х 243)
jsr led_scan ;изменение сканирующей (+38 тактов)
dec a1 ;уменьшение -1
jnz $2 ;переход 2 (цикл 1 х 232)
dec a2 ;уменьшение -1
jnz $3 ;переход 3 (цикл 2 х 5)
$4: dec a3 ;добавок (цикл 4 х 70)
jnz $4 ;переход 4
; ((14*243)+46)*232+6)*5+70*4+10=4000000
nop ;
movl b1,00001011b ;обращение к регистру конфигурации порта а
movl b1,00010111b ;перевод ножки а4 (TCLC) на выход (0)
;окончание счёта (всего 4.000.000 тактов)
rts ;выход
;########################################################:
;# инициализация портов и таймера #:
;########################################################:
init:
ldr #a,40h ;сегмент источник таймера
ldr #b,18h ;сегмент регистров конфигурации портов
ldr #c,48h ;сегмент индикация
ldr #d,0 ;сегмент порты
;формирование конфигурации порта A
movl b1,00011011b ;заполнение регистра управления порта для
;формирования конфигурации порта в
;автоинкрементном режиме
movl b1,00010111b ;3-сканирующие на вход/выход
movl b1,00010111b ;4-активный выход
movl b1,00001000b ;5-резисторы отключеннннны(кроме PA3)
movl b1,0 ;6-прерывания запрещены
movl b1,0 ;7-прерывания запрещены
;формирование конфигурации порта B
movl b2,00011011b ;заполнение регистра управления порта для
;формирования конфигурации порта в
;автоинкрементном режиме
movl b2,11111111b ;3-все вход/выход
movl b2,11111111b ;4-активный выход
movl b2,0 ;5-резисторы отключеннннны
movl b2,0 ;6-прерывания запрещены
movl b2,0 ;7-прерывания запрещены
;формирование конфигурации таймера
movl d4,00010010b ;Работа с Регистром Конфигурации
movl d5,01011111b ;16 бит + / + внешний вх.+ пред. + на
;1/256
movl d4,00000010b ;Работа с Мл.Байтом Регистра Интервала
movl d5,0 ;значение младшего байта интервала
movl d4,00000110b ;Работа со Ст.Байтом Регистра Интервала
movl d5,0 ;значение старшего байта регистра интервала
movl a0,020h ;
movl a1,0f6h ;начальная загрузка
movl a2,02fh ;для теста
movl a3,0a7h ;(87654321)
clr a4
clr a5
clr a6
clr a7
rts ;возврат
;#######################################################:
; обработка прерывания от таймера :
;#######################################################:
count:
ldr #a,40h ;загрузка
mov a3,d4 ;сохраняем переполнеие
bich d4,1110b ;обнуляeм для следующего счета
bicl a3,1111b ;убиваем не нужные
swap a3 ;разряды
bicl a3,1 ;
shr a3 ;устанавливаем в начало
inc a3 ;фиксируем прерывание
rti ;выходим
;########################################################:
; выемка данных из таймера и прескалера :
;########################################################:
data:
stie ;разрешение прерывания на процессор
nop ;если было прерывание таймера
nop ;то перейдём на count
;затем не много ждём, и
clie ;запрещаем прерывание
ldr #a,40h ;устанавливаем область работы
clr a0 ;очистка цикла
;сохраняем таймер
movl d4,00001011b ;обращение к младшему байту
nop ;пауза !!!
mov a1,d5 ;сохранение младшего байта
movl d4,00001111b ;обращение к старшему байту
nop ;пауза !!!
mov a2,d5 ;сохранение старшего байта
;выемка данных из прескалера
$9: bish d1,1 ;импульс на вход таймера
bich d1,1
dec a0 ;счетчик -1
movl d4,00001011b ;обращение к младшему байту
nop ;пауза !!!
mov a4,d5 ;сохранение младшего байта
cmpl a0,0 ;выход
jeq $8 ;если перебрали всё
cmp a1,a4 ;сравнение
jeq $9 ;если не было переноса то снова
$8: ;иначе получаем в а0 хвост
movl d4,0 ;стоп таймера
clr a4 ;обнуляем, что не нужно
clr a5 ;
clr a6 ;
movl a7,5h ;
$7: shl a0 ;подвигаем к краю
rlc a1 ;
rlc a2 ;
rlc a3 ;
dec a7 ;
jnz $7 ;пока а7 не =0
rts ;выходим
;########################################################:
; Преобразование двоичного к двоично-десятичному :
;########################################################:
b_bcd:
ldr #a,40h ;
ldr #c,48h ;
movl c4,27 ;количество разрядов в источнике
;(счетчик цикла)
$53: cmpl a7,0 ;сравниваем с 0
jz $40 ;если =0 нечего тестировать выходим
mov c5,a7 ;иначе посылаем в темп
jsr test ;переходим к тесту тетрад на >=5
mov a7,c5 ;востанавливаем из темпа
$40: cmpl a6,0 ;продолжаем дальше тоже самое ...
jz $41 ;
mov c5,a6 ;
jsr test ;
mov a6,c5 ;
$41: cmpl a5,0 ;
jz $42 ;
mov c5,a5 ;
jsr test ;
mov a5,c5 ;
$42: cmpl a4,0 ;
jz $43 ;
mov c5,a4 ;
jsr test ;
mov a4,c5 ;
$43:
rlc a0 ;
rlc a1 ;
rlc a2 ;сдвиг всего на 1 бит
rlc a3 ;
rlc a4 ;
rlc a5 ;
rlc a6 ;
rlc a7 ;
dec c4 ;цикл 27 раз (3 байта + 3 разряда переполнения)
jne $53 ;
rts ;возврат
;#######################################################:
; дешифрация для семисегментного индикатора :
;#######################################################:
bcd_7:
ldr #c,50h ;
mov c0,a4 ;подготовка данных:
mov c1,a4 ;распихиваем в 50h
swap c1 ;получившееся двоично-десятичное
mov c2,a5 ;число, в каждый адрес
mov c3,a5 ;по тетраде.
swap c3 ;
mov c4,a6 ;
mov c5,a6 ;
swap c5 ;
mov c6,a7 ;
mov c7,a7 ;
swap c7 ;
ldr #a,48h ;
movl a1,0 ;
movl a2,0 ;
mov a0,c7 ;сохраняем в темпе (а0) 8-й разряд
jsr to_led ;переход в подпрограмму преобразования в
;7-й код
jsr no_o ;гашение не значашего 0
mov c7,a0 ;возвращаем обратно
mov a0,c6 ;повторяем снова ...
jsr to_led ;7-й разряд
bish a0,8 ;светим кило-точку
jsr no_o ;
mov c6,a0 ;
mov a0,c5 ;6-й разряд
jsr to_led ;
jsr no_o ;
mov c5,a0 ;
mov a0,c4 ;5-й разряд
jsr to_led ;
jsr no_o ;
mov c4,a0 ;
mov a0,c3 ;4-й разряд
jsr to_led ;
bish a0,8 ;
jsr no_o ;
mov c3,a0 ;
mov a0,c2 ;3-й разряд
jsr to_led ;
jsr no_o ;
mov c2,a0 ;
mov a0,c1 ;2-й разряд
jsr to_led ;
jsr no_o ;
mov c1,a0 ;
mov a0,c0 ;1-й разряд
jsr to_led ;
mov c0,a0 ;
rts ;возврат
;########################################################:
;# подпрограмма преобразования в 7 код #:
;########################################################:
to_led:
bich a0,1111b ;убиваем старшую тетраду
mdal a1,code ;грузим указатель на 7-ый код
mdah a4,code ;
add a1,a0 ;+ двоичное число (смещение)
mtpr #6,a1 ;непосредственная адресация к памяти
mtpr #7,a4 ;
mov a0,d7 ;меняем двоичный на 7-ый
rts ;выход
;########################################################:
;# подпрограмма тестирования тетрад #:
;# если тетрада >=5 то к ней прибавляется 3 #:
;########################################################:
test:
cmpl c5,5 ;сравниваем с 5
tdc ;переносим флаг заёма в z
jz $44 ;если <5 пропускаем +3
addl c5,3 ;если >=5 +3
$44: swap c5 ;меняем тетрады
cmpl c5,5 ;сравниваем с 5
tdc ;переносим флаг заёма в z
jz $45 ;если <5 пропускаем +3
addl c5,3 ;если >=5 +3
$45: swap c5 ;возвращаем тетрады на место
rts ;конец
;########################################################:
;# Подпрограмма вывода на индикацию #:
;########################################################:
led_scan:
push #a ;сохраняем
push #c ;рабочие регистры
ldr #a,48h ;грузим
ldr #c,50h ;нужные
ldr #5,0c0h ;указатели
movl d2,0 ;выключаем индикацию
inc a7 ;переключаем сканирующую
bich a7,00fh ;нужны только
bicl a7,1000b ;три разряда
movl a5,010h ;
add a5,a7 ;и
mov d1,a5 ;посылаем её в порт А
movl a6,50h ;вычисляем где
add a6,a7 ;лежат данные
mtpr #4,a6 ;
mov d2,d6 ;посылаем в порт В
;восстанавливаем
pop #c ;старые значения
pop #a ;регистров
rts ;выход (всего 38 такт.)
;#######################################################:
; подпрограмма гашения незначищих нулей :
;#######################################################:
no_o:
cmpl a2,0 ;проверка небыло ли значащей цифры
jne $87 ;иначе на выход
cmpl a0,00111111b ;сравнение с 0
jeq $89 ;если эквивалентно то переход на гашение
cmpl a0,10111111b ;сравнение с 0.
jne $88 ;если не эквивалентно то это первая
;значащая цифра и переход на отмену
;следующих проверок
$89: clr a0 ;гашение знака
jmp $87 ;и на выход
$88: inc a2 ;+1 отмена проверок
$87: rts ;возврат
.END
Размещено на Allbest.ru
Подобные документы
Структурная схема вольтметра. Расчет основных параметров. Схемотехника узлов цифрового вольтметра. Генератор тактовых импульсов. Схема устройства формирования импульсов. Цифро-аналоговый преобразователь, устройство сравнения. Схема счета и индикации.
курсовая работа [2,3 M], добавлен 18.06.2012Проектирование устройства индикации на микроконтроллере KP1816BE51. Выбор и обоснование аппаратной части устройства. Разработка обслуживающей программы на ассемблере. Время выполнения программы индикации. Максимальная оптимизация выполняемого кода.
курсовая работа [21,6 K], добавлен 22.03.2011Построение структурной, функциональной и принципиальной схемы цифрового частотомера. Измерение частоты электрических колебаний от единиц герц до 10 МГц и амплитудой от 0,15 до 10 В с ведением счета числа импульсов входного сигнала. Выбор элементной базы.
курсовая работа [1,9 M], добавлен 26.01.2015Внедрение микропроцессорной и цифровой техники в устройства управления промышленными объектами. Проектирование схемы детектора фронтов, генератора тактовых импульсов, счетного устройства, блока вывода в устройство обработки, блока индикации и управления.
курсовая работа [247,5 K], добавлен 15.05.2012Анализ аналогов генератора пилообразного напряжения. Принципиальная схема, принцип работы. Генератор пилообразного напряжения на микроконтроллере. Разработка структурной функциональной схемы цифрового устройства. Индикатор уровня сигнала на LM3915.
курсовая работа [1,3 M], добавлен 27.01.2016Моделирование генератора с кварцевым резонатором, оценка его добротности и стабильности. Разработка электронно-счетного частотомера; расчет параметров его структурных компонентов (мультивибратора, индикатора, триггера). Конструирование блока питания.
курсовая работа [773,3 K], добавлен 27.04.2011Цифровой частотомер с программным управлением, его применение, принцип действия и технические характеристики. Функционирование основных блоков цифрового частотомера. Описание и расчёт основных элементов схемы электрической принципиальной частотомера.
курсовая работа [998,4 K], добавлен 27.02.2009Назначение и технические характеристики цифрового термометра, его электрическая принципиальная схема. Принцип работы и структурная схема термометра, расчёт составных элементов: стабилизатор тока питания моста, термодатчик, цифровой блок индикации.
курсовая работа [667,5 K], добавлен 13.04.2014Простейший генератор прямоугольных импульсов. Алгоритм работы устройства, включая подпрограммы. Программный пакет VMLAB, позволяющий производить отладку программного обеспечения и моделирование работы радиоэлектронных устройств. Режим работы генератора.
курсовая работа [1,0 M], добавлен 17.05.2014Анализ методики проектирования и расчета электронных устройств. Разработка функциональной, принципиальной схем устройства аналого-цифрового преобразования. Расчет транзисторного ключа. Генератор тактовых импульсов. RS триггеры и логические элементы.
курсовая работа [1,3 M], добавлен 16.03.2012