Прежде чем начать с создания собственного проекта на МК сначала поговорим о том как же работает любой процессор.
Хотя этот вопрос рассматривался в курсе лекций по микропроцессорной технике в институте, мы попробуем освежить память по данному вопросу, так как очень важно представлять, что происходит внутри микросхемы микроконтроллера (МК) при ее программировании или ее работе.
Для того чтобы понять, как работает микропроцессор (МП), зададим себе вопрос: а как он должен работать?
Любой алгоритм является последовательность действий, записанных в виде наборов последовательно выполняемых команд (инструкций, операторов). При этом среди таких команд могут встречаться переходы, которые в некоторых случаях нарушают исходную последовательность выполнения операторов строго друг за другом. Среди прочих команд должны быть команды ввода и вывода данных (программа же должна как-то общаться с внешним миром?), а также команды выполнения арифметических и логических операций.
Эти команды необходимо где-то хранить, поэтому неотъемлемой частью всей системы должно быть устройство память программ (ПП). Где-то надо складывать и данные, как исходные, так и результаты работы программы, поэтому должно быть и устройство памяти данных (ПД). Так как команды и данные в конечном итоге это числа в двоичном коде, то память может быть общая, только нужно уметь отличать, где у нас данные, а где команды. Это и есть один из принципов фон Неймана, хотя в МК, которые мы будем рассматривать далее используется не фон-немоновская, а так называемую гарвородскую архитектуру, когда память программ и данных разделены. То есть на каждую память отдельна своя шина данных и отдельна своя шина адреса. Поэтому при засылки данного по адресу 0х00 памяти программ, мы никогда не пересечемся с ячейкой 0х00 памяти данных. И обращения к обоим видам памяти может происходить одновременно, не зависимо друг от друга. В этом и есть преимущество гарвардской архитектуры.
Конечно же Вы знаете и понимаете отличие микроконтроллера от микропроцессора!
Напомним. Чем же отличается МП от МК? Что МК, что МП - это обязательно микросхема и внешене они могут не отличаться. Например так
Ну МК служит для управления различными устройствами, поэтому имеет в своем составе огромное количества периферийных устройств, в том числе и систему ввода-вывода. Но как правила у МК более слабое арифметико-логическое устройство (АЛУ). МК еще можно назвать микро ЭВМ, а еще точнее «computer-on-chip». Сам МП это не законченное устройство в отличии от МК. В состав МК входит свой МП. Другими словами МК это МП плюс периферийные устройства, которыми МП управляет (устройства ввода-вывода, стек, компаратор, АЦП, ЦАП, ШИМ, устройства прерывания, таймеры-счетчики, сторожевой таймер, различные интерфейсы, модуляторы и тд).
Перейдем непосредственно к принципу работы микропроцессорных устройств. В первом приближении любое микропроцессорное устройство работает следующим образом. После того как программист, написал программу, она должно попасть в МП. В пустую память программ записывают код программы (алгоритм работы, последовательность операций), при помощи устройства, которое называется программатор, речь о котором пойдет позже в соответствующих разделах. Эта последовательность операции вносится в память МП в двоичном коде. Обычно этот процесс называют «прошивка» микросхемы или прошивка процессора. После записи программы в память программ (ПП), МП сразу же начинает работу. Счетчик команд, после запуска, каждый такт тактового генератора, инвертирует свое состояние (0,1,2,3,4,….),то есть прибавляет 1. Таким образом, он как бы указывает процессору адрес следующей команды в памяти программ, которую нужно считать (Рисунок 1). Сначала считывает первую команду, затем вторую, третью, четвертую и тд. Когда программа закончится (по команде перехода), счетчик сброситься (возвращает свое значения в «0») и счет начнется заново, следовательно, программа тоже. Если процессор не встретит по пути считывания команды перехода на начало программы, то процессор продолжит считывания программы и после ее окончания. То есть продолжит считывания пустой памяти до последней ее ячейки и только потом перейдет на начала программы. Таким образом, операции в процессоре считываются и выполняются последовательно команда за командой. Сразу стоит заметить, что чем выше частота тактового генератора, тем быстрее буду считываться последовательно команды и выполняться эти команды.
Детально принцип работы МП микроконтроллеров семейства AVR фирмы ATMEL мы увидим на примерах наших проектов. При этом не сложно пронаблюдать работу МК в целом в программном симуляторе AVR studio (о нем позже).
Рисунок 1 Принцип работы микропроцессора после первого машинного такта
1 – загрузка программного кода в память программ микропроцессора.
2 – после запуска МП, счетчик команд, указывая МП на очередную команду, последовательно пробегает по всем ячейкам памяти МП.
3- После чего процессор выполняет команду указанную счетчиком
Не сложно догадаться, что по приходу следующего тактового импульса, счетчик укажет МП на следующий адрес ячейки памяти, а процессор считает следующую команду (рисунок 2).
Рисунок 2 Принцип работы микропроцессора после второго машинного такта
Что произойдет , когда процессор считает ячейку в памяти программ, где содержаться последняя команда? Это команда должна быть командой безусловного или условного перехода на начало программы. Например код 0х9А соответствует команде безусловного перехода. А произойдет то, что показано на рисунке 3. Процессор перейдет на начало программы, после считывания последней команды и все начнется заново. То есть, любая программа должна заканчиваться командой перехода на начало вашего основного цикла. Кстати когда -то это была моя первая ошибка: я написал программу, вполне коректную и очень простенькую, но почему-то она выполняться стала очень медленно. а причиной этому было то, что в конце проги я не поставил команду jmp (безусловный переход). В итоге мой проц работал так: считал команды в начале памяти (мою программу), а потом не сделав переход на начало, погнал считывать до конца всю чистую память. А дойдя до конца, только тогда перешел в начало. И так мой МК работал в цикле. Это частая ошибка новичка. Рисунок 3 Принцип работы микропроцессора после считывании последней команды
Таким образом, для данного примера, программа, состоящая из 8 байт, будет выполняться в цикле, пока подается питание на МК или пока не пришла команда на прерывание. Прерывание – это внешнее или внутренне события, которое прерывает нормальный ход основной программы, на время выполнения другой программы и с последующим возвратом к месту прерывания основной программы. К этому, одному из самых важных узлов МК, мы вернемся позже.
Вывод: и так мы вспомнили что такое МК и чем он отличается от МП. Еще раз подведем итог в принципе работы МП. МП это «работяга» которому непрерывно указывает некий счетчик команд что делать в каждом временном такте. При этом существует память со списком этих команд, на адрес которых и ссылается счетчик коанд. Все команды МП выполняет последовательно. А если наш МП является частью МК, так от этого работы у него только увеличивается, ведь МК имеет в своем составе много других периферийных узлов, которыми нужно (можно) управлять процессором.
Остальные узлы МК мы будем рассматривать в процессе их применения уже в реальных программных и аппаратных проектах.