Генератор тактовых импульсов
Новым устройством узла тактового генератора является схема умножения частоты кварцевого резонатора на 4. При использовании резонатора на 10 МГц внутренняя тактовая частота достигает 40 МГц. Эту функцию удобно использовать для уменьшения электромагнитного излучения при сохранении высокой скорости выполнения программы.
Для устройств с батарейным питанием важна способность PIC18 переключать системную тактовую частоту с основного тактового генератора на альтернативный низкочастотный. Обычно в качестве низкочастотного генератора выбирают таймер реального времени Т1 на 32 кГц. Системная частота переключается специальным битом в регистре управления тактовым генератором.
Система команд PIC18
Набор команд состоит из 75-ти 16-разрядных команд (одно слово) и четырех 32-разрядных команд (два слова). Из двух слов состоят команды MOVFF, CALL, GOTO, LFSR. Большинство команд в PIC18 такие же, как и в PIC16, но есть и новые, а также некоторые различия.
Одной из особенностью команд, в которых используются регистры, является наличие бита доступа к памяти. Поэтому операнды в таких командах в общем случае записываются в виде:
MNEMONIC f, d, a ,
где обозначено: MNEMONIC – мнемокод команды; f – адрес (или имя) регистра; d – бит размещения результата (d=0 – результат в рабочем регистре WREG, d=1 – результат в регистре f); a – бит доступа к памяти (a=0 – обращение к банку доступа, содержимое регистра BSR игнорируется, a=1 – обращение к памяти данных с учетом регистра BSR).
Например: INCF 05h, 0, 0 - инкремент регистра с адресом 05h, результат поместить в WREG, использовать банк доступа.
Кроме того, появились команды условных переходов, в которых условия – это флаги (признаки результатов операций), находящиеся в регистре STATUS. Это упрощает процесс программирования и сокращает длину команд перехода.
В PIC18 значительно улучшена организация чтения табличных данных из памяти программ, а также появилась возможность записи во флэш-память. Для этой цели используются специальные регистры-указатели TBLPTR (указывает на ячейку памяти) и TABLAT (содержит считываемый или записываемый байт данных). Две команды TBLRD (чтение из памяти программ) и TBLWT (запись в память программ) позволяют читать по два байта из каждой отведенной под команду ячейки памяти, а также записывать в них. Команды можно использовать с различными режимами автоматической индексации.
9. Язык С18 для PIC-микроконтроллеров: структура программы, директивы препроцессора, ключевые слова.
В настоящее время документация языка Си закреплена в международном стандарте ANSI C. Фирма Microchip создала свой компилятор для языка Си для микроконтроллеров семейства PIC18, который получил название С18. Он является составляющей интегрированной среды разработки MPLAB IDE. Компилятор С18 поддерживает основные положения стандарта ANSI C, однако имеются некоторые различия, связанные с архитектурой PIC18. Рассмотрим основные особенности программы на языке Си с использованием компилятора MPLAB C18. В качестве микроконтроллера выберем PIC18F242 с тремя портами ввода/вывода: PORTA, PORTB, PORTC. Программа будет просто увеличивать число на 1 и выводить его в порт В.
#include<p18f242.h>
#pragma config WDT = OFF, OSC = HS
unsigned char counter; // переменная counter – беззнаковое однобайтное целое число
void main(void) // здесь начинается главная программа
{
PORTB = 0; // очистить регистр данных порта В
TRISB = 0; // настроить все линии порта В на вывод
counter = 1; // инициализировать counter значением 1
while( 1 )
{
PORTB = counter; // поместить значение counter в порт В
counter = counter + 1; // увеличить counter
}
}
Рассмотрим основные составляющие программы на языке Си.
Комментарии. Это некоторый поясняющий текст, который при компиляции не учитывается. Комментарии бывают двух видов:
• многострочные (начинаются с комбинации символов /* и заканчиваются символами */ );
• однострочные (начинаются с комбинации символов // до конца строки).
Препроцессор. При транслировании программ на языке Си текст сначала обрабатывает специальная программа – препроцессор. Затем измененный препроцессором текст обрабатывается компилятором. Препроцессор обрабатывает так называемые директивы препроцессора, заменяя их текстом. Любая директива начинается со знака #. Первой директивой в рассмотренной программе является #include<p18f242.h>, которая вставляет содержимое заголовочного файла с именем p18f242.h. В нем содержатся определения и расположение всех регистров специальных функций микроконтроллера PIC18F242. В общем случае файлы с расширением *.h являются заголовочными файлами стандартных библиотек языка Си. Вторая директива в программе #pragma config определяет биты конфигурации МК. В данном случае она отключает сторожевой таймер, чтобы он не влиял на работу программы (WDT = OFF), и устанавливает тип генератора МК - высокочастотный кварцевый (OSC = HS). Объявления переменных. Строка программы unsigned char counter; объявляет переменную counter как однобайтное целое число без знака. Компилятор по этой информации выделит для переменной counter одну ячейку в памяти данных (один регистр из области РОН).
Функция main. Программы на Си оформляются как функции. Каждая программа должна содержать, по крайней мере, одну функцию, называемую главной (по-английски main). Выполнение программы всегда начинается с главной функции, и программа находится внутри нее. В общем случае в функцию могут передаваться аргументы (параметры), функция может возвращать результат. Главной особенностью компилятора С18 является то, что в главную функцию main не передается никаких параметров и она не возвращает результата. Это обстоятельство указывается специальным словом void (пустой). Таким образом, формат главной функции всегда такой
void main( void )
{ // начало функции
…….. // тело функции
} // конец функции