Микроконтроллер – это по сути маленький компьютер,
который как и его большой собрат может работать только по заданной ему
программе. Внутри у него есть все необходимое для самостоятельной
работы, вот основные составляющие микроконтроллера:
процессор
оперативная память - ОЗУ
постоянная память - ПЗУ
порты ввода/вывода
последовательные интерфейсы
генератор тактовой частоты
таймеры
и т.д.
От версии к версии в МК встраивают также АЦП(Аналогово-цифровой
преобразователь), ЦАП, всякие последовательные интерфейсы и др., но
самой главной частью любого микроконтроллера является
АЛУ(арифметический логический узел), в нем и происходят все вычисления
необходимые для работы микроконтроллера - арифметические, и логические
операции.
Итак начнем свое знакомство с конкретным МК, а именно с C8051F320.
Почему именно с этим представителем семейства МК от Silabs? А потому
что данный МК обладает достаточным количеством ОЗУ и ПЗУ, имеет
встроенное 10-ти разрядное АЦП, 25/21 портов ввода/вывода с допустимым
напряжением на выводах до 5В и высоким втекающим током,
последовательные интерфейсы SPI, УАПП и SMBus, четыре 16-разрядных
таймера/счетчика, программируемый массив 16-разрядных
таймеров/счетчиков(ПМС) с пятью модулями захвата/сравнения, и даже
USB-контроллер, что пригодится на в дальнейшем когда мы будем
постепенно переходить от простых примеров к более сложным. Еще один
большой плюс выбора именно этого МК это полностью переведенная на
русский язык документация,
что конечно очень важно для начинающего "микроконтроллерщика". Я также
надеюсь не сильно напугал Вас, возможно незнакомым Вам понятиям и
терминам, ничего не обращайте пока на них внимания, постепенно Вам все
станет понятно и Вы сможете так же легко оперировать всякими
"страшными" терминами. Вот блок схема внутренностей C8051F320/1:
И фото нашего подопытного:
А теперь, я на простом примере попытаюсь объяснить вам работу АЛУ. У
вас наверняка возник вопрос - что же это самое АЛУ делает? А делает АЛУ следующее, берет данные производит над ними арифметическую или
логическую операцию и сохраняет полученный результат. Данные поступают
в АЛУ из регистров общего назначения и туда же АЛУ сохраняет полученные
результаты. Регистр общего назначения представляет собой ячейку памяти
8 бит то есть 1 Байт. Но откуда же АЛУ знает что ему делать? А все просто, для этого есть
регистр команд в котором как раз и записано что нужно делать МК в
данный момент. Данные в регистр команд попадают из ПЗУ(постоянное запоминающее устройство), в нашем МК это Flash память. Перейдем к конкретному примеру, подсоединим кнопку к ножке МК и пускай микроконтроллер считает сколько раз мы на нее нажали. Сейчас я не буду вдаваться в конкретную
реализацию данного алгоритма в коде, а только рассмотрю работу АЛУ. Например на состояние кнопки(нажата/отжата или 0/1) мы выделили регистр(А), также выделим регистр(В) для результатов. В начале работы программы мы эти регистры
обнулим, это будет обозначать что кнопка ни разу не нажималась. Теперь при нажатии кнопки в регистр А запишится
значение, АЛУ приняв это значение просуммирует его со значением
регистра В и запишет результат в тот же регистр В. При повторном нажатии кнопки в регистре В у же будет значение 1, а значит АЛУ приняв значение 1 из регистра А и просуммировав с регистром В запишет в регистр В уже значение равное 2. Таким образом значение регистра В и будет соответствовать количеству нажатий на кнопку. В дальнейшем мы сможем прочитать этот регистр и к примеру зажечь светодиод при количестве нажатий равном десяти.
Кроме регистров общего назначения в МК присутствует ОЗУ – оперативная память микроконтроллера. ОЗУ МК нужна для того, чтобы хранить в нем данные при выполнении программы.
Регистров то всего 32 и для полноценной работы этого недостаточно. В
регистрах хранится обычно только те данные, которые будут
использоваться непосредственно прямо сейчас, все остальное удобнее
хранить в памяти.
Вот мы с вами и получили первоначальные сведения о микроконтроллерах, и на этом сегодня я пожалуй закончу, а в следующей главе мы будем разбираться с языками программирования для МК и узнаем как скомпилировать программу, то есть перевести ее в язык понятный микроконтроллеру. >>>
Если у Вас есть какие либо вопросы, то Вы можете их задавать на форуме.