Разработка генератора сигналов тональных рельсовых цепей
Разработка генератора
сигналов тональных рельсовых цепей
Введение
микроконтроллер программа технический
В настоящее время все большая часть информации, передаваемой
по разнообразным каналам связи, существует в цифровом виде. Это означает, что
передаче подлежит не непрерывный (аналоговый) модулирующий сигнал, а
последовательность целых чисел n0, n1, n2, …,
которые могут принимать значения из некоторого фиксированного конечного
множества. Эти числа, называемые символами (symbol), поступают от источника
информации с периодом T, а частота, соответствующая этому периоду, называется
символьной скоростью (symbol rate): fT = 1/T.
В настоящее время в устройствах железнодорожной автоматики,
телемеханики и связи применяется большое количество различных микропроцессоров
и микроконтроллеров. В зависимости от решаемых задач они могут иметь отличия в
архитектуре, наборе периферийных устройств, производительности, системе команд.
В данной научной работе используется 8-разрядный
универсальный микроконтроллер PIC16F873A фирмы Microchip, построенный по
гарвардской архитектуре и включающий в себя весь необходимый набор периферийных
модулей, таких, как системный монитор, запоминающие устройства, порты
ввода-вывода, таймеры, аналого-цифровой преобразователь, схемы захвата и
сравнения, широтно-импульсный модулятор, аналоговые компараторы.
Целью данной научной работы является:
· разработка микропроцессорного устройства
генератора АМ сигналов ТРЦ. При выполнении поставленной задачи, происходит
укрепление полученных ранее знаний работы микроконтроллера PIC16F873a и приобретение новых.
· Изучение программных средств разработки
микропроцессорных устройств и программирования микроконтроллеров.
· В результате полученные наработки позволят
создать макет генератора сигналов тональных рельсовых цепей.
Для начала я решила сравнить виды модуляции:
1. Амплитудная модуляция
Данный тип модуляции достаточно прост в
исполнении, но отличается невысокой помехоустойчивостью. Помехонеустойчивость
возникает вследствие узкой полосы модулируемого сигнала.
. Частотная модуляция
В результате данного типа модуляции сигнал
модулирует частоту опорного сигнала, а не мощность. Поэтому если величина
сигнала увеличивается, то, соответственно, растет частота. Ввиду того, что
полоса получаемого сигнала намного шире исходной величины сигнала. Такая
модуляция характеризуется высокой помехоустойчивостью, однако для ее применения
следует использовать высокочастотный диапазон.
. Фазовая модуляция
В процессе данного типа модуляции
модулирующий сигнал использует фазу опорного сигнала. При данном типе
модулирования получаемый сигнал имеет достаточно широкий спектр, потому что
фаза оборачивается на 180 градусов. Фазовая модуляция активно используется для
формирования помехозащищенной связи в микроволновом диапазоне.
1.
Техническое задание
При амплитудной модуляции несущей частоты «пачке импульсов»
соответствует генерация меандра 0-1-1. Интервалу соответствует уровень
логического «0». Частота манипулированного сигнала остаются неизменными.
Амплитудная манипуляция редко используется на практике, так как из всех видов
манипуляции наименее помехоустойчива.
При амплитудной манипуляции модулируемым параметром
радиосигнала является его амплитуда. В настоящее время применяется лишь
двоичная амплитудная манипуляция.
В данной научной работе применены несущие частоты: 420Гц,
480Гц, 580Гц, 720Гц, 780Гц. При переключении пятипозиционного переключателя SA2 будут формироваться
частоты 420 Гц, 480Гц, 580Гц, 720Гц, 780Гц соответственно.
Применяется двухпозиционный переключатель, при переключении
которого будут формироваться частоты манипуляции, либо 8 ГЦ, либо 12 Гц.
Устройство будет формировать амплитудно-манипулированный
сигнал только тогда, когда:
. Первой нажимается кнопка несущей частоты 420 Гц
. Затем нажимается кнопка 8 Гц или 12 Гц.
В случае нарушения последовательности нажатия кнопок,
устройство перестает работать.
Скважность импульсов:
На выходе получают «пачку импульсов»
Рис. 1 Форма сигнала при амплитудной манипуляции
Произведенные
расчеты
- период несущей частоты
1) (сек)
2) (сек)
3) (сек)
4) (сек)
5) (сек)
Половина периода несущей частоты
1. (сек)
2. (сек)
3. (сек)
4. (сек)
5. (сек)
- период модуляции
1) (сек)
2) (сек)
Найдем полупериод частоты 8 Гц и 12 Гц
) Полупериод частоты 8 Гц находится:
(сек)
,0625 - полупериод частоты 8 Гц.
) Полупериод частоты 12 Гц находится:
(сек)
,0417 - полупериод частоты 12 Гц.
- это полупериод
(12) - модулирующие частоты
- число машинных циклов
- подобрано из условия, чтобы самое большое (где 238) не
превышало 256, но было максимальным чтобы была максимальная точность.
Задается выдержка времени:
1)
2)
3)
4)
5)
· предделитель 5*238 - 420.2Гц
· предделитель 5*208 - 480.8Гц
· предделитель 5*172 - 581.4Гц
· предделитель 5*139 - 719.4Гц
· предделитель 5*128 - 781.3Гц
v
Период будет с точностью до 0,00128205 секунды
Корпуса
микроконтроллеров
Микроконтроллеры PIC16F873A выпускаются в 28 выводных
корпусах, SOIC, SSOP и QFP (рис. 2.1)
Рис. 2.1. Корпуса микроконтроллеров:
а - PDIP; б - SOIC; с - QFP
v Корпус PDIP (Plastic Dual In-line Package - пластиковый корпус с
двумя рядами выводов) представляет собой пластиковый
прямоугольник с двумя рядами выводов по длинным сторонам, предназначенный для
монтажа в отверстия печатной платы.
v Корпус SOIC (Small-Outline Integrated Circuit - малогабаритная
интегральная схема) также представляет собой прямоугольник с двумя рядами
выводов и предназначен для поверхностного монтажа, габариты SOIC примерно в два
раза меньше, чем у аналогичного PDIP корпуса.
v Разновидностью SOIC является корпус SSOP (Shrink
Small-Package - уменьшенный малогабаритный корпус), имеющий еще меньшие
габариты.
v Корпус QFP (Quad Flat Package - квадратный тонкий
корпус) предназначен для поверхностного монтажа и представляет собой квадратный
пластиковый квадрат, выводы которого расположены по периметру. За счет чего габариты
корпуса меньше чем у SSOP.
Большинство выводов мультиплексировано, то есть один вывод
используется различными устройствами в зависимости от настроек.
Назначение выводов микроконтроллера PIC16F873A для PDIP, SOIC
икорпусов приведено на рисунке 2.2.
Рис. 2.2. Назначение ножек микроконтроллера PIC16F873A
В данной научной работе были использованы ножки, описание
которых приведены в таблице 1.
Таблица 1. Назначение выводов микроконтроллеров PIC16F873
Обозначение вывода
|
Описание
|
MCLR/
|
Вход сброса микроконтроллера или вход
напряжения программирования. Сброс микроконтроллера происходит при низком
логическом уровне сигнала на входе.
|
RA2/AN2/VREF
|
RA2 может быть настроен как аналоговый канал 2
или вход отрицательного опорного напряжения
|
OSC1/CLKIN
|
Вход генератора / вход внешнего тактового
сигнала
|
OSC2/CLKOUT
|
Выход генератора. Подключается кварцевый или
керамический резонатор. В RC режиме тактового генератора на выходе OSC2 присутствует сигнал CLKOUT, равный ;
|
RB0/INT
|
Может использоваться в качестве входа внешних
прерываний;
|
RB1;
|
|
RB2;
|
|
RB3/PGM
|
Может использоваться в качестве входа для
режима низковольтного программирования
|
RB4
|
Может использоваться в качестве источника
прерывания по изменению уровня входного сигнала
|
RB5
|
Может использоваться в качестве источника
прерывания по изменению уровня входного сигнала
|
RB6/PGC
|
Может использоваться в качестве источника
прерывания по изменению уровня входного сигнала или вывода для режима
внутрисхемной отладки ICD, а также как тактовый вход в режиме
программирования;
|
RB7/PGD
|
Используется в качестве источника по изменению
уровня входного сигнал или вывод для режима внутрисхемной отладки ICD. Вывод
данных в режиме программирования
|
Основные
технические характеристики микроконтроллера PIC16F873A
Ниже приведены Основные технические характеристики
микроконтроллера PIC16F873A:
Ø количество машинных
команд - 35;
Ø команды выполняются за 1
машинный цикл, за исключением команд перехода, которые выполняются за 2 цикла;
Ø тактовая частота до 20
МГц;
Ø объем FLASH памяти
программ - 4096 14-разрядных слов;
Ø объем памяти данных - 192
байта;
Ø объем энергонезависимой
памяти данных EEPROM - 128 байт;
Ø система прерываний
включает 14 источников;
Ø 8-уровневый аппаратный
стек;
Ø прямой и косвенный режим
адресации ячеек памяти данных;
Ø внутренняя схема сброса
по включению питания (POR);
Ø сторожевой таймер WDT с
собственным RC генератором;
Ø возможность
программирования и отладки в готовом устройстве;
Ø широкий диапазон
напряжений питания - от 2,0 до 5,5 В;
Ø малое энергопотребление -
до 10 мА в рабочем режиме и <1 мкА в режиме ожидания.
Структурная
схема микроконтроллера
Микроконтроллер включает вычислительное ядро и ряд
периферийных модулей, связанных между собой 8-разрядной шиной данных.
Структурная схема PIC16F873A представлена на рис. 2.3.
Рис. 2.3. Структурная схема микроконтроллера
Ядро микроконтроллера осуществляет выборку и исполнение
команд из памяти программ, а также управление процессом вычисления.
Схема сброса (системный монитор), предназначена для
приведения микроконтроллера в исходное состояние при включении электропитания
(POR), просадке напряжения питания ниже заданного уровня (BOR), в случае зависания
программы (WDT) или при подаче логического «0» на внешний вывод MCLR.
Параллельные порты ввода-вывода PORTA, PORTB и PORTC,
предназначены для передачи воздействий объектам управления и получения
информации от внешних устройств в параллельном виде. Порт А имеет шесть линий
ввода-вывода (RA0…RA5), а порты В и С - по восемь (RB0…RB7 и RC0…RC7,
соответственно). Большинство линий ввода-вывода имеют одну или две
альтернативные функции, и могут использоваться другими периферийными модулями.
Модуль последовательного порта ввода-вывода USART позволяет
обмениваться информацией в последовательном виде с другими микропроцессорными
системами через интерфейсы RS-232, RS-422 или RS-485.
Модуль ведущего синхронного последовательного порта (MSSP -
Мaster Synchronous Serial Port), так же предназначен для передачи информации в
последовательном виде, но в отличие от USART обмен выполняется внутри
микропроцессорной системы. При этом используются интерфейсы SPI либо I2C.
Энергонезависимая память данных EEPROM служит для хранения
данных, которые не должны стираться при выключении источника питания.
Три модуля таймеров TMR0, TMR1 и TMR2 позволяют аппаратно
формировать интервалы времени. Таймеры TMR0 и TMR2 имеют 8 - разрядный счетчик,
а таймер TMR1 - 16-разрядный.
Модуль 10-разрядного аналого-цифрового преобразователя АЦП,
предназначен для преобразования аналоговых сигналов в цифровой вид.
Два модуля CCP (Capture, Compare, PWM) схем захвата,
сравнения и широтно-импульсной модуляции (ШИМ) CCP1 и CCP2 могут работать в
трех режимах. В режиме захвата модули позволяют сохранить в памяти
микроконтроллера длительность входного сигнала содержимое таймера TMR1 в момент
поступления внешнего сигнала. В режиме сравнения, наоборот, формируется сигнал
на выходе микроконтроллера при достижении счетчиком таймера TMR1 определенного
значения. В режиме ШИМ модуль ССР, совместно с таймером TMR2, позволяет
сформировать на выходе микроконтроллера импульсный широтно-модулированный
сигнал.
Два аналоговых компаратора С1 и С2, позволяющие производить
попарное сравнение уровня четырех аналоговых сигналов.
Организация
памяти микроконтроллера PIC16F873A
В микроконтроллере PIC16F873A реализовано три вида памяти:
ü оперативное запоминающее устройство (ОЗУ)
- статическая память данных объемом 192 байта;
ü Flash память программ объемом
4096 строк, где размещается последовательность команд, составляющих программу;
Память данных и память программ имеют раздельные шины адреса
и данных, что позволяет выполнять параллельный доступ.
Параллельные
порты микроконтроллера PIC16F873A
Порты используются для ввода информации от внешних устройств
к микропроцессору и вывода информации от процессора к внешним устройствам.
Параллельные порты могут одновременно передавать несколько бит информации.
Микроконтроллер PIC16F873A имеет три параллельных порта ввода-вывода: 6-ти разрядный
порт A
и два 8-ми разрядных порта B и C. Выводы порта A мультиплексированы с входами аналогово-цифрового
преобразователя и выходами компараторов. Выводы порта B со схемой низковольтного
программирования и с входом внешнего прерывания, а порта C со схемами интервального
таймера, широтно-импульсного модулятора, последовательной шины и
последовательного порта.
Каналы портов ввода-вывода имеют отличия, которые заключаются
в устройстве входного и выходного каскада, содержат различные дополнительные
цепи, позволяющие мультиплексировать порты с другими периферийными модулями.
Все каналы порта B имеют встроенную отключаемую нагрузку,
реализованную на транзисторах P, подключенных к шине питания. Эквивалентное
сопротивление открытого транзистора P составляет примерно 20 кОм. Нагрузка
включается и отключается одновременно для всех выводов при помощи 7-го бита
RBPU регистра OPTION_REG. При включении питания каналы порта B настроены на
ввод данных, бит RBPU = 1 и нагрузка отключена. Сброс бита в ноль подключает
нагрузку, но для каналов, настроенных на вывод нагрузка отключается. Все каналы
порта B имеют выход с тремя состояниями. Особенность каналы RB4-RB7 заключается
в том, что они могут использоваться как входы прерывания по изменению уровня.
Вывод RB0 может использоваться как вход внешнего прерывания. В зависимости от
настроек устанавливается флаг INTF по переднему или заднему фронту сигнала на
RB0. Выводы RB6 и RB7 могут быть использованы для внутрисхемного
программирования микроконтроллера.
Каналы порта C мультиплексированы с коммуникационными
периферийными модулями, имеют триггеры Шмитта на входе и выходы с
тремя состояниями.
Для управления работой портов ввода-вывода используются
следующие регистры:
ü TRISA, TRISB и TRISC - определяют
направление передачи информации, при записи 0 в какой-либо разряд регистра TRIS
соответствующий разряд порта работает как выход, а при записи 1 - как вход (0
как O
- Out, 1 как I - In). Направление передачи
информации можно задавать для каждого бита порта отдельно;
ü PORTA, PORTB, PORTC - регистры портов
ввода-вывода. Если порт настроен на вывод информации, то запись 0 или 1 в
разряд этих регистров приводит к появлению соответствующего сигнала на выходах
параллельного порта, если порт настроен на ввод информации, то из этих
регистров можно считать логические уровни, присутствующие на входах
параллельного порта;
В данной научной работе соответствующие выводы параллельных
портов настроены на следующие функции:
Таймеры
В микропроцессорных системах некоторые операции должны
выполняться через определенные, заданные заранее, интервалы времени.
Формировать временные интервалы можно программными или аппаратными средствами.
Программно интервал времени формируется циклом с известной продолжительностью.
Если формирование временных интервалов не единственная задача, возложенная на
микроконтроллер, то временные интервалы целесообразно формировать аппаратным
способом. Для этого предназначены таймеры, которые входят в состав большинства
микроконтроллеров.
Таймер представляет собой счетный регистр, переключение
которого выполняется периодической импульсной последовательностью,
сформированной из тактового сигнала.
Микроконтроллер PIC16F873A содержит 4 таймера: TMR0, TMR1,
TMR2 и сторожевой таймер WDT (Watch Dog Timer).
Таймеры TMR0 и WDT используют общий программируемый делитель.
Таймер TMR0 представляет собой 8-и разрядный счетчик, при переполнении которого
устанавливается флаг прерывания TMR0IF. Счетчик увеличивается на 1 при каждом
поступлении импульса через синхронизатор, который служит для синхронизации
активного фронта внешнего сигнала с внутренней тактовой частотой. В качестве
источников счетных импульсов может выступать внутренний тактовый генератор микроконтроллера,
период следования этих импульсов равен длительности машинного цикла, либо
внешний сигнал, подаваемый на ножку RA4 микросхемы PIC16F873A. Переключение
источника тактового сигнала выполняется битом T0CS. С помощью бита T0SE
настраивается активный фронт внешнего сигнала.
Таймер TMR1
Периферийный модуль TMR1 (рис 3.14) представляет собой 16 -
разрядный регистр, состоящий из двух 8-разрядных регистров TMR1H и TMR1L.
Управление работой TMR1 осуществляется битами регистра T1CON.
Включение таймера выполняется установкой бита TMR1ON. После включения TMR1,
значение спаренного регистра инкрементируется (увеличивается на 1) от h’0000’
до h’FFFF’. При переполнении TMR1 флаг TMR1IF в регистре PIR1 устанавливается в
1. Само прерывание можно разрешить или запретить битом TMR1IE в регистре PIE1.
Частота тактовых импульсов, управляющих таймером, может быть уменьшена в 2, 4
или 8 раз делителем T1CKPS1:T1CKPS0. Состоянием бита TMR1CS выбирается источник
тактовых импульсов. Если TMR1CS = 0, то модуль работает от тактовых импульсов
микроконтроллера и увеличивается на 1 в каждом машинном цикле. При работе от
внешнего источника импульсов приращение таймера происходит по каждому переднему
фронту сигнала на входе T1OSI (если T1OSCEN = 1) или T1OSO (если T1OSCEN = 0).
Бит T1OSCENуправляет тактовым генератором TMR1. Внешний тактовый сигнал может
быть синхронизирован с внутренним тактовым сигналом микроконтроллера, если бит
T1SYNC сброшен.
Таймер TMR2
Таймер TMR2 представляет собой 8-разрядный регистр с
2-разрядным предделителем, 4-разрядным выходным делителем и 8-разрядным
регистром периода PR2. Настройка TMR2 выполняется битами регистра T2CON. Таймер
имеет единственный источник тактового сигнала - внутренний тактовый сигнал
микроконтроллера (Fosc / 4). Частота тактового сигнала может быть уменьшена
предделителем в зависимости от состояния битов T2CKPS0 и T2CKPS1. Для
отключения предделителя указанные биты следует обнулить. По каждому импульсу от
предделителя содержимое таймера TMR2 увеличивается на 1 от 0 до значения, записанного
в PR2. При достижении значения PR2, схема сравнения формирует выходной сигнал,
который передается выходному делителю и модулю MSSP для управления скоростью
передачи данных. Коэффициент деления выходного делителя настраивается битами TOUTPS0, TOUTPS1, TOUTPS2 и TOUTPS3. Запуск работы таймера
выполняется установкой в 1 бита TMR2ON.
Сторожевой таймер WDT используется для сброса
микроконтроллера в случае программного сбоя. Сторожевой таймер должен
обнуляться программно командой CLRWDT. При зависании микроконтроллера, либо
невозможности выполнения команды обнуления сторожевого таймера, после его
переполнения осуществляется сброс микроконтроллера. Тактирование WDT
выполняется отдельным встроенным RC-генератором. Время переполнения сторожевого
таймера составляет примерно 18 мс с отключенным делителем.
.
Подключение питания и тактирование микроконтроллера
Питания устройства микропроцессорной системы в научной работе
осуществляется от батареи, номиналом 5В. Применяется кварцевый резонатор типа: Murate Erie CSA4.00MG с конденсаторами,
емкость которых в пределах от 15 до 68 пФ. Тактовую частоту работы
микроконтроллера формирует внутренний генератор. Этот сигнал необходим для
выполнения инструкций микроконтроллера и работы периферийных модулей. Один
внутренний машинный цикл микроконтроллера состоит из четырех периодов тактового
сигнала. Внутренний генератор может работать в одном из восьми режимов в
зависимости от настроек на нужную частоту такта. Для работы данной
микропроцессорной системы используется кварцевый резонатор с параллельным
резонансом. Кварцевый резонатор ZQ1 подключается к выводам OSC1, OSC2 микроконтроллера.
4.
Подключение устройств к микроконтроллеру
Использованные устройства:
Ø Вывод через ограничивающий
резистор R1 соединен с плюсом батареи питания. Этот вывод связан с кнопкой
сброса RESET.
Ø Выводы OSC1, OSC2 подключены в кварцевому
резонатору.
Ø Выводы PORTА соединены с
звукоизлучателем, который в свою очередь подключен к нулевому потенциалу
источника питания.
Ø Выводы PORTВ соединены:
к портам RB7 и RB6 подключен двухпозиционный переключатель, к
портам RB4, RB3, RB2, RB1, RB0 подключен пятипозиционный переключатель.
5.
Принципиальная схема
. Применяется кварцевый резонатор типа: Murate Erie CSA4.00MG с конденсаторами
емкостью .
. Сопротивления . Это сопротивление
ограничивает ток, поступающий на вход сброса микроконтроллера. Так как
возникают броски напряжения на выводе, приводящие к появлению больших токов,
необходимо использование . Поэтому для исключения срабатывания защелки
последовательно необходимо включить резистор сопротивлением , чтобы обеспечить подачу
низкого уровня напряжения, вместо непосредственного подключения к нулевому
потенциалу источника питания.
. Питания устройства микропроцессорной системы осуществляется
от батареи номиналом 5В.
Спецификация элементов
|
№ по порядку
|
Элемент
|
Тип
|
1
|
DD1
|
PIC16F873A
|
2
|
ZQ
|
Murate Erie CSA4.00MG
|
3
|
C1, C2
|
БМ-2-300-15±10%, 20пФ
|
4
|
RC
|
МЛТ-0.5-1К
|
5
|
Звукоизлучатель BZ1
|
HCM1201X Электромагнитный, 1.5 В, 20 мА, 75
дБ, 2.3 Кгц
|
6
|
SA1
|
С нормально разомкнутыми контактами без
фиксации
|
7
|
SA2
|
|
Рис. 5.1. Принципиальная схема
6.
Разработка программы для микроконтроллера
Для функционирования микроконтроллера требуется разработка
управляющей программы и ее загрузка в память программ. Микроконтроллеры хранят
и выполняют программы в виде двоичных кодов, но разработка двоичных программ не
удобна для человека. Программы разрабатываются на языке ассемблера или языках
программирования высокого уровня таких, как C, Pascal и Basic. Для загрузки
программы в процессор, она должна быть специально подготовлена - преобразована
в машинный (двоичный) код. В настоящее время для разработки программ
микропроцессоров и микроконтроллеров используются персональные компьютеры
совместно с интегрированными средами разработки (IDE, Integrated Development Environment), например MPLAB IDE. Интегрированная среда
разработки включает текстовый редактор, ассемблер MPASM, набор программ для
программирования и отладки, ряд файлов упрощающих разработку. Существует
возможность подключить компиляторы языков высокого уровня, предназначенных для
программирования микроконтроллеров (например, MPLAB C, HI-TECH, MPLAB XC).
Загрузка программы выполняется устройствами, называемыми
программаторами по последовательному интерфейсу внутрисхемного программирования
(ICSP, In-Circuit Serial Programming). Для этого используются три вывода
микроконтроллера: PGC (RB6) - вывод синхронизации, PGD (RB7) - вывод передачи
данных, PGM (RB3) - вывод перехода в режим программирования.
Написание
текста программы на языке Ассемблер
#include p16f873a.inc
__CONFIG _HS_OSC
CNTW EQU H'20' ; определим буфер хранения
рабочего регистраEQU H'21' ; определим буфер хранения
регистра статусаEQU H'22' ; определим буфер хранения частоты
несущейEQU H'23' ; определим буфер хранения частоты манипуляции H'000' I10 ;
перехожу к инициализации
H'004' CNTW ;
зарезервируем значение рабочего регистра STATUS, 0 ;
и регистра статуса CNTS
STATUS, RP0; после чего выберим банк 0 STATUS,
RP1 PIR1, TMR2IF ; проверка того, что прерывание по второму таймеру I8 ;
если прервались по второму таймеру - переход к BZ PIR1, TMR1IF ;
проверка того, что прерывание по первому таймеру I9 ;
переход к выходу из подпрограммы PIR1, TMR1IF ; сброс флага
прерываний по первому таймеру H'04' ; включаем / выключаем таймер
2 для генерации АМ звука T2CON, 1 CNTM, 0 ; CNTM помнит
частоту манипуляции M1 H'51' ; 0.0417 с -
полупериод частоты 12Гц TMR1H H'56' TMR1L I9 ;
переход к выходу из подпрограммы
: MOVLW H'0B' ; 0.0625 с -
полупериод частоты 8Гц TMR1H H'DC' TMR1L I9 ;
переход к выходу из подпрограммы
; включение пищалки
I8: MOVLW H'04' ; включение пищалки
XORWF PORTA, 2 PIR1, TMR2IF ; сброс
флага прерываний по второму таймеру
; выход из подпрограммы: MOVF CNTS, 0 ;
выход из подпрограммы STATUS ; востановим значение регистра
статуса CNTW, 0 ; и рабочего регистра ;
возврат к основной программе с разрешением прерываний
; инициализация: T1CON ;
инициализация, предделитель таймеру 1 не нужен H'20' ;
предделитель 5 T2CON STATUS, RP0 H'0E'
MOVWF ADCON1 B'00000001' TRISA OPTION_REG B'11111111' TRISB B'11100000' TRISC PIE1,
TMR1IE PIE1, TMR2IE INTCON, PEIE INTCON,
GIE STATUS, RP0 STATUS, RP1 PORTA ;
очищаю PORTA, PORTC PORTC
: BTFSS PORTB, 4 ;
здесь проверяю положение переключателя SA2 I1
BTFSS PORTB, 3 ; здесь
проверяю положение переключателя SA2
GOTO I2
BTFSS PORTB, 2 ; здесь
проверяю положение переключателя SA2
GOTO I3
BTFSS PORTB, 1 ; здесь
проверяю положение переключателя SA2
GOTO I4
BTFSS PORTB, 0 ; здесь
проверяю положение переключателя SA2 I5 I0 ;
зациклимся на проверке положения переключателя при выборе частоты несущей
I1: MOVLW D'238' ;
предделитель 5*238 - 420.2Гц I6: MOVLW D'208' ;
предделитель 5*208 - 480.8Гц I6: MOVLW D'172' ;
предделитель 5*172 - 581.4Гц I6: MOVLW D'139' ;
предделитель 5*139 - 719.4Гц I6
I5: MOVLW D'128' ;
предделитель 5*128 - 781.3Гц
: MOVWF CNTP ;
резервируем значение частоты, менять пока недопустимо
: BTFSS PORTB, 7 ; здесь
проверяю положение переключателя SA1 A1PORTB, 6 ; здесь проверяю
положение переключателя SA1 A2 A0 ;
зациклимся на проверке положения переключателя при выборе частоты манипуляции : MOVLW H'0B' ;
0.0625 с - полупериод частоты 8Гц TMR1H H'DC' TMR1L CNTP,
0 ; помещаем значение CNTP в PR2
BSF STATUS, RP0 PR2 STATUS,
RP0
BCF CNTM, 0 ; запоминуем частоту
манипуляции T1CON, TMR1ON ; включаем первый таймер I0 ;
возврат к проверке кнопок выбора частоты несущей
: MOVLW H'51' ; 0.0417 с - полупериод
частоты 12Гц TMR1H H'56' TMR1L CNTP, 0 ;
помещаем значение CNTP в PR2
BSF STATUS, RP0 PR2 STATUS,
RP0
BSF CNTM, 0 ; запоминуем частоту
манипуляции T1CON, TMR1ON ; включаем первый таймер I0 ;
возврат к проверке кнопок выбора частоты несущей
Список
использованной литературы
1. Дубров И.А., Белошицкий М.Ю., Попов А.Н.
Основы микропроцессорной техники: учеб.-метод. пособие. - Екатеринбург:
Издательство УрГУПС, - 2012. - 99 с.
2. PIC16F873A Datasheet [Электронный ресурс]
// Компания Microchip Tеchnology Inc: [сайт]. [2014]. - URL: http://ww1.microchip.com/downloads/en/DeviceDoc/39582C.pdf (дата обращения
20.12.2014).