Программирование и комп-ры

Проектирование прибора измеряемого длительность импульса


  ФИЛИАЛ МОСКОВСКОЙ ГОСУДАРСТВЕННОЙ АКАДЕМИИ ПРИБОРОСТРОЕНИЯ И ИНФОРМАТИКИ
                                 В Г. УГЛИЧЕ



                                   Кафедра
                  «ТОЧНЫЕ ПРРИБОРЫ И ИЗМЕРИТЕЛЬНЫЕ СИСТЕМЫ»



                               КУРСОВОЙ ПРОЕКТ

                                по дисциплине
           «Микропроцессорные устройства в измерительной технике»

    на тему : «Проектирование прибора измеряющего длительность импульса»



|Студент Алещенко Д. А.          |                                |
|Шифр 96207                      |Преподаватель Канаев С.А.       |


|Подпись студента                |Подпись преподавателя           |
|                                |                                |
|Дата 2.06.2000                  |Дата                            |

                               г. Углич 2000 г.
                                 СОДЕРЖАНИЕ
| ВВЕДЕНИЕ                                                                  |3  |
|1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ                                                     |4  |
|2. РАЗРАБОТКА СТРУКТУРНОЙ СХЕМЫ. ОБОБЩЕННЫЙ АЛГОРИТМ РАБОТЫ                |5  |
|3. РАЗРАБОТКА И РАСЧЕТ ЭЛЕМЕНТОВ ПРИНЦИПИАЛЬНОЙ ЭЛЕКТРИЧЕСКОЙ СХЕМЫ        |8  |
|3.1 Выбор микропроцессорного комплекта                                     |   |
|3.1.1 Выбор кварцевого резонатора                                          |8  |
|3.1.1.1 Определение погрешности от источника синхронизации                 |9  |
|3.2 Выбор интегральной микросхемы дешифратора                              |10 |
|3.3 Выбор средств индикации                                                |10 |
|3.4 Выбор  внешних элементов гальванической развязки                       |10 |
|                                                                           |11 |
|4 .Определение погрешности измерения длительности импульса                 |   |
|                                                                           |12 |
|5 Листинг программы расчета длительности импульса на языке ассемблер       |14 |
|СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ                                           |20 |
|Приложение 1                                                               |21 |

                                  ВВЕДЕНИЕ
         В настоящее время микропроцессорная техника делает большие успехи в
применении,  в  различных  отраслях   производства.  Сейчас  микропроцессоры
стали применяться не только в бытовой технике и в автомобилях, но и  даже  в
производстве управляя сложнейшими технологическими процессами.
         Цель курсового проекта послужила создание измерительного прибора на
базе микропроцессора AVR90S8515
         Микропроцессоры американской фирмы ATMEL, в последние  годы  делают
значительные успехи в освоении новых областей  в  сфере  своего  применения.
Микропроцессорное ядро, используемое  в  микроконтроллерах  AVR,  похоже  на
большинство процессоров с RISC  архитектурой,  пожалуй,  за  исключением  8-
разрядных регистров. Разработано двумя разработчиками из Норвегии, в  городе
Trondheim. Позже, в 1995 году, разработка была приобретена фирмой Atmel.  До
сих пор развитие ядра происходит в Норвегии, в  то  время  как  периферия  и
память разрабатываются в отделении Atmel в Калифорнии.
         С  помощью  проектируемого  прибора  можно  будет  измерять   длину
импульсов в диапазоне от  10  мСек  до  10  Сек  измеренная  величена  будет
отображаться на четырех разрядном светодиодном индикаторе
                            1.ТЕХНИЧЕСКОЕ ЗАДАНИЕ
         Необходимо  спроектировать   прибор  для   измерения   длительности
импульса.
|                                           |Мин.          |Макс.        |
|Диапазон измерения:                        |10 мС         |10с          |
|Погрешность измерения                      |              |1%           |
|Количество гальванически развязанных       |1                           |
|каналов                                    |уровень ТТЛШ                |
|Входное напряжение логической единицы      |уровень ТТЛШ                |
|Входное напряжение логического нуля        |                            |
|Количество режимов измерения               |2                           |
|                                           |Из-ие высоко уровня         |
|                                           |длительности импульса       |
|                                           |Из-ие низкого уровня        |
|                                           |длительности импульса       |
|Возможность индикации измеренной           |Есть                        |
|длительности                               |Светодиодные индикаторы –4  |
|                                           |шт                          |
|Количество режимов отображения измеренной  |                            |
|длительности                               |2                           |
|                                           |отображение в секундах      |
|                                           |отображение в мили секундах |
|Выходное напряжение источника питания      |+5 В                        |

         2. РАЗРАБОТКА СТРУКТУРНОЙ СХЕМЫ. ОБОБЩЕННЫЙ АЛГОРИТМ РАБОТЫ

          Структурная схема измерительного прибора приведена на рис.1


                  Структурная схема измерительного прибора

         [pic]
     мСек – кнопка выбора отображения измеренной длительности импульса в
                               мили Секундах.
     Сек - кнопка выбора отображения измеренной длительности импульса в
                                  Секундах
      Инверсия – кнопка выбора первого или второго режима измерения см
                                     ТЗ.
     Св.Д1. – светодиод индицирующий включение второго режима измерения
        Св.Д2. – светодиод индицирующий включение режима отображения
                измеренной длительности импульса в секундах.
        Св.Д3. – светодиод индицирующий включение режима отображения
              измеренной длительности импульса в мили секундах.
              AVR90S8515 – однокристальная микро-ЭВМ AVR90S8515
                                 Рисунок 1.

         Дешифраторы  производят  дешифрацию  двоично-десятичного  кода,   а
индикаторы отображают результаты измерения.
         При включении питания микро-ЭВМ производит выполнение  подпрограммы
инициализации   (инициализация   стека,   настройка   используемых    портов
ВВОДА/ВЫВОДА,  загружается  в  компаратор  А  таймер/счетчика  число  80000,
выбирается  нужный  режим  работы  таймер/счетчика  1  (бит  CTC1   регистра
управления таймером/счетчиком  1(TCCR1B),  устанавливается  в  единицу,  что
означает сброс таймер/счетчика 1 при срабатывании компаратора А,  также  бит
CS10, находящийся  в  этом  же  регистре,  устанавливается  в  единицу,  это
означает,  что  в  качестве  источника  синхронизации  будет  использоваться
частота  синхронизации   кварцевого   резонатора),   происходит   глобальное
разрешение прерываний ). Далее  происходит  опрос  состояния  кнопки  выбора
режима измерения длительности импульса и в зависимости от ее состояния (0  –
измерение низкого уровня  длительности  импульса,  1  -  измерение  высокого
уровня  длительности  импульса  ),  происходи  переход  на   соответствующую
подпрограмму (IMPULS_POLOGITELNAY – подпрограмма измерения  высокого  уровня
длительности  импульса,  IMPULS_OTRICHATELNAY  -    подпрограмма   измерения
низкого  уровня  длительности  импульса  ).  Алгоритм   работы   этих   двух
подпрограмм  практический  одинаковый,   для   примера   рассмотрим   работу
подпрограммы  IMPULS_POLOGITELNAY.  При  переходе  на  эту  подпрограмму  МП
начинает опрос линии PA0 и в случае обнаружения на  ней  логической  единицы
запускает  таймер/счетчик  1.  При  срабатывании  компаратора  А  происходит
сброс таймер/счетчика 1 (в компаратор А загружено число – 8000, при  частоте
синхронизации МП  равной  8Мгц  срабатывание  компаратора  произойдет  ровно
через 1мС(1% ),  что  говорит  о  прошествии  1мСек.  Отчет  мили  секунд  в
соответствии с ТЗ начнется после прошедшей девятой мили  секунды.  Индикация
измеряемой длительности импульса происходит каждые 50 мСек.  Вмести  с  этим
МП продолжает сканировать линию PA0 и после того как  он  обнаружит  на  ней
состояние логического нуля,  что  говорит  о  конце  измерения  длительности
импульса, произойдет остановка таймера/счетчика 1 и произведется переход  на
подпрограмму перевода двоичного  шестнадцати  разрядного  числа  в  двоично-
десятичное - bin16BCD5 (детальный алгоритм  перевода  двоичного  шестнадцати
разрядного числа в двоично-десятичное  рассмотрен  ниже).  После  выполнения
подпрограммы bin16BCD5, МП опрашивает состояние  кнопок  мСек  и  Сек.  Если
нажата кнопка Сек (индикация результата измерения производится в  секундах),
то тогда МП путем  выдачи с линии РА7 логической  единицы  индицирует  точку
разделяющую целую часть числа от дробной. Если не нажата  ни  одна  из  двух
кнопок  или  нажаты  все,    то   тогда   индикация   результата   измерения
производится не будет. После  того  как  произведется  индикация  результата
измерения (через линии порта D и C) МП возвращается  в  основную  программу.
На этом цикл работы программы заканчивается .
         Алгоритм подпрограмма  перевода  двоичного  шестнадцати  разрядного
числа в двоично-десятичное
         Арифметико-логическое  устройство  AVR-микроконтроллеров   (как   и
других микропроцессоров) выполняет элементарные арифметические и  логические
операции над числами, представленными  в  двоичном  коде.  В  двоичном  коде
считываются результаты преобразования АЦП, в двоичном коде (в формате  целых
чисел или чисел с плавающей точкой) удобно выполнять  обработку  результатов
измерения.   Однако,   когда   окончательный   результат   отображается   на
индикаторе, он должен быть преобразован в  десятичный  формат,  удобный  для
восприятия человеком.
 Форматы представления десятичных чисел
         В  настоящее  время  распространены   два   формата   представления
десятичных чисел в микропроцессорах  -  упакованный  двоично-десятичный  код
(BCD-Binary-Coded Decimal).
         Упакованный BCD-код - это такое  представление  десятичного  числа,
когда  каждая  десятичная   цифра   представляется   4-х   битным   двоичным
позиционным кодом 8-4-2-1. При этом  байт  содержит  две  десятичные  цифры.
Младшая десятичная цифра занимает правую тетраду (биты 3  :  0),  старшая  -
левую тетраду (биты 7 :  4).  Многоразрядные  BCD-числа  занимают  несколько
смежных байт. Если число является знаковым, то  для  представления  знака  в
BCD-формате отводится старшая тетрада старшего байта
         Алгоритм   подпрограммы   bin16bcd5   заключается   в    следующем.
Предположим, что имеется целое беззнаковое 16-битное число  (диапазон  от  0
до  65535).  Очевидно,  что  необходимо  найти  5  десятичных  цифр.  Способ
преобразования заключается в том, чтобы, вычитая из  исходного  числа  число
10000, сначала определить десятичную цифру десятков тысяч.  Затем  находится
цифра тысяч последовательным вычитанием числа 1000 и т. д. Вычитание  каждый
раз производится до  получения  отрицательной  разности  с  подсчетом  числа
вычитаний.  При  переходе  к  определению  каждого  следующего   десятичного
разряда   в   регистрах   исходного   числа   восстанавливается    последняя
положительная разность. После  того,  как  будет  найдена  десятичная  цифра
десятков, в регистрах исходного числа останется десятичная цифра единиц.
         Графический алгоритм работы программы представлен в п.1
3. РАЗРАБОТКА И РАСЧЕТ ЭЛЕМЕНТОВ ПРИНЦИПИАЛЬНОЙ ЭЛЕКТРИЧЕСКОЙ СХЕМЫ
         3.1 Выбор микропроцессорного комплекта
         В  соответствии  с  ТЗ  ядром  измерительного   прибора   послужила
однокристальная микро-ЭВМ AVR90S8515 фирмы Atmel.
         Основные характеристики однокристальной микро-ЭВМ AVR90S8515:
• AVR RISC архитектура - архитектура  высокой  производительности  и  малого
потребления
• 120 команд, большинство которых выполняется за один машинный цикл
•  8  Кбайта   Flash   ПЗУ   программ,   с   возможностью   внутрисистемного
перепрограммирования и  загрузки  через  SPI  последовательный  канал,  1000
циклов стирание/запись
• 512 байтов ЭСППЗУ данных, с возможностью  внутрисистемной  загрузки  через
SPI последовательный канал, 100000 циклов стирание/запись
• 512 байтов встроенного СОЗУ
• 32 x 8 бит регистра общего назначения
• 32 программируемых линий ввода/вывода
• 16-разрядный и 32-разрядный формат команд
• Диапазон напряжений питания от 2,7 В до 6,0 В
• Полностью статический прибор - работает при тактовой частоте от 0 Гц до  8
МГц
• Длительность командного цикла: 125 нс, при тактовой частоте 8 МГц
•  8-разрядный   и   16-разрядный   (с   режимами   сравнения   и   захвата)
таймеры/счетчики
• Сдвоенный ШИМ с 8, 9 или 10-разрядным разрешением
• Программируемый полный дуплексный UART
• Два внешних и десять внутренних источников сигнала прерывания
• Программируемый сторожевой таймер с собственным встроенным генератором
• Встроенный аналоговый компаратор
• Режимы энергосбережения: пассивный (idle) и стоповый (power down)
• Блокировка режима программирования
•  Промышленный  (-40°C...85°C)  и   коммерческий   (0°C...70°C)   диапазоны
температур
• 40-выводной корпус PDIP и 44-выводные корпуса TQFP и PLCC
КМОП микроконтроллер AT90S8515 реализован по AVR RISC архитектуре
(Гарвардская архитектура с  раздельной  памятью  и  раздельными  шинами  для
памяти программ и данных) и совместим по исходным кодам и тактированию с  8-
разрядными микроконтроллерами семейства AVR (AT90SXXX). Выполняя команды  за
один тактовый цикл, прибор обеспечивает  производительность,  приближающуюся
к 1 MIPS/МГц. AVR ядро объединяет мощную систему команд  с  32  8-разрядными
регистрами общего назначения и  конвейерное  обращение  к  памяти  программ.
Шесть из 32 регистров могут использоваться как  три  16-разрядных  регистра-
указателя  при   косвенной   адресации   пространства   памяти.   Выполнение
относительных переходов и команд  вызова  реализуется  с  прямой  адресацией
всех 4К адресного пространства. Адреса  периферийных  функций  содержатся  в
пространстве памяти ввода/вывода. Архитектура  эффективно  поддерживает  как
языки высокого уровня, так и  программы  на  языках  ассемблера.  Встроенная
загружаемая Flash память обеспечивает  внутрисистемное  перепрограммирование
с использованием интерфейса SPI (в последовательном  Встроенная  загружаемая
Flash   память   обеспечивает   внутрисистемное    перепрограммирование    с
использованием интерфейса SPI (в последовательном  низко  вольтовом  режиме)
или с использованием стандартных программаторов энергонезависимой памяти  (в
12-вольтовом параллельном режиме). Потребление  прибора  в  активном  режиме
составляет 3,5 мА и в пассивном режиме 1 мА (при VCC =3  В  и  f=4  МГц).  В
стоповом  режиме,  при  работающем   сторожевом   таймере,   микроконтроллер
потребляет 50 мкА. низко вольтовом режиме) или с использованием  стандартных
программаторов  энергонезависимой  памяти   (в   12-вольтовом   параллельном
режиме). Потребление прибора  в  активном  режиме  составляет  3,5  мА  и  в
пассивном режиме 1 мА (при VCC =3 В и  f=4  МГц).  В  стоповом  режиме,  при
работающем сторожевом таймере, микроконтроллер потребляет 50 мкА.
         3.1.1 Выбор кварцевого резонатора
   Для работы МП  необходим  кварцевый  резонатор  который  подключается  к
выводам XTAL1 и  XTAL2 (см. графическую часть курсового проекта)
Рабочая частота кварцевого резонатора непосредственно  связана  с  точностью
измерения длительности импульса (из рис. 2 видно,  что  чем  больше  частота
синхронизации тем точнее измерение длительности)  для  заданной  погрешности
измерения достаточно, чтобы частота резонатора была равна  fрез=8 МГц
                                    [pic]
                                  Рисунок 2
         3.1.1.1 Определение погрешности от источника синхронизации
         Погрешность  от  кварцевого  резонатора   возникает   в   следствии
нестабильности его частоты во время работы.
         Нестабильность частоты кварцевого резонатора МА406  примерно  равно
0.00001 от частоты синхронизации, исходя из этого погрешность возникающая  в
следствии нестабильности частоты можно определить по формуле
                                    [pic]
         где К - нестабильность частоты кварцевого резонатора
         К=0.00001*8000000=80 Гц
            fBQ – частота кварцевого резонатора
                                    [pic]
         3.2 Выбор интегральной микросхемы дешифратора
         В дешифратора будет использоваться интегральная микросхема КР514ИД2
         3.3 Выбор средств индикации
          В качестве средств индикации будут использоваться светодиодные
индикаторы – ААС3224А
         3.4 Выбор внешних элементов гальванической развязки
   В  качестве  элементов  гальванической  развязки  используется  цифровая
микросхема 249ЛП5 - оптоэлектронный переключатель на основе диодных  оптопар
выполненных в металлостеклянном корпусе.  основные  характеристики  цифровой
микросхемы 249ЛП5 приведены в табл. 1.
                                                                   Таблица 1
             Основные характеристики цифровой микросхемы 249ЛП5
|Электрические параметры                                          |
|Входное напряжение при IВХ=15 мА               |не более 1.7 В   |
|Выходное напряжение в состоянии логического    |0.4 В            |
|нуля                                           |                 |
|Выходное напряжение в состоянии логической     |2.4              |
|единицы                                        |                 |
|Предельные эксплутационные данные                                |
|Входной постоянный ток                         |12 мА            |
|Входной импульсный ток                         |15 мА            |
|Напряжение питания                             |5((0.5) В        |
|Диапазон рабочих температур                    |-60…+85 (С       |

         4 .Определение погрешности измерения длительности импульса
         Погрешность измерения длительности  импульса,  как  уже  говорилось
выше, непосредственно связана непосредственно связана  со  скоростью  работы
МП, в свою очередь скорость которого задается тактовой  частотой  кварцевого
резонатора .
         Величина временного  кванта  (d)  в  нашем  случае,  равна  периоду
следования импульсов кварцевого резонатора(() т.е. d=(. Измеренное  значение
одной мили  секунды  равно  (в  соответствии  с  ТЗ  дискретность  измерения
длительности равна 1мСек):
                                    T=(*N
         Где N – число импульсов, поступивших на таймер/счетчик1.
Следовательно измеренное значение отличается от истинного на величину
погрешности квантования  (К=(tК:
                               (tК=T-Tx=N*(-Tx
где Tx – истинное значение.
Погрешность квантования зависит от величены кванта ( и от моментов начала  и
окончания циклов измерения (см. рис.2) по отношения к  импульсам  кварцевого
резонатора. Очевидно, что как начало и конец  измерения  длительности  могут
располагаться в любой точке между двумя соседними импульсами.  В  результате
возникают две составляющих погрешности (tК Первая из  них  ((t1  см.  рис.2)
положительная, так как измеренный временной интервал  больше  истинного  его
значения,  а  вторая  (t2  отрицательная,  так  как  из  за  нее  измеренный
временной интервал получается больше  фактического.  Следовательно  истинное
значение временного интервала будет:
                        Тх=N*(-((t1-(t2)= N*(-(t1+(t2
Pзакон  распределения  ошибок  (t1  и  (t2  с  учетом   их   разных   знаков
представляет  собой  распределение   Симпсона,   а   средне   квадратическая
погрешность квантования следуя указаниям [2, стр. 20] будет равна
                                    [pic]
                                    [pic]
                                    [pic]


         5 Листинг программы расчета длительности импульса на языке
                                  ассемблер
         Отладка программы была произведена с  помощью  отладчика-симулятора
AVRSTUDIO 3.0
         Код программы:
.include "8515def.inc"
.def   fbinL     =r22           ;двоичное значение, младший байт байт
.def    fbinH   =r23            ;двоичное значение, старший байт
.def    tBCD0   =r23            ;BCD значение, цифры 1 и
.def    tBCD1   =r24            ;BCD значение, цифры 3 и2
.def    tBCD2   =r25            ;BCD значение, цифры 4
; Назначение выводов порта А:
;                      bit 0 - поступает импульс
;                            длительность которого
;                            необходимо измерить
;                      bit 1 - подключается кнопка
;                             режима измерения
;                           0 - измерение длительности
;                            отрицательного импульса
;                           1 - измерение длительности
;                            положительного импульса
;                      bit 2 - индикация режима измерения
;                           0 - (светодиод погашен)
;                            индикация режима измерения
;                            отрицательного импульса
;                           1 - (светодиод светится)
;                            индикация режима измерения
;                            положительного импульса
;                      bit 3 - подключается кнопка
;                            режима измерения
;                            длительности импульса в мС
;                      bit 4 - подключается кнопка
;                            режима измерения
;                            длительности импульса в С
;                      bit 5 - подключается светодиод
;                            режима измерения длительности
;                            импульса в мС
;                      bit 6 - подключается светодиод
;                            режима измерения длительности
;                            импульса в С

      .ORG 0
      RJMP MET1
      RJMP IMPULS
      RJMP MET1
      RJMP MET1
1:    RJMP Prog
      RJMP Prog
      RJMP MET1
      RJMP MET1
MET1: LDI R16,0x02
      OUT SPH,R16;     Инициализация
      LDI R16,0X10;    стека
      OUT SPL,R16
      LDI R16,0B11100100
      OUT DDRA,r16     ; НАСТРАИВАЕМ ЛИНИ b 0,1,3,4
            ; ПОРТА А НА ВВОД, а линии 2,5,6,7 на вывод
      LDI R16,0B11111111; НАСТРАИВАЕМ ВСЕ ЛИНИИ
      OUT DDRC,R16     ;     ПОРТА C НА ВЫВОД
      LDI R16,0B11111111; НАСТРАИВАЕМ ВСЕ ЛИНИИ
      OUT DDRD,R16     ;     ПОРТ D НА ВЫВОД
      LDI R16,0B01000000 ;Разрешение прерывания
      OUT TIMSK,R16    ;  по переполнению T/C1
      LDI R16,0B00000000;ЗАПРЕТ прерывания
      OUT GIMSK,R16    ; по INT0
      LDI R16,0X1F ;Загружаем в
      OUT OCR1AH,R16 ; компататор А - 8000
      LDI R16,0X40
      OUT OCR1AL,R16
      LDI R16,0B00000000
      OUT TCNT1L,R16
      LDI R16,0B00001000 ;T/C1 будет обнуляться при каждом совпадении
      OUT TCCR1B,R16        ;со значением компаратора А
      LDI R16,0B10000000 ;Глобальное разрешение прерываний
      OUT SREG,R16
      LDI R16,0X9
      LDI R19,0X9 ;R19 регистр переназначенный для сравнения
                 ; с R16 если они равны, то тогда измерение
                 ; длительности импульса не начиналось
      CLR R17
      clr r22
OPROS_KEY_OF_INVERT:  ; Опрос состояния кнопки
      SBIC PORTA,1   ; режима измерения длительности импульса

      RCALL IMPULS_POLOGITELNAY ; режим из-ия длительности сигнала высокого
уровня
      RCALL IMPULS_OTRICHATELNAY ; режим из-ия длительности сигнала низкого
уровня
M2:
IMPULS_POLOGITELNAY:
      SBI PORTA,2 ;Включаем светодиод
      SBIC PORTA,0 ;Идет сканирование линии PA0
      RCALL IMPULS
      SBIS PORTA,0 ; Происходит проверка на наличие 1
      RCALL IMPILS_1_TO_0; на PA1, если ее нет, тогда переход
M5:   CPI R17,0xFF
      BRCS M2    ; если R17 переполнится, то
      LDI R17,0XA      ; тогда занесем в R17 10
      RJMP M2;
Prog: INC R17 ;
      CPI R17,0XA ; Отчет длительности импульса начнется
      BRCS M3 ; тогда когда в R17 будет 10(DEX)(пройдет 10 мС)
      INC R16 ;инкремент R17(счетчик прошедших мСекунд срабатывает при
R17>10)
      BRBC 1,M3 ; если R16 переполнится
      INC R18 ; тогда инкрементируем R18(Длительность импульса
             ; Прошло десять мС далее идет счет каждой мС
M3:   RETI   ; находится в R18(ст. разряд),R16(мл. разряд)
IMPULS:
      LDI R20, 0B00001001 ; если приходит импульс то тогда запускается T/C1
      OUT TCCR1B,R20
      RET
IMPILS_1_TO_0:
      LDI R20,0B00000000 ; если импульс закончился T/C1 останавливается
      OUT TCCR1B,R20
      CPSE R16,R19       ;проверка на начало цикла измерения если он
начился
RCALL TEST_OF_STOP_TC1 ; то тогда переход на    TEST_OF_STOP_TC1
      SBIC PORTA,1 ; Опрос состояния кнопки режима измерения длительности
импульса
      RCALL IMPULS_POLOGITELNAY; режим из-ия высокого уровня длительности
      RCALL IMPULS_OTRICHATELNAY ; режим из-ия низкого уровня длительности
      RET
TEST_OF_STOP_TC1:  ; подпрограмма проверки (действительно ли T/C1
остановился
      IN R21,TCCR1B ;во время режима измерения длительности)
      ANDI R21,0B000000000 ;если все в порядке, то тогда переходим на
bin16BCD5
      BRNE ENDTEST_OF
      RCALL bin16BCD5
ENDTEST_OF:
      RET
M2OTR:
IMPULS_OTRICHATELNAY:
      CBI PORTA,2 ;Выключаем светодиод
      SBIS PORTA,0 ; Происходит проверка на наличие 0
      RCALL IMPULS_OTR
      SBIC PORTA,0
      RCALL IMPILS_0_TO_1; на PA1, если его нет, тогда переход
M5OTR:      CPI R17,0xFF
      BRCS M2OTR
      LDI R17,0XA
      RJMP M2OTR;
IMPULS_OTR:
      ;LDI R16,0X9
      ;LDI R17,0X0
      LDI R20, 0B00001001 ; то тогда запускается T/C1
      OUT TCCR1B,R20
      RET
IMPILS_0_TO_1:
      LDI R20,0B00000000 ;T/C1 остановлен
      OUT TCCR1B,R20
      CPSE R16,R19
      RCALL TEST_OF_STOP_TC1_OTR
      SBIC PORTA,1
      RCALL IMPULS_POLOGITELNAY
      RCALL IMPULS_OTRICHATELNAY
      RET
TEST_OF_STOP_TC1_OTR:
      IN R21,TCCR1B
      ANDI R21,0B000000000
      BRNE ENDTEST_OF_OTR
      RCALL bin16BCD5
ENDTEST_OF_OTR:
      RET

bin16BCD5: Подпрограмма перевода двоичного числа в двоично-десятичное
       MOV R22,R16
       MOV R23,R18
        ldi     tBCD2, -1
bin16BCD5_loop_1:
        inc     tBCD2             ; определение
        subi    fbinL, low(10000) ; количества
        sbci    fbinH, high(10000)      ; десятков тысяч
        brsh    bin16BCD5_loop_1  ;в числе которое переводится
        subi    fbinL, low(-10000)
        sbci    fbinH, high(-10000)
        ldi     tBCD1, -0x11
bin16BCD5_loop_2:
        subi    tBCD1, -0x10      ;определение
        subi    fbinL, low(1000)  ; количества
        sbci    fbinH, high(1000) ; тысяч
        brsh bin16BCD5_loop_2     ;в числе которое переводится
        subi    fbinL, low(-1000)
        sbci    fbinH, high(-1000)
bin16BCD5_loop_3:
        inc     tBCD1             ;определение
        subi    fbinL, low(100)   ; количества
        sbci    fbinH, high(100)  ; десятков
        brsh bin16BCD5_loop_3     ;в числе которое переводится
        subi    fbinL, -100
        ldi     tBCD0, -0x10
bin16BCD5_loop_4:
        subi    tBCD0, -0x10        ;определение
        subi    fbinL, 10         ; количества
        brsh bin16BCD5_loop_4     ; единиц
        subi    fbinL, -10        ;в числе которое переводится
        add     tBCD0, fbinL
        LDI R16,0X9
       LDI R17,0X0
       ldi r18,0x0
       LDI R27,0X0
WAIT_PRESS_KEY:  ; Подпрограмма проверки, в чем отображать
               ; индикацию в мСекундах или Секутдах
               ; Примечание:
               ; если ни одна из кнопок режима отображения
               ;  не нажата или нажаты все, индикация отображаться не БУДЕТ
      SBRC R27,0
      RJMP EXIT
      SBIC PORTA,3 ; Если     нажата кнопка мСекунды
      RCALL FLASH_mC ; то тогда переход на FLASH_mC
      SBIC PORTA,4 ; если нажата кнопка Секунды
      RCALL FLASH_C ; то тогда переход на FLASH_C
      RJMP WAIT_PRESS_KEY ; если ни одна из кнопок не нажата
                 ; то тогда ожидаем нажатия
      SBIS PORTA,3  ; в противном случае выход из подпрограммы
      RJMP EXIT
      SBIC PORTA,4  ; если нажаты все две кнопки, то тогда
                 ;  ожидаем пока одну кнопку не отключат
      RJMP WAIT_PRESS_KEY
      OUT PORTD,R23    ; вывод на порт D двоично-десятичного числа
      OUT PORTC,R24  ; вывод на порт C двоично-десятичного числа
      OUT TCNT1H,R18 ;обнуление регистра NCNT1H (ст. регистр T/C1)
      OUT TCNT1L,R18 ;обнуление регистра NCNT1L (мл. регистр T/C1)

EXIT: RET
FLASH_mC:
      SBI PORTA,5 ; Включаем светодиод (режим мСекунды)
      CBI PORTA,6 ; Выключаем светодиод (режим Секунды)
      CBI PORTA,7 ; и выключаем разделительную точку
      INC R27
      RET
FLASH_C:
      CBI PORTA,5 ; Включаем светодиод (режим Секунды)
      SBI PORTA,6 ;Выключаем светодиод (режим мСекунды)
      SBI PORTA,7 ;  и включаем разделительную точку
      INC R27
      RET



                      Список использованных источников

         1. Описание однокристальной микро-ЭВМ AVR90S8515
         2. Методическое указания и задания по курсовому проектированию
            «Расчет и проектирование цифровых измерительных приборов»


смотреть на рефераты похожие на "Проектирование прибора измеряемого длительность импульса"