Разработка генератора сигналов тональных рельсовых цепей

Общая характеристика микроконтроллера PIC16F873A, его корпус, технические параметры, структурная схема и организация памяти. Подключение питания и тактирование, анализ принципиальной схемы. Разработка рабочей программы для заданного микроконтроллера.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 23.04.2015
Размер файла 667,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Разработка генератора сигналов тональных рельсовых цепей

Введение

микроконтроллер программа технический

В настоящее время все большая часть информации, передаваемой по разнообразным каналам связи, существует в цифровом виде. Это означает, что передаче подлежит не непрерывный (аналоговый) модулирующий сигнал, а последовательность целых чисел n0, n1, n2, …, которые могут принимать значения из некоторого фиксированного конечного множества. Эти числа, называемые символами (symbol), поступают от источника информации с периодом T, а частота, соответствующая этому периоду, называется символьной скоростью (symbol rate): fT = 1/T.

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

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

Целью данной научной работы является:

· разработка микропроцессорного устройства генератора АМ сигналов ТРЦ. При выполнении поставленной задачи, происходит укрепление полученных ранее знаний работы микроконтроллера PIC16F873a и приобретение новых.

· Изучение программных средств разработки микропроцессорных устройств и программирования микроконтроллеров.

· В результате полученные наработки позволят создать макет генератора сигналов тональных рельсовых цепей.

Для начала я решила сравнить виды модуляции:

1. Амплитудная модуляция

Данный тип модуляции достаточно прост в исполнении, но отличается невысокой помехоустойчивостью. Помехонеустойчивость возникает вследствие узкой полосы модулируемого сигнала.

2. Частотная модуляция

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

3. Фазовая модуляция

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

1. Техническое задание

При амплитудной модуляции несущей частоты «пачке импульсов» соответствует генерация меандра 0-1-1. Интервалу соответствует уровень логического «0». Частота манипулированного сигнала остаются неизменными. Амплитудная манипуляция редко используется на практике, так как из всех видов манипуляции наименее помехоустойчива.

При амплитудной манипуляции модулируемым параметром радиосигнала является его амплитуда. В настоящее время применяется лишь двоичная амплитудная манипуляция.

В данной научной работе применены несущие частоты: 420Гц, 480Гц, 580Гц, 720Гц, 780Гц. При переключении пятипозиционного переключателя SA2 будут формироваться частоты 420 Гц, 480Гц, 580Гц, 720Гц, 780Гц соответственно.

Применяется двухпозиционный переключатель, при переключении которого будут формироваться частоты манипуляции, либо 8 ГЦ, либо 12 Гц.

Устройство будет формировать амплитудно-манипулированный сигнал только тогда, когда:

1. Первой нажимается кнопка несущей частоты 420 Гц

2. Затем нажимается кнопка 8 Гц или 12 Гц.

В случае нарушения последовательности нажатия кнопок, устройство перестает работать.

Скважность импульсов:

На выходе получают «пачку импульсов»

Рис. 1 Форма сигнала при амплитудной манипуляции

Произведенные расчеты

- период несущей частоты

1) (сек)

2) (сек)

3) (сек)

4) (сек)

5) (сек)

Половина периода несущей частоты

1. (сек)

2. (сек)

3. (сек)

4. (сек)

5. (сек)

- период модуляции

1) (сек)

2) (сек)

Найдем полупериод частоты 8 Гц и 12 Гц

1) Полупериод частоты 8 Гц находится:

(сек)

0,0625 - полупериод частоты 8 Гц.

2) Полупериод частоты 12 Гц находится:

(сек)

0,0417 - полупериод частоты 12 Гц.

2 - это полупериод

8 (12) - модулирующие частоты

1000000 - число машинных циклов

5 - подобрано из условия, чтобы самое большое (где 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 секунды

2. Общая характеристика микроконтроллера PIC16F873A

Микроконтроллер PIC16F873A относится к среднему семейству восьмиразрядных микроконтроллеров PIC-micro, имеет гарвардскую RISC архитектуру. Микроконтроллеры семейства PIC16 различаются объемом внутренней памяти, а так же набором и количеством периферийных устройств, но имеют одинаковое вычислительное ядро и одинаковую систему команд.

Корпуса микроконтроллеров

Микроконтроллеры PIC16F873A выпускаются в 28 выводных корпусах

PDIP, 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-

Outline Package - уменьшенный малогабаритный корпус), имеющий еще меньшие габариты.

v Корпус QFP (Quad Flat Package - квадратный тонкий корпус) предназначен для поверхностного монтажа и представляет собой квадратный пластиковый квадрат, выводы которого расположены по периметру. За счет чего габариты корпуса меньше чем у SSOP.

Большинство выводов мультиплексировано, то есть один вывод используется различными устройствами в зависимости от настроек.

Назначение выводов микроконтроллера PIC16F873A для PDIP, SOIC и

SSOP корпусов приведено на рисунке 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 строк, где размещается последовательность команд, составляющих программу;

ь EEPROM энергонезависимая память объемом 128 байт.

Память данных и память программ имеют раздельные шины адреса и данных, что позволяет выполнять параллельный доступ.

Параллельные порты микроконтроллера 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 мс с отключенным делителем.

3. Подключение питания и тактирование микроконтроллера

Питания устройства микропроцессорной системы в научной работе осуществляется от батареи, номиналом 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. Принципиальная схема

1. Применяется кварцевый резонатор типа: Murate Erie CSA4.00MG с конденсаторами емкостью .

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

3. Питания устройства микропроцессорной системы осуществляется от батареи номиналом 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' ; определим буфер хранения рабочего регистра

CNTS EQU H'21' ; определим буфер хранения регистра статуса

CNTP EQU H'22' ; определим буфер хранения частоты несущей

CNTM EQU H'23' ; определим буфер хранения частоты манипуляции

ORG H'000'

GOTO I10 ; перехожу к инициализации

ORG H'004'

MOVWF CNTW ; зарезервируем значение рабочего регистра

MOVF STATUS, 0 ; и регистра статуса

MOVWF CNTS

BCF STATUS, RP0; после чего выберим банк 0

BCF STATUS, RP1

BTFSC PIR1, TMR2IF ; проверка того, что прерывание по второму таймеру

GOTO I8 ; если прервались по второму таймеру - переход к BZ

BTFSS PIR1, TMR1IF ; проверка того, что прерывание по первому таймеру

GOTO I9 ; переход к выходу из подпрограммы

BCF PIR1, TMR1IF ; сброс флага прерываний по первому таймеру

MOVLW H'04' ; включаем / выключаем таймер 2 для генерации АМ звука

XORWF T2CON, 1

BTFSS CNTM, 0 ; CNTM помнит частоту манипуляции

GOTO M1

MOVLW H'51' ; 0.0417 с - полупериод частоты 12Гц

MOVWF TMR1H

MOVLW H'56'

MOVWF TMR1L

GOTO I9 ; переход к выходу из подпрограммы

M1: MOVLW H'0B' ; 0.0625 с - полупериод частоты 8Гц

MOVWF TMR1H

MOVLW H'DC'

MOVWF TMR1L

GOTO I9 ; переход к выходу из подпрограммы

; включение пищалки

I8: MOVLW H'04' ; включение пищалки

XORWF PORTA, 2

BCF PIR1, TMR2IF ; сброс флага прерываний по второму таймеру

; выход из подпрограммы

I9: MOVF CNTS, 0 ; выход из подпрограммы

MOVWF STATUS ; востановим значение регистра статуса

MOVF CNTW, 0 ; и рабочего регистра

RETFIE ; возврат к основной программе с разрешением прерываний

; инициализация

I10:

CLRF T1CON ; инициализация, предделитель таймеру 1 не нужен

MOVLW H'20' ; предделитель 5

MOVWF T2CON

BSF STATUS, RP0

MOVLW H'0E'

; задаю режимы работы параллельных портов

MOVWF ADCON1

MOVLW B'00000001'

MOVWF TRISA

MOVWF OPTION_REG

MOVLW B'11111111'

MOVWF TRISB

MOVLW B'11100000'

MOVWF TRISC

BSF PIE1, TMR1IE

BSF PIE1, TMR2IE

BSF INTCON, PEIE

BSF INTCON, GIE

BCF STATUS, RP0

BCF STATUS, RP1

CLRF PORTA ; очищаю PORTA, PORTC

CLRF PORTC

I0: BTFSS PORTB, 4 ; здесь проверяю положение переключателя SA2

GOTO I1

BTFSS PORTB, 3 ; здесь проверяю положение переключателя SA2

GOTO I2

BTFSS PORTB, 2 ; здесь проверяю положение переключателя SA2

GOTO I3

BTFSS PORTB, 1 ; здесь проверяю положение переключателя SA2

GOTO I4

BTFSS PORTB, 0 ; здесь проверяю положение переключателя SA2

GOTO I5

GOTO I0 ; зациклимся на проверке положения переключателя при выборе частоты несущей

I1: MOVLW D'238' ; предделитель 5*238 - 420.2Гц

GOTO I6

I2: MOVLW D'208' ; предделитель 5*208 - 480.8Гц

GOTO I6

I3: MOVLW D'172' ; предделитель 5*172 - 581.4Гц

GOTO I6

I4: MOVLW D'139' ; предделитель 5*139 - 719.4Гц

GOTO I6

I5: MOVLW D'128' ; предделитель 5*128 - 781.3Гц

I6: MOVWF CNTP ; резервируем значение частоты, менять пока недопустимо

A0: BTFSS PORTB, 7 ; здесь проверяю положение переключателя SA1

GOTO A1

BTFSS PORTB, 6 ; здесь проверяю положение переключателя SA1

GOTO A2

GOTO A0 ; зациклимся на проверке положения переключателя при выборе частоты манипуляции

A1: MOVLW H'0B' ; 0.0625 с - полупериод частоты 8Гц

MOVWF TMR1H

MOVLW H'DC'

MOVWF TMR1L

MOVF CNTP, 0 ; помещаем значение CNTP в PR2

BSF STATUS, RP0

MOVWF PR2

BCF STATUS, RP0

BCF CNTM, 0 ; запоминуем частоту манипуляции

BSF T1CON, TMR1ON ; включаем первый таймер

GOTO I0 ; возврат к проверке кнопок выбора частоты несущей

A2: MOVLW H'51' ; 0.0417 с - полупериод частоты 12Гц

MOVWF TMR1H

MOVLW H'56'

MOVWF TMR1L

MOVF CNTP, 0 ; помещаем значение CNTP в PR2

BSF STATUS, RP0

MOVWF PR2

BCF STATUS, RP0

BSF CNTM, 0 ; запоминуем частоту манипуляции

BSF T1CON, TMR1ON ; включаем первый таймер

GOTO I0 ; возврат к проверке кнопок выбора частоты несущей

END

Список использованной литературы

1. Дубров И.А., Белошицкий М.Ю., Попов А.Н. Основы микропроцессорной техники: учеб.-метод. пособие. - Екатеринбург: Издательство УрГУПС, - 2012. - 99 с.

2. PIC16F873A Datasheet [Электронный ресурс] // Компания Microchip Tеchnology Inc: [сайт]. [2014]. - URL: http://ww1.microchip.com/downloads/en/DeviceDoc/39582C.pdf (дата обращения 20.12.2014).

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.