44952

Автоколебательный мультивибратор

Реферат

Информатика, кибернетика и программирование

Проанализируем нашу программу, реализующую функцию автоколебательного мультивибратора, с одним выходом. Форма сигнала меандр (скважность, т.е. отношение периода к длительности импульса – 2). Под этот выход можно назначить любой из выводов порта А или В...

Русский

2013-11-14

33.87 KB

8 чел.

  1.  Автоколебательный мультивибратор

Составим программу формирования прямоугольных сигналов вида меандр с частотой 5 kHz на основе микроконтроллера PIC16F84A.

; Multivibrator Meander 5.0 KHz

;========================

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;========================

Sec  equ  0Ch

;-----------------------------------------

org  0

goto  Start

;-----------------------------------------

Start  bsf  Status,5

movlw .0

movwf TrisB

bcf  Status,5

movlw .32

movwf Sec

bcf  PortB,0

nop

nop

;-----------------------------------------

Pause_0 decfsz Sec,F

goto  Pause_0

movlw .30

movwf Sec

bsf  PortB,0

nop

nop

;-----------------------------------------

Pause_1 decfsz Sec,F

goto  Pause_1

goto  Start

;-----------------------------------------

end

Проанализируем нашу программу, реализующую функцию автоколебательного мультивибратора, с одним выходом. Форма сигнала  меандр (скважность, т.е. отношение периода к длительности импульса – 2). Под этот выход можно назначить любой из выводов порта А или В, в программе для этого выбран вывод RB0 порта В. Следовательно, необходимо установить режим работы вывода RB0 “на выход”.

В верхней части расположен так называемый “заголовок” программы. В нем в первую очередь указывается название проекта (т.е. моделируемого устройства), тип микроконтроллера (в данном случае, PIC16F84A) и частота тактового генератора, подключаемого к микроконтроллеру.

В следующей строке осуществляется присвоение имен используемым в программе регистрам общего назначения (в нашем случае – регистру, размещенному по адресу 0Ch). Этот регистр будет участвовать и в процессе формирования нулевого уровня, и в процессе формирования единичного уровня, он необходим для реализации задержки на 100 мкс. Для обеспечения такой малой задержки, достаточно одного регистра общего назначения.

Далее располагается директива, определяющая адрес размещения первой команды программы и команда перехода на начало исполнения программы (обычно, goto  Start). Так как команда goto Start расположена сразу же после директивы org 0 (у команды goto Start нулевой адрес в памяти программ), то с этой команды и начнется исполнение программы.

Тип микроконтроллера, присвоение имен регистрам, разрешение на начало выполнения программы и ориентир конца программы) вводятся так называемыми директивами (не путать с командами программы).

Для более сложных программ, “заголовок”, конечно же, более “объемен”, и он содержит в себе большее количество “поименованных” регистров и директив (в том числе и других типов).

Установка работы выводов RB0 “на выход” или “на вход” назначается с помощью регистра TrisB. Ввиду того, что этот регистр размещен в 1-банке, необходимо осуществить переключение банков (после инициализации микроконтроллера (т.е. по умолчанию), автоматически устанавливается 0-й банк). Для этого нужно установить 5-й бит регистра Status в единицу. Это реализуется командой bsf Status,5. Так как направления работы выводов порта В RB1…RB7 нас не интересуют (они не задействованы), то проще всего установить все биты регистра TrisB в ноль (все выводы порта В работают “на выход”), то есть, записать в этот регистр константу 0 (по умолчанию, все выводы портов настроены на работу “на вход”). Так как напрямую записать константу в регистр (любой) нельзя, то “транспортировка” этого нуля, в регистр TrisB, производится через аккумулятор (через регистр W), что Вы и видите в тексте программы (movlw .0 и movwf  TrisB). В этом случае, задействованы байт-ориентированные команды.

Другой способ: можно было задействовать бит-ориентированную команду bcf. В этом случае, в ноль устанавливаются не все биты регистра TrisB, а только бит с номером ноль: bcf  TrisB,0 (сброс нулевого бита регистра TrisB в 0). На практике, чаще применяется первый вариант, так как в тех случаях, когда нужно перенастроить направления работы более 2-х выводов портов (такие случаи часты), можно обойтись минимальным количеством команд.

Итак, теперь вывод RB0 работает “на выход”, т.е. к нему подключен выход “своей” защелки. Так как дальнейшие “манипуляции” будут производиться в нулевом банке, то возвращаемся в нулевой банк (устанавливаем 5-й бит регистра Status в 0: bcf   Status,5).

Все перечисленные выше операции, можно считать подготовительными.

Форма сигнала “меандр” предполагает одинаковое время формирования этих уровней. В нашей программе это время выбрано равным 100 мкс.

“Выстраиваем упрощенный скелет” программы. После перевода вывода RB0 на работу “на выход” на этом выводе в течение 100 мкс., необходимо формировать нулевой уровень, а затем в течение 100 мкс., формировать единичный уровень. После этого осуществляется переход на новый, полный цикл программы, то есть, на команду Start,  и так до “бесконечности” (пока питание не будет выключено).

Итак, полный цикл программы должен исполняться циклически (периодически). Исходя из принципа работы автоколебательного мультивибратора, формирующего, в пределах периода, двухуровневый сигнал, внутри полного цикла программы, должны быть еще и внутренние циклы. Рабочая точка программы должна “закольцеваться” (т.е. задержаться) на некоторое время в одном цикле (в подпрограмме формирования уровня 0), а затем – в другом цикле (в подпрограмме формирования уровня 1).

Подпрограмма задержки, в простейшем случае, начинается с команды decfsz (incfsz) и обращается к регистру общего назначения, в который, перед ее началом (в промежутке времени между моментом активации индикатора и до начала подпрограммы задержки), закладывается некое число (константа), которое и будет определять время задержки (количество “колец”).

В подпрограмме формирования нулевого уровня в регистр Sec заложено число (константа) .32. Рабочая точка программы войдя в подпрограмму задержки, не выйдет из нее до тех пор, пока задержка не будет полностью отработана. Смысл этой “закольцовки” заключается в том, что при выполнении команды decfsz и отсутствии нулевого результата операции декремента, переход, в конечном итоге, происходит на все ту же команду decfsz и все повторяется по новой, пока число в регистре не уменьшится до нуля. Вот и есть задержка. При нулевом результате операции, рабочая точка программы выходит из подпрограммы задержки и программа исполняется далее.

Зная длительность машинного цикла, можно точно просчитать время задержки. Для того чтобы осуществить декремент (или инкремент) содержимого регистра Sec, необходимо сначала определиться с его содержимым (какую “начальную точку отсчета” задавать?).

В нашем случае в регистр Sec записывается число .32. Число .32 (точка - атрибут десятичной системы исчисления) является константой (которая задается программистом).

“Напрямую” записать это число в регистр Sec (и вообще, в любой регистр) нельзя. Эта операция осуществляется через “посредника” в виде регистра W (movlw .32 и movwf Sec).

Точно таким же образом, как описано выше, для формирования на выводе RB0 единичного уровня, происходит запись в регистр Sec следующей константы (число .30).

Итак, все готово для управления защелкой RB0 порта В. Формируем нулевой уровень на выводе RB0. Применяем для этого бит-ориентированную команду bcf и указываем в ней нулевой бит регистра PortB, который нужно сбросить в 0 (bcf   PortB,0). На выводе RB0, ноль зафиксируется до тех пор, пока мы его не заменим на 1.

Теперь нужно сделать так, чтобы с момента установки, на выводе RB0, нуля и до момента смены этого нуля на единицу, прошло ровно 100 мкс. Предположим, что с учетом того, что в регистр Sec, ранее была записана “нужная” константа (.32), этот интервал времени сформирован.

Установка, на выводе RB0, единицы происходит так же, как и установка нуля, только применяется команда bsf (bsf PortB,0). Точно таким же образом, как описано выше, для формирования, на выводе RB0, единичного уровня, происходит запись, в регистр Sec, следующей константы.

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

Применяется кварц на 4мГц., следовательно, один машинный цикл равен 1мкс. Таким образом, с момента установки на выводе RB0 нуля и до смены его на единицу должно пройти 100 машинных циклов. Подпрограмма задержки Pause_0 - циклическая. Если результат декремента содержимого регистра Sec не равен нулю, то один “виток” этой подпрограммы будет отработан за 3 машинных цикла: команда decfsz выполняется за один м.ц., а команда goto - за два. Таким образом, уменьшение содержимого регистра Sec на единицу происходит за 3 м.ц. (3 мкс.). Если результат декремента содержимого регистра Sec равен нулю, то команда goto не исполняется, и выход из подпрограммы Pause_1 происходит за 2 м.ц. Следовательно, константе .32 соответствует 32х3-1=95 м.ц. (95мкс.).

К 95-ти, плюсуем 2 м.ц. двух команд nop, 2 м.ц. команд установки константы в регистр Sec для формирования времени единичного уровня на выводе RB0 (movlw .30 и movwf Sec) и 1 м.ц. команды установки, на выводе RB0, единицы (bsf   PortB,0). Получаем ровно 100 мкс.

Теперь о двух командах nop, которые стоят перед подпрограммой Pause_1. Если сделать константу равной .33-м, то получится неустранимый “перебор”. Если константа равна .32-м, то получается устранимый “недобор” в 2 мкс., который устраняется добавлением двух команд nop (дополнительная задержка на 2 мкс.).

После того, как результат декремента содержимого регистра Sec станет равным нулю, рабочая точка программы выйдет из этой "закольцовки" по сценарию “программа исполняется далее”.

Различие числовых значений констант (.32 и .30) при формировании нулевого и единичного уровней, объясняется тем, что при формировании, на выводе RB0, единичного уровня, исполняется команда goto (2 м.ц.) и команды подпрограммы Start (в конце текста программы, осуществляется безусловный переход в подпрограмму Start).

Наш случай, конечно, простейший, так как для относительно больших задержек, при длительности машинного цикла 1 мкс (кварц 4 Мгц.), одного регистра не достаточно (необходимо несколько регистров с последовательным их декрементом).


 

А также другие работы, которые могут Вас заинтересовать

83244. Экономика отрасли лекции 461 KB
  Отрасль в условиях рынка. Организация (предприятие) как хозяйствующий субъект рыночной экономики. Экономический анализ и бизнес-планирование. Трудовые ресурсы, их эффективность. Оплата труда. Товарные запасы и показатели эффективности их использования..
83245. Этногенез восточнославянских племен. Формирование древнерусской государственности. Основные историографические теории образования государства 37.5 KB
  Основные историографические теории образования государства. у восточных славян складываются предпосылки для образования государства: Возникновение древнерусского государства связывают с объединением политических центров в Новгороде и Киеве князем Олегом в 882 г.
83246. Эмоциональный интеллект 18.93 KB
  Представляет собой способность определить эмоции по физическому состоянию чувствам и мыслям; определить эмоции других людей через произведения искусств речь звуки внешний вид и поведение точно выражать эмоции и потребности связанные с данными чувствами; дифференцировать истинные и ложные выражения чувств.
83247. Нелинейное и динамическое программирование 42.96 KB
  Задача поиска наибольшей увеличивающейся подпоследовательности: дана последовательность требуется найти самую длинную возрастающую подпоследовательность. Задача о редакционном расстоянии расстояние Левенштейна: даны две строки требуется найти минимальное количество стираний...
83248. АННА КОМНИНА 20.26 KB
  Старшая дочь византийского императора Алексея I и Ирины Дукены, одна из образованнейших женщин своего времени, автор прозаического эпоса «Алексиада» о деяниях ее отца. Биографические сведения о писательнице содержатся в ее сочинении, в прологе к ее завещанию и в монодии...
83249. Семейные правоотношения 42.5 KB
  Такое деление основано на том что имущественные права и обязанности имеют определенное экономическое содержание. Личные права и обязанности такого содержания лишены они возникают в связи с нематериальными благами неотделимы от личности и непередаваемы другим лицам.
83250. Влияние экологии на население Криворожья 14.4 KB
  Население Криворожья пытается бороться с негативными последствиями деятельности предприятий; происходит реконструкция канализационных очистных сооружений строительство напорных трубопроводов защита от подтопления скоростного трамвая мероприятия по озеленению и уборке террритории города.
83251. Классификация жилых домов по градостроительной ситуации, виды жилой застройки 29.65 KB
  Периметральная застройка составляется из протяженных жилых домов любого типа: многосекционных коридорных галерейных блокированных рис. Однако периметральная застройка может охватывать и участок значительного размера.
83252. Изготовление бумажных денег 16.55 KB
  Затраты на производство бумажных денег велики и они могут быть снижены если купюры будут дольше обращаться не теряя своего первоначального внешнего вида. Очень важно чтобы на протяжении всего времени обращения бумажных денег была обеспечена их идентичность.