Файл: Учимся программировать микроконтроллеры Pic на языке PicBasicPro (В.В. Хилинский, 2007).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.06.2025

Просмотров: 1759

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

инструкциями, а командами естественного языка (точнее, командами, напоминающими естественный язык), например:

если ускорение равно 0 то вычислить расстояние = скорость * время;

Эти команды с помощью специальных программ автоматически переводятся в машинный код.

Для того чтобы в дальнейшем избежать любых недоразумений в тексте, я должен разъяснить несколько терминов, которые будут использоваться часто в этой книге:

Программа это некоторый текст, который состоит из последовательности команд, написанных на языке программирования. Эти команды микроконтроллер выполняет последовательно одна за другой, либо осуществляет переходы, определенные правилами языка. В главе 2 детально рассматривается структура выбранного языка.

Компилятор - программа, выполняемая на компьютере, и её задача состоит в том, чтобы транслировать первоначальную (или исходную) программу в машинный код, который затем может быть записан в микроконтроллер. Процесс трансляции BASIC - программы в исполняемую программу показан на рисунке ниже. Программа, написанная на языке BASIC и сохраненная как файл c расширением *.bas, преобразуется компилятором в ассемблерный код и сохраняется как файл программы на языке ассемблера - *.asm. Сгенерированный таким образом ассемблерный код далее будет оттранслирован в файл с расширением - *.hex или загрузочный файл. Этот файл предназначен для непосредственной загрузки в память микроконтроллера.

Программатор - устройство, которое используется, для записи файлов программ в память микроконтроллера.

Составлять программу на языке высокого уровня, конечно, удобно. Набрал текст в редакторе, записал команды в соответствии с алгоритмом решения задачи

— и все. Затем запускаем программу - компилятор, которая автоматически переведет текст Вашей высокоуровневой программы в шестнадцатеричный файл. Затем этот файл можно записать с помощью программатора в микроконтроллер. При этом еще будет создан файл на языке ассемблера. Весь этот процесс представлен на рисунке 1.

9

Рис.1. Процесс преобразования исходного текста программы в конечный шестнадцатеричный .hex файл и запись его в микроконтроллер.

Глава 1. PIC-микроконтроллеры

Фирма Microchip в настоящее время является одним из мировых лидеров по выпуску микроконтроллеров. Распространенность этих микроконтроллеров можно сравнить с распространенностью компьютеров PC. Все выпускаемые фирмой микроконтроллеры можно условно разделить на три семейства. Это младшее семейство, в которое входят микроконтроллеры с двенадцатиразрядной шиной команд. К ним относятся микроконтроллеры: PIC 12C5xx, PIC 16C5xx, PIC 16C50x. Здесь символу х – соответствует целое число, обозначающее конкретный тип микроконтроллера.

Среднее семейство с 14 разрядной шиной команд. Это микроконтроллеры: PIC 12С6xx, PIC 1400, PIC 16C55x, PIC 16C6x(x), PIC 16C7x(x), PIC 16C8x, PIC 16F8x(x), PIC 16C9xx.

И старшее семейство, у которого шина команд имеет 16 разрядов. Это микроконтроллеры: PIC 17Cxx и PIC 18Xxx

Питание микроконтроллеров

Довольно известный популяризатор микроконтроллеров Майк Предко в книге «Handbook of Microcontrollers» утверждает, что если какой-либо микроконтроллер требует напряжения питания более +5В, а также применения сложных внешних схем сброса и тактирования, то лучше отказаться от использования такого микроконтроллера. В этом трудно с ним не согласится. Микроконтроллеры для того и создаются разработчиками, чтобы как можно меньше тратить время на электронику и больше уделить внимание разработке программного обеспечения.

Увсех микроконтроллеров есть два вывода питания VSS и VDD.

•VSS – общий («минус питания»);

•VDD – «плюс» питания.

10


Для подключения PIC-микроконтроллеров к источнику питания необходимы фильтрующие конденсаторы емкостью от 0,01 до 0,1 мкФ между выводами VSS и VDD. Следует отметить, что этот конденсатор должен иметь малые потери. Обычно для этих целей рекомендуется использовать керамические и танталовые конденсаторы.

Основная масса PIC-микроконтроллеров питается от напряжений 4,0 - 6,0 В, а некоторые типы могут работать и от 2,0 В. Они отличаются от типовых только тем, что были специально испытаны предприятием-изготовителем на функционирование при таком низковольтном напряжении питания. Для обозначения PIC-микроконтроллеров с низковольтным питанием перед буквами C или F добавляется буква L. И если Вы не проектируете какие-то специальные автономные устройства, где важен вес и объем изделия, то лучше остановить свой выбор на источнике питания +5 В. Тем более, что большинство микросхем, которые Вы будете подключать к микроконтроллеру, требуют именно такого напряжения питания. Для этих целей удобно использовать микросхему 7805 (российский аналог 142ЕН5), либо стабилитрон на 5.1 В. На рисунке 2 представлены схемы подключения таких источников.

Рис. 2. Варианты схем источников питания микроконтроллеров.

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

R = (Uвх –Uст)/(Iвых +Iст),

где R – сопротивление токозадающего резистора,

Uвх – нестабилизированное входное напряжение,

Uст – необходимое выходное стабилизированное напряжение, Iвых – необходимый ток питания,

Iст – номинальный ток стабилизации используемого стабилитрона.

Мощность резистора должна быть не меньше чем:

P = (Uвх –Uст)*(Iвых +Iст).

11

Сброс и перезапуск микроконтроллеров.

Все микроконтроллеры имеют вывод сброса, называемый MCLR. У PICмикроконтроллеров предусмотрена внутренняя схема автоматического сброса при включении напряжения питания (рис. 3). Она устойчиво работает, если скорость роста напряжения достаточно высока (обычно 0,05 В/мс). Если напряжение питания при включении растет медленно, требуется внешняя схема сброса (так называемый ручной сброс), один из вариантов которой представлен на рис 4. Внешняя схема сброса может потребоваться, если Вы используете кварцевый задающий генератор относительно низкой частоты, с достаточно большим временем «разгона». Эта схема известна пользователям и может применяться для микроконтроллеров, выпускаемых не только компанией Microchip, но и другими фирмами. Следует обратить внимание на резистор R, значение которого может варьироваться от 100 Ом до 1 кОм. Этот резистор служит для защиты входа MCLR микроконтроллера от выбросов положительного напряжения на конденсаторе С при выключении питания.

Рис 3. Схема подключения цепи MCLR для осуществления внутреннего автоматического сброса при включении напряжения питания.

12


Рис.4. Схема подключения цепи MCLR для осуществления внешнего автоматического сброса при включении напряжения питания.

И, наконец, если напряжение питания может снижаться, до уровней способных нарушить нормальную работу микроконтроллера, целесообразно использовать схему, инициирующую сброс, когда напряжение падает ниже определенного порога. Две схемы внешнего сброса, предлагаемые фирмой Microchip, представлены на рис 5. Схема со стабилитроном, обладающая большей точностью, обеспечивает сброс как только питание опускается ниже VZ+0,7 В, в то время как схема без стабилитрона – при снижении напряжения до уровня 0,7*(1+R2/R1). В последнее время широкое распространение получили интегральные мониторы питания. Микросхемы данного типа предназначены для точного формирования сигнала сброса (RESET) в микропроцессорных системах. Принцип действия этих приборов следующий: в момент включения системы устройство тестирует величину напряжения питания и выдает сигнал сброса только тогда, когда напряжение питания достигает своей номинальной величины. Также эти микросхемы могут выполнять ряд дополнительных функций.

1.Это функция сторожевого таймера, позволяющая микросхеме отслеживать активность микроконтроллера и в случае отсутствия таковой (микроконтроллер «завис») производить принудительный сброс.

2.И другая функция это переключение на батарею, которая позволяет в случае отказа основного источника питания запитать слаботочные цепи микропроцессора (ОЗУ) от внешней резервной батареи.

В качестве примеров таких микросхем можно назвать: ADM709, DS1233, MAX809, КР1171СП47.

Следует отметить, что схемы сброса при понижении напряжения питания в современных PIC-микроконтроллерах активизируются при напряжениях ниже 4,5 В. Поэтому они, как правило, не применяются в микроконтроллерах с низковольтным питанием, за исключением специальных типов, которые имеют программируемые схемы сброса при понижении напряжения питания

13

Рис 5. Схемы подключения цепи MCLR для осуществления внешнего автоматического сброса при снижении напряжения питания ниже определённого уровня.

Регистры конфигурации.

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

Режим работы генераторов;

Режим защиты памяти программ;

Параметры системы перезапуска микроконтроллеров;

Запуск сторожевого таймера;

Режим отладки микроконтроллеров PIC16F87x.

Биты слова конфигурации индивидуальны для каждого подсемейства PICмикроконтроллеров.

Генераторы тактовых импульсов.

Тактовый генератор задает периоды времени (или дисктреты), в течение которых происходит выполнение инструкций. Внутренний машинный цикл PICмикроконтроллера (TCY) состоит из четырех периодов тактового сигнала. Для формирования тактового сигнала в PIC-микроконтроллерах предусмотрен внутренний генератор.

В зависимости от типа и расположения времязадающих элементов могут использоваться следующие типы генераторов тактовых импульсов:

встроенные генераторы;

RC-генераторы;

генераторы с кварцевыми резонаторами;

генераторы с керамическими резонаторами;

внешние генераторы.

Встроенные генераторы применяются во многих разработанных в последнее время PIC-микроконтроллерах. Понятно, что стоимость такого генератора минимальна. Этот генератор построен на основе конденсатора и программируемого резистора.

Вторым по стоимости является генератор с внешней RC-цепочкой. На рисунке 6.а показана схема подключения такого генератора. Его активным элементом является неинвертирующий буфер, который выполнен на основе триггера Шмидта и служит для открывания или запирания ключа на МОП транзисторе с N- каналом. Величины емкости конденсатора и сопротивления резистора определяются по спецификациям фирмы Microchip. Необходимо заметить, что

14


для сопротивлений меньше 2.2 кОм частота тактового генератора может быть нестабильной или вообще генерация может срываться. А для сопротивлений больших 1 Мом генератор становится чувствительным к внешним помехам, токам утечки и влажности. Поэтому свой выбор Вы должны осуществлять в диапазоне от 3 кОм до 100 кОм. Такой генератор может работать и без внешнего конденсатора (С=0). Но для стабильности все же рекомендуется ставить конденсатор емкостью более 20 пФ. В этом случае уменьшается влияние емкости печатных проводников.

Рис 6. Схемы подключения различных типов тактовых генераторов к PICмикроконтроллерам

Схемы генераторов с кварцевым и керамическим резонаторами практически не отличаются друг от друга. Подключение кварцевого или керамического резонатора производится согласно схеме, показанной на рисунке 6.б. При этом для нормального функционирования резонатора предусматривается подключение двух дополнительных конденсаторов. Емкость этих конденсаторов оговаривается в спецификациях фирмы Microchip.

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

Режимы работы тактовых генераторов PIC-контролеров и их частотные диапазоны

Таблица 2.

ТИП

ЧАСТОТЫ

RC

4 МГц

LP

0 – 200

кГц

XT

200 кГц –

4 МГц

HS

4 – 20 МГц (максимальное

15

значение)

Значение конденсаторов С1 и С2 выбирается в зависимости от типа резонатора (кварцевый или керамический) и частоты (таблица 3).

Таблица 3.

Тип

Частота

С1, пФ

С2, пФ

резонатора

кГц

LP

32*

15

15

100

15

15

200

0-15

0-15

XT

100

15-30

200-300

200

15-30

100-200

455

15-30

15-100

1000

15-30

15-30

2000

15

15

4000

15

15

HS

4000

15

15

8000

15

15

20000

15

15

Для версии XT резистор R1 не нужен, однако иногда он требуется для микроконтроллеров версии HS. Только точное знание характеристик кварцевого резонатора позволяет определить, есть ли необходимость в резисторе R1, и каким должно быть его значение.

И, наконец, схема на рисунке 6.с показывает способ тактирования PICконтроллера внешним генератором. Очевидно, что формируемые внешним генератором уровни должны соответствовать напряжению питания микроконтроллера. В тех случаях, когда используется только один вывод OSC1, на выводе OSC2 имеем внутреннюю рабочую частоту микроконтроллера (частота командных циклов), которая в четыре раза меньше, чем частота генератора. Это так называемый вывод CLCOUT.

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

Порты ввода/вывода и регистры управления передачей данных.

Обычно каждый порт микроконтроллера состоит из некоторого числа однотипных структурных компонентов, каждый из которых отвечает за определенный разряд порта ввода/вывода.

Для выбора направления передачи данных через порты существуют регистры управления – TRIS (TRI-state buffer enable). Название регистра TRIS соответствует

16


названию порта, которым он управляет. То есть, портом PORTB управляет регистр TRISB, а портом PORTC управляет регистр TRISC.

При записи 1 в какой либо разряд регистра TRIS соответствующий вывод одноименного порта переводится в состояние входа. Если же записать в этот разряд 0 то вывод порта переводится в состояние выход. Запомнить это можно, если обратить внимание на то, что 1 (единица) похожа на латинскую букву I (Input – вход), а 0 (ноль) похож на букву O (Output – выход). Таким образом, запись команды: TRISC=%01100111 означает, что разряды порта С – 0, 1, 2, 5, 6 установлены как выходы, а разряды – 3, 4, 7 установлены как входы. Следует отметить, что команду TRIS не рекомендуется использовать при программировании PIC-микроконтроллеров среднего и старшего подсемейства, поскольку она обеспечивает доступ лишь к портам PORTA, PORTB и PORTC, тогда как порты PORTD и PORTE не могут управляться с её помощью. В этих случаях лучше использовать команды BASIC - INPUT или OUTPUT.

Разряд 4 порта PORTA (RA4) в PIC-микроконтроллерах среднего подсемейства выполняется в виде выхода с открытым стоком. Этот вывод не может самостоятельно обеспечить выдачу логической единицы без подключения резисторов к напряжению питания (подтягивающих резисторов).

Выполнение операции, связанной с «подтяжкой» входов порта PORTB к напряжению питания (PORTB weak pull-up), разрешается с помощью бита _RPBU регистра опций – OPTION. Подобное разрешение дается при сбросе этого бита.

Например:

Option_Reg.7=0

‘ Подключить внутренние подтягивающие

‘ резисторы PORTB

Величина внутреннего сопротивления переключателя, используемого для реализации режима «подтяжки», составляет приблизительно 50 кОм. Наличие подобного переключателя упрощает взаимодействие с клавиатурой и исключает необходимость в использовании внешних резисторов.

Замечание. В некоторых микроконтроллерах младшего подсемейства

(PIC12C50X, PIC12C67x, 12CE67x и 12F675) названия портов изменены. Вместо

PORTA он называется GPIO соответствующий этому порту регистр - TRISA. Для уточнения всегда смотрите справочные листы на используемое устройство.

Глава 2. Компилятор PicBasic Pro.

BASIC или Beginner's all purpose Symbolic Instruction Code (многоцелевой символический код для начинающих) был разработан в начале 60 годов в Дартмутском колледже для учебных целей. Благодаря своей простоте, он быстро завоевал популярность и был реализован для множества тогдашних компьютеров. Очередная компьютерная революция совершилась в середине 1970 годов, когда на свет появились первые микрокомпьютеры для домашнего использования, по своим возможностям напоминавшие современные программируемые

17