Программирование микропроцессорных систем
Методическое пособие - Компьютеры, программирование
Другие методички по предмету Компьютеры, программирование
да возможности современных микроконтроллеров значительно возросли, для составления программ все чаще используются языки высокого уровня, такие как Бейсик, СИ и т. п.
Эти языки в свое время были разработаны для больших настоящих компьютеров. Но сейчас широко используются также и для микроконтроллеров. Языки высокого уровня отличаются тем, что они гораздо больше ориентированы на человека. Большинство команд языков высокого уровня не связаны с конкретными командами микроконтроллера.
Такие языки оперируют уже не с байтами, а с привычными нам десятичными числами, а также с переменными, константами и другими элементами, знакомыми нам из математики. Константы и переменные могут принимать привычные для нас значения.
Например, положительные, отрицательные значения, вещественные значения (десятичные дроби) и т. п. Со всеми переменными и константами можно выполнять знакомые нам арифметические операции и даже алгебраические функции.
Транслятор с языка высокого уровня производит более сложные преобразования, чем транслятор с Ассемблера. Но в результате тоже получается программа в машинных кодах. При этом транслятор использует все ресурсы микроконтроллера по своему усмотрению. В каких именно регистрах или ячейках памяти она будет хранить значения описанных вами переменных, по каким алгоритмам она будет вычислять математические функции, программист обычно не задумывается.
Программа-транслятор выбирает все это сама. Поэтому задача эффективности алгоритма полученной в результате трансляции программы целиком ложится на программу-транслятор. В целом, программы, написанные на языках высокого уровня, занимают в памяти микроконтроллера объем на 30-40 % больший, чем аналогичные программы, написанные на языке Ассемблер.
Однако если микроконтроллер имеет достаточно памяти и запас по быстродействию, то это увеличение программы - не проблема. Преимуществом же языков высокого уровня является существенное ускорение процесса разработки программы. Из всех языков высокого уровня самым эффективным, пожалуй, является язык СИ. Поэтому для иллюстрации языков высокого уровня мы выберем именно его.
Изучение приемов программирования мы будем осуществлять на ряде конкретных примеров:
каждый пример будет начинаться с постановки задачи;
затем мы научимся выбирать схемное решение;
лишь после этого будут представлены примеры программ.
Для каждой задачи в книге приводятся два варианта программы. Одна на языке Ассемблер, вторая на языке СИ. В результате вы сможете не только научиться азам программирования на двух языках, но и понять все достоинства и недостатки каждого из языков программирования.
2.2 Простейшая программа
Постановка задачи
Самая простая задача, которую можно придумать для микроконтроллера, может звучать следующим образом:
Разработать устройство управления одним светодиодным индикатором при помощи одной кнопки. При нажатии кнопки светодиод должен зажечься, при отпускании - погаснуть.
С практической точки зрения это совершенно бессмысленная задача, так как для ее решения проще обойтись без микропроцессора. Но в качестве примера для обучения подойдет прекрасно.
2.3 Принципиальная электрическая схема
Попробуем разработать принципиальную электрическую схему, способную выполнять описанную выше задачу. Итак, к микроконтроллеру нам нужно подключить светодиод и кнопку управления. Как мы уже говорили, для подключения к микроконтроллеру AVR любых внешних устройств используются порты ввода-вывода. Причем каждый такой порт способен работать либо на ввод, либо и на вывод.
Удобнее всего светодиод подключить к одному из портов, а кнопку - к другому. В этом случае управляющая программа должна будет настроить порт, к которому подключен светодиод, на вывод, а порт, к которому подключена кнопка, на ввод. Других специальных требований к микроконтроллеру не имеется. Поэтому выберем микроконтроллер.
Очевидно, что нам нужен микроконтроллер, который имеет не менее двух портов. Данным условиям удовлетворяют многие микроконтроллеры AVR. Я предлагаю остановить свой выбор на довольно интересной микросхеме ATtiny2313. Эта микросхема, хотя и относится к семейству Ttiny, на самом деле занимает некое промежуточное место между семейством Ttiny и семейством Mega. Она не так перегружена внутренней периферией и не столь сложна, как микросхемы семейства Mega. Но и не настолько примитивна, как все остальные контроллеры семейства Ttiny.
Эта микросхема содержит два основных и один дополнительный порт ввода-вывода, имеет не только восьмиразрядный, но и шестнадцатиразрядный таймер/счетчик. Имеет оптимальные размеры (20-выводной корпус). И идеально подходит в качестве примера для изучения основ программирования
Итак, если не считать порта А, который включается только в особом режиме, который мы пока рассматривать не будем, микроконтроллер имеет два основных порта ввода-вывода (порт В и порт D). Договоримся, что для управления светодиодом мы будем использовать младший разряд порта В (линия РВ.0), а для считывания информации с кнопки управления используем младший разряд порта D (линия PD.0). Полная схема устройства, позволяющего решить поставленную выше задачу, приведена на рис. 2.1.
Для подключения кнопки S1 использована классическая схема. В исходном состоянии контакты кнопки разомкнуты. Через резистор R1 на вход PD.0 микроконтроллера подается плю