Программирование на ассемблере для начинающих с примерами программ. Светофор на PIC12F629 с

Программирование на ассемблере для начинающих с примерами программ. Светофор на PIC12F629 с "неправильной" программой Циклы в ассемблере

Когда сын клеил для школы из бумаги муляж светофора, пришла мысль: "А почему не собрать для него действующую модель светофора на микроконтроллере". На просторах Интернет есть много схем и программок к ним, реализующих принцип простейшего светофора. Но они или слишком сложны для игрушки (DC-DC преобразователь, сдвиговые регистры и т.д.) или представлены лишь как пример простейшей программы на ассемблере. Я хочу представить на обозрение схему и программу на ассемблере законченной конструкции игрушечного светофора с некоторыми дополнительными функциями. Причем собрана она на “копеечном “ микроконтроллере по простейшей схеме, что немаловажно для начинающих. Надеюсь, эта простая схема станет для многих, начинающих изучать программирование микроконтроллеров PIC, первой реально собранной на PIC конструкцией. Простая, но при этом содержащая основные приемы и атрибуты программирования, программа позволит легко ее понять и экспериментировать с ней.

Каждому, кто имеет дело с программированием микроконтроллеров, известны основные принципы написания обработчиков прерываний: как можно короткое время выполнения и короткий код, отсутствие циклов и вызовов из обработчика других подпрограмм и т.д. В данном же случае разрешены прерывания только по изменению уровня (пропустить другие прерывания мы никак не можем, так как их попросту нет) и я, для упрощения программы и ее восприятия, счел возможным отойти от этих принципов. Здесь в обработчике прерывания есть и циклы, и вызов другой подпрограммы, и (о ужас!) даже переход в режим SLEEP. Поэтому, в заголовке программа названа «неправильной». В данном случае, обработчик прерываний используется как обычная подпрограмма, однако, в других случаях вышеназванные принципы, разумеется, остаются в силе.

Краткие характеристики устройства:

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

Итак, перейдем к описанию и рассмотрению схемы:

Схема собрана на недорогом микроконтроллере . Непосредственно для управления светодиодами используются выводы GP0-GP2, GP4,GP5 (ножки 7, б, 5, 3, 2), запрограммированные как выходы. Светодиоды по каждому направлению объединены в последовательные группы, что позволяет минимизировать потребляемый ток. Резисторы R3-R8 ограничивают токи светодиодов. В случае сильной разницы в отдаче светодиодов разных цветов, придется подбирать соответствующие резисторы. У меня, например, две группы желтого цвета соединены параллельно и подключены к одному резистору, причем того же номинала, что и остальные и светят даже чуть ярче остальных (отдача больше).

В этой схеме на светодиоды подается на 1.5 В больше чем на микроконтроллер с дополнительного элемента (в данном случае, при отключенном выходе ток не проходит на вывод микросхемы, так как для открытия переходов двух светодиодов требуется гораздо большее напряжение, чем 1.5 В (не менее 2.5 В). И даже при пробитых обоих светодиодах (что маловероятно), ток через внутренний защитный диод на плюс питания составит около 7.5 мА, что гораздо меньше допустимого. Потребление тока светодиодами намного выше, чем потребление МК, поэтому, разностью разрядки элементов (через один не течет ток потребления МК) можно пренебречь. Экспериментально установлено, что, несмотря на уменьшение тока через светодиоды при разрядке батареи, яркость их свечения остается на приемлемом уровне во всем диапазоне напряжения батареи. Схема при этом предельно упрощается, и нет стабилизатора напряжения, потребляющего дополнительный ток, что позволило отказаться от выключателя питания (ток потребления в спящем режиме - 1-3 мкА).

Кнопка управления режимами работы устройства подключена к выводу GP3 (ножка 4), который в битах конфигурации объявлен как цифровой вход. При нажатии кнопки происходит прерывание, в обработчике которого происходит следующее. При длительном нажатии (более 4 с) устройство переходит в спящий режим. При более коротких нажатиях, происходит последовательное переключение скорости работы светофора по кругу с индикацией текущей скорости согласно рисунку:

В последнем режиме (горят красные светодиоды) включается режим желтого мигающего сигнала. При длительном нажатии на кнопку (подтверждается погасанием всех светодиодов), переходим на обычную работу с изменением режима на новый, если же кнопка не нажата более 6 сек., режим работы остается, тем же, что и до нажатия кнопки.

Заряда элементов АА в режиме sleep хватит не менее чем на год, именно поэтому, в устройстве не предусмотрен выключатель питания. Устройство переходит в спящий режим также по истечении 0.5 - 1 часа (зависит от скорости переключения цветов) работы без воздействия на кнопку. Из режима SLEEP выход происходит при любом нажатии кнопки. Питание на микроконтроллер подается по выводам 1 и 8. Для экономии выводов и упрощения конструкции, нем включен режим внутреннего генератора без внешних элементов.

Небольшие пояснения к программе, которая приведена во вложении:

Обработка нажатий кнопки производится в подпрограммах: wait_butt__- ожидание нажатия и регистрация 6сек. без нажатия, push_butt__- регистрация длительности нажатия, wait_nobutt__- ожидание не нажатой кнопки. В моменты изменения состояния светофора (желтый и моргание зеленого) значения на выходной порт считываются из таблицы в подпрограмме tact__ (младший или старший полубайты). Аналогично, индикация состояния при нажатии кнопки - из подпрограммы ind__. Для перехода в спящий режим по истечении времени работы, происходит принудительный переход в подпрограмму обработки прерываний путем программной установки флага прерывания. Изменением констант CONST_MIN, CONST_REG, CONST_SL можно изменить соответственно период моргания зеленого, начальный режим при подсоединении батареи, время работы без воздействия до перехода в режим SLEEP.

Печатная плата изготовлена из односторонне-фольгированного стеклотекстолита и имеет размеры 22х87 мм. Крайние светодиоды установлены параллельно плате в разные стороны. Средние устанавливаются один со стороны установки деталей, а другой - со стороны дорожек с продеванием выводов в отверстия платы и фиксацией их со стороны деталей каплей припоя, а со стороны дорожек припаиванием к соответствующим дорожкам.

Все резисторы мощностью 0.125 Вт. Светодиоды можно взять любые отечественные или импортные желательно одного типа с прямым падением напряжения при токе 10 мА около 2 Вольт. Кнопка - любая без фиксации. Микроконтроллер установлен на колодку.

Слово конфигурации заносится в память автоматически при загрузке прошивки (в IC-Prog установлена “птичка” только в пункте “PWRT”, остальные пункты “сброшены”, в графе “осциллятор” установлено “intOSC GP4”). Предварительно необходимо считать прошивку с чистой микросхемы и записать значение слова в конце памяти программ по адресу 03FF, которое требуется для настройки частоты внутреннего генератора конкретного экземпляра микросхемы. После загрузки в программу HEX-файла, по адресу 03FF необходимо вручную прописать это значение. В данном устройстве отклонение частоты не критично, но все же следует знать, что для данной микросхемы требуется такая процедура. В крайнем случае, если заводское значение потеряно, можно ничего не делать - в программе приняты меры для корректной работы и в этом случае.

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

Многие считают, что Assembler – уже устаревший и нигде не используемый язык, однако в основном это молодые люди, которые не занимаются профессионально системным программированием. Разработка ПО, конечно, хорошо, но в отличие от высокоуровневых языков программирования, Ассемблер научит глубоко понимать работу компьютера, оптимизировать работку с аппаратными ресурсами, а также программировать любую технику, тем самым развиваясь в направлении машинного обучения. Для понимания этого древнего ЯП, для начала стоит попрактиковаться с простыми программами, которые лучше всего объясняют функционал Ассемблера.

IDE для Assembler

Первый вопрос: в какой среде разработки программировать на Ассемблере? Ответ однозначный – MASM32 . Это стандартная программа, которую используют для данного ЯП. Скачать её можно на официальном сайте masm32.com в виде архива, который нужно будет распаковать и после запустить инсталлятор install.exe. Как альтернативу можно использовать FASM, однако для него код будет значительно отличаться.

Перед работой главное не забыть дописать в системную переменную PATH строчку:

С:\masm32\bin

Программа «Hello world» на ассемблере

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

386 .model flat, stdcall option casemap: none include /masm32/include/windows.inc include /masm32/include/user32.inc include /masm32/include/kernel32.inc includelib /masm32/lib/user32.lib includelib /masm32/lib/kernel32.lib .data msg_title db "Title", 0 msg_message db "Hello world", 0 .code start: invoke MessageBox, 0, addr msg_message, addr msg_title, MB_OK invoke ExitProcess, 0 end start

Для начала запускаем редактор qeditor.exe в папке с установленной MASM32, и в нём пишем код программы. После сохраняем его в виде файла с расширением «.asm», и билдим программу с помощью пункта меню «Project» → «Build all». Если в коде нет ошибок, программа успешно скомпилируется, и на выходе мы получим готовый exe-файл, который покажет окно Windows с надписью «Hello world».

Сложение двух чисел на assembler

В этом случае мы смотрим, равна ли сумма чисел нулю, или же нет. Если да, то на экране появляется соответствующее сообщение об этом, и, если же нет – появляется иное уведомление.

486 .model flat, stdcall option casemap: none include /masm32/include/windows.inc include /masm32/include/user32.inc include /masm32/include/kernel32.inc includelib /masm32/lib/user32.lib includelib /masm32/lib/kernel32.lib include /masm32/macros/macros.asm uselib masm32, comctl32, ws2_32 .data .code start: mov eax, 123 mov ebx, -90 add eax, ebx test eax, eax jz zero invoke MessageBox, 0, chr$("В eax не 0!"), chr$("Info"), 0 jmp lexit zero: invoke MessageBox, 0, chr$("В eax 0!"), chr$("Info"), 0 lexit: invoke ExitProcess, 0 end start

Здесь мы используем так называемые метки и специальные команды с их использованием (jz, jmp, test). Разберём подробнее:

  • test – используется для логического сравнения переменных (операндов) в виде байтов, слов, или двойных слов. Для сравнения команда использует логическое умножение, и смотрит на биты: если они равны 1, то и бит результата будет равен 1, в противном случае – 0. Если мы получили 0, ставятся флаги совместно с ZF (zero flag), которые будут равны 1. Далее результаты анализируются на основе ZF.
  • jnz – в случае, если флаг ZF нигде не был поставлен, производится переход по данной метке. Зачастую эта команда применяется, если в программе есть операции сравнения, которые как-либо влияют на результат ZF. К таким как раз и относятся test и cmp.
  • jz – если флаг ZF всё же был установлен, выполняется переход по метке.
  • jmp – независимо от того, есть ZF, или же нет, производится переход по метке.

Программа суммы чисел на ассемблере

Примитивная программа, которая показывает процесс суммирования двух переменных:

486 .model flat, stdcall option casemap: none include /masm32/include/windows.inc include /masm32/include/user32.inc include /masm32/include/kernel32.inc includelib /masm32/lib/user32.lib includelib /masm32/lib/kernel32.lib include /masm32/macros/macros.asm uselib masm32, comctl32, ws2_32 .data msg_title db "Title", 0 A DB 1h B DB 2h buffer db 128 dup(?) format db "%d",0 .code start: MOV AL, A ADD AL, B invoke wsprintf, addr buffer, addr format, eax invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK invoke ExitProcess, 0 end start

В Ассемблере для того, чтобы вычислить сумму, потребуется провести немало действий, потому как язык программирования работает напрямую с системной памятью. Здесь мы по большей частью манипулируем ресурсами, и самостоятельно указываем, сколько выделить под переменную, в каком виде воспринимать числа, и куда их девать.

Получение значения из командной строки на ассемблере

Одно из важных основных действий в программировании – это получить данные из консоли для их дальнейшей обработки. В данном случае мы их получаем из командной строки и выводим в окне Windows:

486 .model flat, stdcall option casemap: none include /masm32/include/windows.inc include /masm32/include/user32.inc include /masm32/include/kernel32.inc includelib /masm32/lib/user32.lib includelib /masm32/lib/kernel32.lib include /masm32/macros/macros.asm uselib masm32, comctl32, ws2_32 .data .code start: call GetCommandLine ; результат будет помещен в eax push 0 push chr$("Command Line") push eax ; текст для вывода берем из eax push 0 call MessageBox push 0 call ExitProcess end start

Также можно воспользоваться альтернативным методом:

486 .model flat, stdcall option casemap: none include /masm32/include/windows.inc include /masm32/include/user32.inc include /masm32/include/kernel32.inc includelib /masm32/lib/user32.lib includelib /masm32/lib/kernel32.lib include /masm32/macros/macros.asm uselib masm32, comctl32, ws2_32 .data .code start: call GetCommandLine ; результат будет помещен в eax invoke GetCommandLine invoke MessageBox, 0, eax, chr$("Command Line"), 0 invoke ExitProcess, 0 push 0 call ExitProcess end start

Здесь используется invoke – специальный макрос, с помощью которого упрощается код программы. Во время компиляции макрос-команды преобразовываются в команды Ассемблера. Так или иначе, мы пользуемся стеком – примитивным способом хранения данных, но в тоже время очень удобным. По соглашению stdcall, во всех WinAPI-функциях переменные передаются через стек, только в обратном порядке, и помещаются в соответствующий регистр eax.

Циклы в ассемблере

Вариант использования:

Data msg_title db "Title", 0 A DB 1h buffer db 128 dup(?) format db "%d",0 .code start: mov AL, A .REPEAT inc AL .UNTIL AL==7 invoke wsprintf, addr buffer, addr format, AL invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK invoke ExitProcess, 0 end start .data msg_title db "Title", 0 buffer db 128 dup(?) format db "%d",0 .code start: mov eax, 1 mov edx, 1 .WHILE edx==1 inc eax .IF eax==7 .BREAK .ENDIF .ENDW invoke wsprintf, addr buffer, addr format, eax invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK invoke ExitProcess, 0

Для создания цикла используется команда repeat. Далее с помощью inc увеличивается значение переменной на 1, независимо от того, находится она в оперативной памяти, или же в самом процессоре. Для того, чтобы прервать работу цикла, используется директива «.BREAK». Она может как останавливать цикл, так и продолжать его действие после «паузы». Также можно прервать выполнение кода программы и проверить условие repeat и while с помощью директивы «.CONTINUE».

Сумма элементов массива на assembler

Здесь мы суммируем значения переменных в массиве, используя цикл «for»:

486 .model flat, stdcall option casemap: none include /masm32/include/windows.inc include /masm32/include/user32.inc include /masm32/include/kernel32.inc includelib /masm32/lib/user32.lib includelib /masm32/lib/kernel32.lib include /masm32/macros/macros.asm uselib masm32, comctl32, ws2_32 .data msg_title db "Title", 0 A DB 1h x dd 0,1,2,3,4,5,6,7,8,9,10,11 n dd 12 buffer db 128 dup(?) format db "%d",0 .code start: mov eax, 0 mov ecx, n mov ebx, 0 L: add eax, x add ebx, type x dec ecx cmp ecx, 0 jne L invoke wsprintf, addr buffer, addr format, eax invoke MessageBox, 0, addr buffer, addr msg_title, MB_OK invoke ExitProcess, 0 end start

Команда dec, как и inc, меняет значение операнда на единицу, только в противоположную сторону, на -1. А вот cmp сравнивает переменные методом вычитания: отнимает одно значение из второго, и, в зависимости от результата ставит соответствующие флаги.

С помощью команды jne выполняется переход по метке, основываясь на результате сравнения переменных. Если он отрицательный – происходит переход, а если операнды не равняются друг другу, переход не осуществляется.

Ассемблер интересен своим представлением переменных, что позволяет делать с ними что угодно. Специалист, который разобрался во всех тонкостях данного языка программирования, владеет действительно ценными знаниями, которые имеют множество путей использования. Одна задачка может решаться самыми разными способами, поэтому путь будет тернист, но не менее увлекательным.

Post Views: 767

Когда сын клеил для школы из бумаги муляж светофора, пришла мысль: "А почему не собрать для него действующую модель светофора на микроконтроллере". На просторах Интернет есть много схем и программок к ним, реализующих принцип простейшего светофора. Но они или слишком сложны для игрушки (DC-DC преобразователь, сдвиговые регистры и т.д.) или представлены лишь как пример простейшей программы на ассемблере. Я хочу представить на обозрение схему и программу на ассемблере законченной конструкции игрушечного светофора с некоторыми дополнительными функциями. Причем собрана она на “копеечном “ микроконтроллере по простейшей схеме, что немаловажно для начинающих. Надеюсь, эта простая схема станет для многих, начинающих изучать программирование микроконтроллеров PIC, первой реально собранной на PIC конструкцией. Простая, но при этом содержащая основные приемы и атрибуты программирования, программа позволит легко ее понять и экспериментировать с ней.

Каждому, кто имеет дело с программированием микроконтроллеров, известны основные принципы написания обработчиков прерываний: как можно короткое время выполнения и короткий код, отсутствие циклов и вызовов из обработчика других подпрограмм и т.д. В данном же случае разрешены прерывания только по изменению уровня (пропустить другие прерывания мы никак не можем, так как их попросту нет) и я, для упрощения программы и ее восприятия, счел возможным отойти от этих принципов. Здесь в обработчике прерывания есть и циклы, и вызов другой подпрограммы, и (о ужас!) даже переход в режим SLEEP. Поэтому, в заголовке программа названа «неправильной». В данном случае, обработчик прерываний используется как обычная подпрограмма, однако, в других случаях вышеназванные принципы, разумеется, остаются в силе.

Краткие характеристики устройства:

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

Итак, перейдем к описанию и рассмотрению схемы.

Схема собрана на недорогом микроконтроллере PIC12F629. Непосредственно для управления светодиодами используются выводы GP0-GP2, GP4,GP5 (ножки 7, б, 5, 3, 2), запрограммированные как выходы. Светодиоды по каждому направлению объединены в последовательные группы, что позволяет минимизировать потребляемый ток. Резисторы R3-R8 ограничивают токи светодиодов. В случае сильной разницы в отдаче светодиодов разных цветов, придется подбирать соответствующие резисторы. У меня, например, две группы желтого цвета соединены параллельно и подключены к одному резистору, причем того же номинала, что и остальные и светят даже чуть ярче остальных (отдача больше).

В этой схеме на светодиоды подается на 1.5 В больше чем на микроконтроллер с дополнительного элемента (в данном случае, при отключенном выходе ток не проходит на вывод микросхемы, так как для открытия переходов двух светодиодов требуется гораздо большее напряжение, чем 1.5 В (не менее 2.5 В). И даже при пробитых обоих светодиодах (что маловероятно), ток через внутренний защитный диод на плюс питания составит около 7.5 мА, что гораздо меньше допустимого. Потребление тока светодиодами намного выше, чем потребление МК, поэтому, разностью разрядки элементов (через один не течет ток потребления МК) можно пренебречь. Экспериментально установлено, что, несмотря на уменьшение тока через светодиоды при разрядке батареи, яркость их свечения остается на приемлемом уровне во всем диапазоне напряжения батареи. Схема при этом предельно упрощается, и нет стабилизатора напряжения, потребляющего дополнительный ток, что позволило отказаться от выключателя питания (ток потребления в спящем режиме – 1-3 мкА).

Кнопка управления режимами работы устройства подключена к выводу GP3 (ножка 4), который в битах конфигурации объявлен как цифровой вход. При нажатии кнопки происходит прерывание, в обработчике которого происходит следующее. При длительном нажатии (более 4 с) устройство переходит в спящий режим. При более коротких нажатиях, происходит последовательное переключение скорости работы светофора по кругу с индикацией текущей скорости согласно рисунку.

В последнем режиме (горят красные светодиоды) включается режим желтого мигающего сигнала. При длительном нажатии на кнопку (подтверждается погасанием всех светодиодов), переходим на обычную работу с изменением режима на новый, если же кнопка не нажата более 6 сек., режим работы остается, тем же, что и до нажатия кнопки.

Заряда элементов АА в режиме sleep хватит не менее чем на год, именно поэтому, в устройстве не предусмотрен выключатель питания. Устройство переходит в спящий режим также по истечении 0.5 – 1 часа (зависит от скорости переключения цветов) работы без воздействия на кнопку. Из режима SLEEP выход происходит при любом нажатии кнопки. Питание на микроконтроллер подается по выводам 1 и 8. Для экономии выводов и упрощения конструкции, нем включен режим внутреннего генератора без внешних элементов.

Небольшие пояснения к программе, которая приведена во вложении.

Обработка нажатий кнопки производится в подпрограммах: wait_butt__- ожидание нажатия и регистрация 6сек. без нажатия, push_butt__- регистрация длительности нажатия, wait_nobutt__- ожидание не нажатой кнопки. В моменты изменения состояния светофора (желтый и моргание зеленого) значения на выходной порт считываются из таблицы в подпрограмме tact__ (младший или старший полубайты). Аналогично, индикация состояния при нажатии кнопки – из подпрограммы ind__. Для перехода в спящий режим по истечении времени работы, происходит принудительный переход в подпрограмму обработки прерываний путем программной установки флага прерывания. Изменением констант CONST_MIN, CONST_REG, CONST_SL можно изменить соответственно период моргания зеленого, начальный режим при подсоединении батареи, время работы без воздействия до перехода в режим SLEEP.

Печатная плата изготовлена из односторонне-фольгированного стеклотекстолита и имеет размеры 22х87 мм. Крайние светодиоды установлены параллельно плате в разные стороны. Средние устанавливаются один со стороны установки деталей, а другой – со стороны дорожек с продеванием выводов в отверстия платы и фиксацией их со стороны деталей каплей припоя, а со стороны дорожек припаиванием к соответствующим дорожкам.

Все резисторы мощностью 0.125 Вт. Светодиоды можно взять любые отечественные или импортные желательно одного типа с прямым падением напряжения при токе 10 мА около 2 Вольт. Кнопка – любая без фиксации. Микроконтроллер установлен на колодку.

Слово конфигурации заносится в память автоматически при загрузке прошивки (в установлена “птичка” только в пункте “PWRT”, остальные пункты “сброшены”, в графе “осциллятор” установлено “intOSC GP4”). Предварительно необходимо считать прошивку с чистой микросхемы и записать значение слова в конце памяти программ по адресу 03FF, которое требуется для настройки частоты внутреннего генератора конкретного экземпляра микросхемы. После загрузки в программу HEX-файла, по адресу 03FF необходимо вручную прописать это значение. В данном устройстве отклонение частоты не критично, но все же следует знать, что для данной микросхемы требуется такая процедура. В крайнем случае, если заводское значение потеряно, можно ничего не делать – в программе приняты меры для корректной работы и в этом случае.

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

В приложении имеются: модель, печатная плата в формате LAY, программа на Ассемблере MPASM, файл прошивки HEX.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
IC1 МК PIC 8-бит

PIC12F629

1 DIP В блокнот
R1 Резистор

3 кОм

1 0.125 Вт В блокнот
R2 Резистор

100 Ом

1 0.125 Вт В блокнот
R3-R8 Резистор

200 Ом

6 0.125 Вт В блокнот
HL1,HL2,HL9,HL10 Светодиод

АЛ307А

4 RED В блокнот
HL3,HL4,HL11,HL12 Светодиод

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http :// www . allbest . ru /

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ РФ

Государственное образовательное учреждение среднего профессионального образования

Уфимский колледж статистики, информатики и вычислительной техники

П ояснительная записка

СВЕТОФОР НА ОСНОВЕ МИКРОКОНТРОЛЕРА

Абдрахимов А.Р.

Руководитель проекта

Мичурин Е.А.

ВВЕДЕНИЕ

1. ОПИСАНИЕ АКТУАЛЬНОСТИ ЗАДАЧИ И ОБЛАСТЬ ПРИМЕНЕНИЯ

1.1 Светофоры

1.2 Типы светофоров

1.3 Конструкция светофоров

2. ИССЛЕДОВАНИЕ, ПРОЕКТИРОВАНИЕ И РАЗРАБОТКА СХЕМ

2.1 Обзор характеристики микроконтроллера ATtiny25V

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ И НОРМАТИВНО-ТЕХНИЧЕСКОЙ ДОКУМЕНТАЦИИ

ПРИЛОЖЕНИЯ

ВВЕДЕНИЕ

Повышение технического уровня и эффективности электронного оборудования на основе новейших достижений электроники - одна из важнейших задач развития общества. Создание микропроцессоров обусловлено достижениями в области технологии производства больших интегральных схем (БИС). Вслед за появлением микропроцессоров разрабатывается и получает широкое развитие специальная многофункциональная аппаратура, используемая при решении большого числа задач современной техники. Микропроцессоры позволяют на единой технологической схемотехнической базе за счет программирования создавать различные типы приборов. Так и в своей работе я решил реализовать прибор на основе микропроцессора. В качестве микроконтроллера выбран AVR (ATtiny25V)

В данной курсовой работе было разработано устройство на микроконтроллере, написана программа. Данным устройством является светофор на основе микроконтролера.

При проектировании данной курсовой работой были поставлены следующие задачи:

1) Продумать, спроектировать и на практике проверить устройство на основе микроконтроллера;

2) написать и откомпилировать программу для микроконтроллера

3) рассмотреть вопросы программирования микроконтроллеров.

1 . ОПИСАНИЕ АКТУАЛЬНОСТИ ЗАДАЧИ И ОБЛАСТЬ ПРИМЕНЕНИЯ

В данной курсовой работе на основе микроконтроллера ATtiny25V было спроектировано и реализовано устройство - светофор на основе микроконтролера.

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

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

Одновременно растет и количество дорожно-транспортных происшествий (ДТП), в которых гибнут и получают ранения миллионы людей во всем мире, повреждаются и выходят из строя дорогостоящая техника и грузы. Свыше 60% всех ДТП приходится на города и другие населенные пункты. При этом на перекрестках, занимающих незначительную часть территории города, концентрируется более 30% всех ДТП.

Обеспечение быстрого и безопасного движения в современных городах требует применения комплекса мероприятий архитектурно-планировочного и организационного характера. К числу архитектурно-планировочных мероприятий относятся строительство новых и реконструкция существующих улиц, строительство транспортных пересечений в разных уровнях, пешеходных тоннелей, объездных дорог вокруг городов для отвода транзитных транспортных потоков и т.д.

Организационные мероприятия способствуют упорядочению движения на уже существующей (сложившейся) улично-дорожной сети. К числу таких мероприятий относятся введение одностороннего движения, кругового движения на перекрестках, организация пешеходных переходов и пешеходных зон, автомобильных стоянок, остановок общественного транспорта и др.

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

Речь идет об организации движения в исторически сложившихся кварталах старых городов, которые часто являются памятниками архитектуры и не подлежат реконструкции. Кроме того, развитие улично-дорожной сети нередко связано с ликвидацией зеленых насаждений, что не всегда является целесообразным.

При реализации мероприятий по организации дорожного движения особая роль принадлежит внедрению технических средств: дорожных знаков и дорожной разметки, средств светофорного регулирования, дорожных ограждений и направляющих устройств. При этом светофорное регулирование является одним из основных средств обеспечения безопасности движения на перекрестках. Количество перекрестков, оборудованных светофорами, в крупнейших городах мира с высоким уровнем автомобилизации непрерывно возрастает и достигает в некоторых случаях соотношения: один светофорный объекта 1,5-2 тыс. жителей города.

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

1.1 Светофоры

Значение и чередование сигналов.

Светофоры предназначены для поочередного пропуска участников движения через определенный участок улично-дорожной сети, а также для обозначения опасных участков дорог. В зависимости от условий светофоры применяются для управления движением в определенных направлениях или по отдельным полосам данного направления:

в местах, где встречаются конфликтующие транспортные, а также транспортные и пешеходные потоки (перекрестки, пешеходные переходы);

· по полосам, где направление движения может меняться на противоположное;

· на железнодорожных переездах, разводных мостах, причалах, паромах, переправах;

· при выездах автомобилей спецслужб на дороги с интенсивным движением;

· для управления движением транспортных средств общего пользования.

Порядок чередования сигналов, их вид и значение, принятые в России, соответствуют международной Конвенции о дорожных знаках и сигналах. Сигналы чередуются в такой последовательности: красный - красный с желтым - зеленый - желтый - красный...

При отсутствии дополнительной секции красный немигающий сигнал запрещает движение по всей ширине проезжей части. Остальные разновидности красного сигнала имеют специальное назначение:

· контурная черная стрелка на красном фоне круглой формы запрещает движение в сторону, указанную стрелкой;

· косой красный крест на черном фоне квадратной формы

· запрещает въезд на полосу движения, над которой он расположен;

· красный силуэт стоящего человека запрещает движение пешеходам;

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

· Желтый немигающий сигнал обязывает к остановке перед стоп - линией всех водителей, за исключением тех, которые уже не могли бы остановиться с учетом требований безопасности движения. Желтый сигнал, подключенный к красному, предупреждает о незамедлительном включении зеленого сигнала. Желтый мигающий сигнал не запрещает движение и применяется для обозначения перекрестков, которые могут быть не замечены водителями на расстоянии, достаточном для остановки транспортного средства.

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

Разновидности зеленого сигнала и их назначение следующие:

· контурная черная стрелка на зеленом фоне круглой формы, а также зеленая стрелка на черном фоне круглой формы - разрешают движение в сторону стрелки;

· зеленая стрелка, на черном фоне квадратной формы направленная вниз, разрешает движение по полосе, над которой расположен светофор;

· сигнал в виде зеленого силуэта идущего человека разрешает движение пешеходов.

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

Разрешенное направление движения для транспортных средств зависит от сочетания включенных сигналов верхнего и нижнего ряда специального светофора (в случае его применения). При выключенном нижнем сигнале движение запрещено во всех направлениях.

1.2 Типы светофоров

Светофоры можно классифицировать по их функциональному назначению (транспортные, пешеходные); по конструктивному исполнению (одно-, двух- или трехсекционные, трехсекционные с дополнительными секциями); по их роли, выполняемой в процессе управления движением (основные, дублеры и повторители).

В приложении 1 показаны некоторые светофоры, применяемые в нашей стране для управления дорожным движением. В соответствии с ГОСТ 25695-83 "Светофоры дорожные. Общие технические условия" они делятся на две группы: транспортные и пешеходные. Светофоры каждой группы, в свою очередь, подразделяются на типы и разновидности исполнения. Имеются семь типов транспортных светофоров и два типа пешеходных. Каждый светофор имеет свой номер. Первая цифра номера означает группу (1 - транспортный светофор, 2 - пешеходный), вторая цифра - тип светофора, третья цифра (или число) - разновидность его исполнения.

Транспортные светофоры типа 1 (без учета сигналов дополнительных секций) и типа 2 имеют три сигнала круглой формы диаметром 200 или 300 мм, расположенных вертикально. Как исключение, для светофоров типа 1 допускается горизонтальное расположение сигналов. Последовательность расположения сверху вниз (слева направо): красный, желтый, зеленый.

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

Для лучшего распознавания водителем дополнительной секции (особенно в темное время суток) на линзе основного зеленого сигнала светофора наносят контуры стрел, указывающих разрешенные этим сигналом направления движения. С этой же целью при наличии дополнительных секций светофор оборудуется белым прямоугольным экраном, выступающим за габариты светофора. Расположение секций зависит от направления стрелки.

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

Светофоры типа 1 применяются для регулирования всех направлений движения на перекрестке. Допускается их использование и перед железнодорожными переездами, пересечениями с трамвайными и троллейбусными линиями, сужениями проезжей части и т.д. Светофоры типа 2 применяются для регулирования движения в определенных направлениях (указанных на линзах стрелками) и только в тех случаях, когда транспортный поток в этих направлениях не имеет пересечений илислияний с другими транспортными или пешеходными потоками (бесконфликтное регулирование). При достаточно широкой проезжей части с числом полос на подходе к перекрестку более четырех целесообразно светофоры этого типа использовать для регулирования движения по полосам.

Специфика использования светофоров типа 2, связанная с бесконфликтным регулированием, не позволяет их совместную установку со светофорами типа 1 на одном подходе к перекрестку. Исключение составляет случай, когда транспортные потоки отделены друг от друга приподнятыми островками, или разделительными полосами. Таким образом в пределах одной проезжей части водитель должен видеть светофоры одного типа.

Транспортные светофоры типа 3 применяются в качестве повторителей сигналов светофоров типа 1. По своему внешнему виду они напоминают светофоры этого типа, однако в отличие от них имеют меньшие габаритные размеры и диаметры сигналов 100 мм. Если основной светофор (типа 1) имеет дополнительную секцию то светофор-повторитель также оборудуется дополнительной секцией естественно уменьшенного размера.

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

Транспортные светофоры типа 4 применяют для управления въездами на отдельные полосы движения. Такая необходимость возникает, например, при организации реверсивного движения. Светофоры этого типа устанавливают над каждой полосой в ее начале. Они имеют горизонтальное расположение сигналов: слева - в виде косого красного креста; справа - в виде зеленой стрелки, направленной острием вниз. Оба сигнала выполняются на черном фоне прямоугольной формы. Габаритные размеры каждого символа 450 500 мм.

Светофоры типа 4 могут применяться со светофорами типа 1, если реверсивное движение организовано не по всей ширине проезжей части. В этом случае действие светофоров типа 1 не распространяется на полосы с реверсивным движением. Запрещается въезд а полосу, ограниченную с обеих сторон двойной прерывистой линией (разметка 1.9), при отключенном светофоре типа 4, расположенного над этой полосой. В противном случае возникает возможность выезда навстречу движения (например, при перегорании ламп красного сигнала одного из светофоров полосы).

Транспортный светофор типа 5 имеет четыре сигнала бело-лунного цвета круглой формы диаметром 100 мм. Подобный светофор применяют в случае бесконфликтного регулирования движения транспортных средств общего пользования (трамваев, маршрутных автобусов, троллейбусов), движущихся по специально выделенной полосе. Однако даже в этих случаях необходимость в установке светофоров типа 5 нередко отпадает: схема организации движения на перекрестке обеспечивает бесконфликтный пропуск транспортных средств указанных видов вместе с общим потоком, и светофоры типа 5 лишь повторяют значения сигналов светофоров типа 1 или 2.

При отсутствии специально выделенных полос для транспортных средств общего пользования или возможности их бесконфликтного пропуска применение светофоров типа 5 становится бессмысленным. Управление движением осуществляется светофорами типа 1 или 2.

Транспортные светофора типа 6 имеют два (реже один) красный сигнал круглой формы диаметром 200 или 300 мм, расположенных горизонтально и работающих в режиме попеременного мигания. При разрешении движения транспортных средств сигналы выключаются. Светофоры этого типа устанавливаются перед железнодорожными переездами, разводными мостами, причалами железнодорожных переправ, в местах выезда на дорогу транспортных средств спецслужб.

Светофор типа 7 имеет один сигнал желтого цвета, постоянно работающий в режиме мигания. Его применяют на нерегулируемых перекрестках повышенной опасности.

Транспортные светофоры типа 8 имеют два расположенных вертикально сигнала красного и зеленого цветов круглой формы диаметром 200 и 300 мм. Их применяют при временном сужении проезжей части, когда организуют попеременное движение по одной полосе, а использование для этих целей знаков приоритета затруднено в силу ограниченной видимости на этом участке дороги. Кроме этого, светофоры типа 8 применяют также для управления малоинтенсивным движением на внутренних территориях гаражей, предприятий и организаций, где, как правило, введены ограничения скорости. В перечисленных случаях допускается и использование наиболее распространенных светофоров типа 1, однако светофоры типа 8, отличающиеся от них отсутствием желтого сигнала, указывают на специфику условий движения.

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

Согласно ГОСТ 23457-86, пешеходными светофорами оборудуют все пешеходные переходы на управляемом светофорами перекрестке. При этом, если не обеспечен бесконфликтный пропуск пешеходов, зеленый сигнал должен работать в мигающем режиме, предупреждая пешеходов и водителей о возможности просачивания транспортных средств через пешеходные потоки.

Для всех типов светофоров при наличии двух вариантов сигнала (200 или 300 мм) светофоры с большим размером сигнала устанавливают на магистральных улицах и площадях, на дорогах с максимально допустимой скоростью движения более 60 км/ч, а также при неблагоприятных условиях видимости. Таким образом обеспечивается лучшее восприятие сигналов участниками движения. Кроме этого, увеличенные размеры сигналов подчеркивают характер дороги, на которой находится водитель. С этой же целью перед пересечениями с указанными дорогами со стороны, где были светофоры с диаметром сигнала 200 мм, устанавливают светофор с увеличенным диаметром (300 мм) красного сигнала.

1.3 Конструкция светофоров

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

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

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

В качестве источников света применяют лампы накаливания общего и специального назначения. Известны конструкции, где в качестве источника света используют газосветные трубки или излучающие диоды. Основным недостатком ламп накаливания общего назначения являются большая протяженность нити, которая плохо поддается фокусировке, и низкая виброустойчивость ламп. Кроме того, они имеют сравнительно малый срок службы (500-800 ч.), обусловленный специфическим режимом работы. Повышение срока службы ламп идет по пути применения специальных наполнителей (криптон), усложнения технологии изготовления нити накаливания, увеличения числа держателей нити.

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

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

Светофильтры-линзы способствуют концентрации светового потока. Их использование позволяет отказаться от использования отражателя и уменьшить размер сигнала (транспортные светофоры типов 3 и 5). Светофоры с такими светофильтрами применяют, когда видимость сигнала должна быть обеспечена в достаточно узких пределах - на одной-двух полосах движения.

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

Самым распространенным антифантомным устройством является противосолнечный козырек. Однако при низком положении солнца (в направлении восток-запад, запад-восток) может возникнуть одновременное свечение всех сигналов светофора. Известно несколько методов, позволяющих устранить фантомный эффект и получивших распространения в практике регулирования. Как правило, они связаны с некоторыми изменениями в конструкции отражателя или светофильтра. Отражатель с так называемым антифантомным крестом представляет собой взаимно перпендикулярные сегментные пластины с прорезями для размещения галогенной лампы. Луч света, попадающий от постороннего источника на отражатель, отклоняется и поглощается зачерненной поверхностью пластин. В то же время пластины практически полностью пропускают лучи от лампы светофора. Другим решением является установка перед светофильтром рассеивателем специальной антифантомной линзы, имеющей пилообразный профиль. Луч солнца, попадая на наклонную поверхность, отбрасывается на зачерненную горизонтальную ступеньку и поглощается. Известны также методы устранения фантомного эффекта путем установки перед внутренней поверхностью светофильтра перегородки сотовой конструкции, которая пропускает горизонтальный световой поток оптического устройства светофора, однако задерживает солнечные лучи, если они имеют хотя бы небольшое отклонение по горизонтали.

2 . ИССЛЕДОВАНИЕ, ПРОЕКТИРОВАНИЕ И РАЗРАБОТКА СХЕМ

Общее описание:

ATtiny25 - экономичный 8-разр. КМОП микроконтроллеры, выполненные по усовершенствованной AVR RISC-архитектуре. За счет выполнения большинства инструкций за один машинный цикл микроконтроллеры ATtiny25 достигают производительности 1млн. оп. в сек. при тактировании частотой 1МГц, что позволяет разработчику оптимизировать потребляемую мощность и быстродействие.

Ядро AVR комбинирует богатый набор инструкций с 32 регистрами общего назначения, которые непосредственно подключены к арифметико-логическому устройству (АЛУ). Это позволяет осуществлять доступ при выполнении инструкции сразу к двум регистрам и выполнить ее за один машинный цикл. Результирующая архитектура обладает более высокой эффективностью, обеспечивая производительность в более чем 10 раз выше по сравнению с традиционными CISC-микроконтроллерами.

ATtiny25 содержит следующие элементы: 2 кбайт внутрисистемно-программируемой флэш-памяти, 128 байт ЭСППЗУ, 128 байт статического ОЗУ, 6 линий ввода-вывода общего назначения, 32 универсальных рабочих регистров общего назначения, один 8-разр. таймер-счетчик с режимами сравнения, один 8-разр. высокоскоростной таймер-счетчик, универсальный последовательный интерфейс, внутренние и внешние прерывания, 4-канальный 10-разр. АЦП, программируемый сторожевой таймер с внутренним генератором, а также три программно выбираемых экономичных режима. В режиме холостого хода (Idle) останавливается ЦПУ при этом продолжают работу статическое ОЗУ, таймер-счетчик, АЦП, аналоговый компаратор и система прерываний. В режиме пониженной мощности (Power-down) сберегается содержимое регистров, отключаются все встроенные функции до следующего прерывания или аппаратного сброса. В режиме снижения шумов АЦП (ADC Noise Reduction) останавливается ЦПУ и все модули ввода-вывода, кроме АЦП, за счет чего достигается снижение цифровых шумов во время преобразования АЦП.

Микроконтроллер выпускается по технологии высокоплотной энергонезависимой памяти. Встроенная флэш-память может быть перепрограммирована внутрисистемно через последовательный интерфейс SPI с помощью недорого программатора или с помощью программы в загрузочном секторе (самопрограммирование).

ATtiny25 поддерживается полным набором аппаратных и программных отладочных средств, в т.ч. Cи-компиляторы, Ассемблер, программные отладчики/симуляторы, внутрисхемные эмуляторы и оценочные наборы.

2.1 О бзор характеристики микроконтроллера ATtiny 25 V

8-разр. микроконтроллер с внутрисистемно-программируемой флэш-памятью размером 2кбайт

Особенности:

Высокопроизводительный, экономичный 8-разр. AVR-микроконтроллер

Усовершенствованная RISC-архитектура

Обширный набор из 120 инструкций большинство которых выполняются за один цикл

32 x 8 универсальных регистров общего назначения

Полностью статическая работа

Энергонезависимые памяти программ и данных

Внутрисистемно программируемая флэш-память программ размером 2 кбайт (10 тыс. циклов запись/стирание)

128байт внутрисистемно-программируемого ЭСППЗУ (ATtiny25) (100 тыс. циклов записи/стирания)

128байт внутреннего статического ОЗУ (ATtiny25)

Программируемые биты защиты флэш-памяти и ЭСППЗУ

Отличительные особенности периферийных устройств

8-разр. таймер-счетчик с предделителем и двумя каналами ШИМ

8-разр. высокоскоростной таймер-счетчик с отдельным предварительным делителем 2 высокочастотных выхода ШИМ с отдельными регистрами задания порога сравнения

Программируемый генератор паузы

Универсальный последовательный интерфейс с отдельным детектором условия старт

10-разр. АЦП

4 несимметричных канала

2 дифференциальных канала с программируемым усилением (1x, 20x)

Программируемый сторожевой таймер с отдельным встроенным генератором

Встроенный аналоговый компаратор

Специальные функции микроконтроллера

Встроенная отладочная система debugWIRE

Внутрисистемное программирование через порт SPI

Внешние и внутренние источники прерываний

Экономичные режимы: холостой ход (Idle), уменьшение шумов АЦП (ADC Noise Reduction) и пониженная мощность (Power-down)

Усовершенствованная схема сброса при подаче питания

Программируемая схема контроля напряжения питания

Встроенный калиброванный генератор

Ввод-вывод и корпуса

Шесть программируемых линий ввода-вывода

8-выв. корпус PDIP и 8-выв. SOIC

Рабочее напряжение

1.8 - 5.5В для ATtiny25V

2.7 - 5.5В для ATtiny25

Градации по быстродействию

ATtiny25V: 0 - 4 МГц при 1.8 - 5.5В, 0 - 10 МГц при 2.7 - 5.5В

ATtiny25: 0 - 10 МГц при 2.7 - 5.5В, 0 - 20 МГц при 4.5 - 5.5В

Промышленный температурный диапазон

Малый потребляемый ток

Активный режим: 1 МГц, 1.8В: 450 мкА

Режим пониженной мощности: 0.1 мкА при 1.8В

Структурная схема микроконтроллера приведена в приложении Г.

Технико-экономическое обоснование

Наименование товара

Резисторы

Светодиоды

ЗАКЛЮЧЕНИЕ

В данной курсовой работе был разработан светофор на основе микропроцессора AVR (ATtiny25V), написана и откомпилирована программа для него, рассмотрены вопросы программирования микроконтроллеров, применения полученных знаний на практике. При выполнении данной курсовой работы был получен ценный опыт разработки подобных устройств, получены навыки в разработке программ на языке ассемблер также был закреплены знания, которые получены на занятиях

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ И НОРМАТИВНО-ТЕХНИЧЕСКОЙ ДОКУМЕНТАЦИИ

1. ГОСТ 2.105-95 ЕСКД. Общие требования к текстовым документам. - Введ. 1996-01-07 -М.: Изд-во стандартов, 1996.- 36

2. ГОСТ 21.1101-92 СПДС. “Основные требования к рабочей документации”.

3. ГОСТ 2.004-88 ЕСКД “Общие требования к выполнению конструкторских и технологических документов на печатающих и графических устройствах вывода ЭВМ”,

ПРИЛОЖЕНИЯ

Приложение А

Схема прибора

Программа прошивки микроконтроллера (откомпилированный вариант)

Приложение Б

Листинг программы код программы для прошивки микроконтроллера

This program was produced by the

CodeWizardAVR V2.04.8b Evaluation

Automatic Program Generator

© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.

Date: 18.11.2011

Chip type: ATtiny25

AVR Core Clock frequency: 8,000000 MHz

Memory model: Tiny

External RAM size: 0

Data Stack size: 32

#include

#include

unsigned char svet=0;

// Declare your global variables here

// Declare your local variables here

// Input/Output Ports initialization

// Port B initialization

// Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out

// State5=T State4=T State3=T State2=0 State1=0 State0=0

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0A output: Disconnected

// OC0B output: Disconnected

// External Interrupt(s) initialization

// Interrupt on any change on pins PCINT0-5: On

// Analog Comparator initialization

// Analog Comparator: Off

//PORTB.0=1; //green

//PORTB.1=1; //red

//PORTB.2=1; //yellow

if(svet<5)svet++;

case 1:PORTB.0=0; PORTB.1=1; PORTB.2=0;delay_ms(1000); break;

case 2:PORTB.2=1; PORTB.0=0; PORTB.1=1;delay_ms(500); break;

case 3:PORTB.1=0; PORTB.0=1; PORTB.2=0;delay_ms(1000); break;

case 4:PORTB.1=0;PORTB.2=0; PORTB.0=0;delay_ms(100); break;

case 5:PORTB.1=0; PORTB.0=1; PORTB.2=0;delay_ms(100); break;

Приложене В

Назначение выводов:

Размещено на Allbest.ru

...

Подобные документы

    Проектирование системы регулирования дорожного движения на перекрестке (системы управления светофорами) на основе микроконтроллера группы PIC 16F84. Принцип действия устройства, функциональная схема и описание ее элементов. Алгоритм и листинг программы.

    курсовая работа , добавлен 24.12.2012

    Проектирование принципиальной схемы устройства индикации на основе 8-битного AVR микроконтроллера типа ATmega16 с питанием от источника питания на 10 V и отображением данных на графическом LCD-дисплее. Разработка программного обеспечения микроконтроллера.

    курсовая работа , добавлен 19.12.2010

    Особенности микроконтроллера ATTINY семейства AVR. Описание ресурсов микроконтроллера ATTINY12: описание процессора, порты ввода/вывода, периферийные устройства, архитектура ядра. Разработка устройства со световыми эффектами на базе микроконтроллера.

    курсовая работа , добавлен 24.06.2013

    Описание интегратора первого порядка. Обзор микроконтроллера AТmega16. Доопределение набора аппаратных средств. Схема включения микроконтроллера. Формирование тактовых импульсов. Организация сброса. Алгоритм работы и проектирование модулей устройства.

    курсовая работа , добавлен 19.12.2010

    Проектирование шахматных часов с функцией будильника. Создание и разводка печатной платы на основе микроконтроллера при помощи программы Proteus, выбор его архитектуры. Разработка схемы и программного кода. Тестирование прототипа на макетной плате.

    дипломная работа , добавлен 22.01.2016

    Порядок описания и разработки структурной и функциональной схемы микропроцессорной системы на основе микроконтроллера К1816ВЕ31. Обоснование выбора элементов, разработка принципиальной схемы данной системы, программы инициализации основных компонентов.

    курсовая работа , добавлен 16.12.2010

    Практические примеры и их программная реализация на языке ассемблера для микроконтроллера семейства MCS-51 (МК51). Использование команд передачи данных. Арифметические и логические, битовые операции в MCS-51. Взаимодействие МК с объектом управления.

    курсовая работа , добавлен 19.02.2011

    Структурная схема микроконтроллерной системы. Схемы подключения микроконтроллера, цифровых и аналоговых сигналов, линейного дисплея и клавиатуры. Текст главной программы на языке Ассемблера для МК51. Программа ввода и обработки аналоговой информации.

    курсовая работа , добавлен 19.12.2013

    Разработка структурной и принципиальной схем электронного тахометра. Изучение принципа работы датчика магнитного поля. Выбор микроконтроллера. Проектирование управляющей программы для микроконтроллера. Адаптация устройства к промышленному применению.

    курсовая работа , добавлен 22.01.2015

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

Цель работы. Целью лабораторной работы является отладка прикладных программ на языке Си для микроконтроллера AVR с помощью компилятора CVAVR и симулятора VMLAB.

Программа работы

1. Установите в директорию C:\CVAVR свободную версию компилятора CodeVisionAVR . В директории C:\CVAVR создайте папку z1 (задача 1) для файлов первого проекта.

Запустите компилятор. Для создания файла проекта нажимайте: Файл -> новый -> проект -> ОК -> No - перейдите в созданную для проекта папку z1 и введите в поле "имя файла": z1 - нажмите "сохранить" - откроется окно конфигурации проекта

Перейдите на закладку "С compiler"

Выберите MK (Chip) ATmega16

Установите частоту тактирования МК (Clock) 4.0 МГц

Нажмите ОК .

Перед вами появится открытый текстовый файл Project Notes - z1.prj , в котором вы можете записывать свои замечания и мысли по проекту.

Теперь нужно создать главный для нас текстовый файл для набора исходного текста на Си - его расширение.с

Нажимайте: Файл -> New -> Source -> ОК

появился файл untitled.c - нажимайте: Файл - Сохранить как - введите в поле "имя файла": z1.c и нажмите Сохранить .

Нужно добавить созданный файл z1.c в список файлов проекта - откройте меню конфигурирования проекта: Project -> Configure .

В открывшемся диалоге, нужно выбрать ярлык "Files" и нажать кнопку "Add ". В новом диалоге выберите файл "z1.c " и нажмите "Открыть ". Теперь файл включен в проект.

Нажимайте: ОК

Максимизируйте (разверните) окно файла - z1.c

Теперь все готово к собственно программированию, т.е. к созданию текста программы на языке Си. Ниже в таблице подготовлен текст программы к задаче 1, реализующей следующее техническое задание: Разработать устройство на микроконтроллере ATmega16, которое будет отображать в двоичном виде горящими светодиодами 8-ми битное число, начиная с 0 и с постоянным увеличением на 1. Устройство питается постоянным стабилизированным напряжением от 4 до 5.5 вольт. Тактирование МК осуществляется от кварцевого резонатора с частотой 4 МГц. Всего подключено 8 светодиодов от ножек порта A через токоограничительные резисторы к питанию МК. Переключение светодиодов должно производиться с паузами в 65 мс.

#include /* Вставить вместо этой строки текст файла mega16.h, содержащий описание регистров МК */

#define PA_OUT DDRA = 0xFF /* Заменить везде в тексте программы

PA_OUT на DDRA = 0xFF */

// ++++ функция инициализации МК ++++ void initialization(void){ PA_OUT;// сделать весь PORTA выходом TCCR0 = 0x05; /* таймер включить считать, делая один отсчет каждые 1024 колебания на ножке XTAL1 */ }

Char per =0;

// ++++ Главная функция ++++ void main (void){ initialization(); /* Вызвать функцию инициализации МК - т.е. настройки нужных нам устройств МК в соответствии с поставленной задачей */

//Бесконечный цикл while (1){ //Делать всегда

PORTA=~(per ++);

while (!(TIFR&0x01)); // ждем установки флага переполнения timer0 TIFR = 0x01; // очистить флаг переполнения timer0 }; //цикл закончен

} //скобка для main()

Запишите (без комментариев) программу в окно исходного текста программы. Сохраните изменения: файл -> Save All .

Для компиляции программы нажмите кнопочку "Make the project ".

Загляните в папку нашего проекта - z1. В результате компиляции там появилось много новых файлов. Главные для нас:

z1.hex - файл-прошивка для "загрузки" в МК;

z1__.с - копия файла z1.c для симуляторов;

z1.cof - информация, связывающая содержимое файлов z1__.с и z1.hex. Эта информация позволяет при симуляции в VMLAB наблюдать движение программы прямо по коду на языке Си. Указанные файлы будем использовать в симуляторе VMLAB. Необходимым для реального МК является лишь файл прошивки.

Следующие четыре файла содержат нашу программу, написанную на стандартном ассемблере для AVR с привязкой к тексту на Си: z1.asm, z1.lst, z1.vec, z1.inc. Остальные файлы практически не интересны.

2. Запустите VMLAB и откройте созданный проект: Project -> Open Project File

Перейдите в папку задачи 1 C:\CVAVR\z1\ и наберите имя файла z1_vm.prj проекта для VMLAB. После появления фразы, что такой файл не существует, VMLAB предложит создать его, с чем вы соглашайтесь. В появившемся окне запишите без комментариев приведенный ниже в таблице текстовый файл.

; Файл-проект z1_vm.prj для симуляции по задаче 1.

; Комментарии пишутся в VMLAB только в одну строчку

; после точки с запятой; МК как бы "прошит" файлом - z1.hex. После включения МК

; горящие светодиоды показывают в двоичном виде числа от 0

.MICRO "ATmega16" ; симулируемый МК .TOOLCHAIN "GENERIC" .TARGET "z1.hex" ; что "прошито" в МК .COFF "z1.cof"

.SOURCE "z1__.c" .POWER VDD=5 VSS=0 ; Питание +5 вольт; VSS это GND МК - "общий" провод схемы; Относительно него измеряются напряжения .CLOCK 4meg ; частота кварца 4 МГц; Точнее это частота тактирования МК

; Ввод схемы устройства по задаче 1 ; 8 светодиодов подключаются катодами через резисторы

: номиналом 560 Ом к ножкам МК с 33 до 40

; резистор R1 подключить к узлу D1_NODE и к выводу PA0 МК; анод светодиода к цепи +5 В. Остальные 7 светодиодов

; подключаются аналогично

D1 VDD D1_NODE R1 D1_NODE PA0 560 D2 VDD D2_NODE R2 D2_NODE PA1 560 D3 VDD D3_NODE R3 D3_NODE PA2 560 D4 VDD D4_NODE R4 D4_NODE PA3 560 D5 VDD D5_NODE R5 D5_NODE PA4 560 D6 VDD D6_NODE R6 D6_NODE PA5 560 D7 VDD D7_NODE R7 D7_NODE PA6 560 D8 VDD D8_NODE R8 D8_NODE PA7 560

; Сигналы на ножках PA0 PA1 PA2 ; будем наблюдать в окне виртуального осциллографа - "Scope" .PLOT V(PA0) V(PA1) V(PA2) ; Рисовать графики напряжения в перечисленных узлах схемы

В меню Project запустите Re-Build all ...

Через меню View откройте два компонента: SCOPE – это виртуальный запоминающий осциллограф симулятора и Control Panel – это панель, на которой содержатся нужные нам светодиоды и многое другое, пока нам не нужное.

Через меню Window откройте (обычно оно открывается сразу при открытии проекта) окно Code – в этом окне вы увидите текст симулируемой программы.

Обратите внимание на окно Messages – в нем появляются служебные сообщения симулятора по ходу работы. В окне Messages должно появиться сообщение об успехе и что все готово к запуску (Success! All ready to run). Кроме того, на панели инструментов загорится зеленый светофор – это кнопка, которой можно запускать симуляцию.

Нажатие зеленого светофора эквивалентно подаче "1" на вывод RESET МК при включенном питании, но еще не выполнявшем программу.

В окне Scope появились три графика для сигналов, которые мы будем наблюдать. Установите масштаб по вертикали 2 вольта на деление, а по горизонтали 50 мс.

В окне Сode появилось серое поле слева и зеленые квадратики напротив исполняемых строк кода программы на Си – кликнув по такому квадратику мы можем поставить точку останова программы.

Разместите три окна и Control Panel на экране компьютера так, чтобы видеть их все.

Нажмите "светофор" для запуска симуляции программы. Программа запустится и остановится – в окне Messages появится сообщение. Опять нажимаем на "светофор". Симулятор опять останавливается и сообщает, что произошел сброс от "сторожевого таймера МК" - мы не указали симулятору, что не используем его. Опять нажимаем на "светофор" – теперь программа будет работать непрерывно, пока мы ее не остановим.

Пусть программа симулирует, а вы понаблюдайте за тем, что происходит в указанных выше окнах. Что отображается в окне Control Panel кроме светодиодов?

Понаблюдайте за окнами SCOPE и Code и за светодиодами. В окне Code при симуляции возникают и растут желтые полосы, подсвечивающие строки исполняемой программы. Длины этих подсветок пропорциональны времени, в течение которого программа выполняет код этих строк.

Какой ток потребляется микроконтроллером от источника питания? Остановите симуляцию, нажав красный восьмиугольник «Стоп» и измерьте длительность периода импульсов на ножке РА2 МК. Насколько соответствует она расчетной величине? Для измерения временного промежутка в окне SCOPE симулятора VMLAB нужно установить вертикальные курсоры 1 и 2 на границах измеряемого интервала и в поле Cursor delta time появится значение времени между двумя курсорами.

При измерении коротких повторяющихся интервалов можно мерить время сразу нескольких, а результат поделить затем на число таких интервалов между измерительными курсорами.

Перезапустите МК, кликнув по кнопке с круговой темно-синей стрелкой . Вы как бы отключаете и затем снова подаете питание на МК, но создаете "0" на ножке RESET МК – вследствие чего программа не стартует!

Какую функцию выполняет команда PORTA =~(per ++); ?

Приведите в отчете схему подключения светодиодов к МК.

3. Модифицируйте программу. Переключите светодиоды к порту С. Время паузы между переключениями светодиодов уменьшить в 2 раза.

Для изменения Си кода программы просто запустите компилятор CodeVisionAVR (VMLAB выключать не нужно!) и внесите нужные изменения, затем откомпилируйте проект. Далее перейдите в VMLAB, сделайте глубокий рестарт и затем Re- b uid all. Все! Изменения внесены и все опять готово к симуляции. Таким образом, компилятор и симулятор работают одновременно в одной папке проекта и не мешают, а помогают друг другу. В отчет включите файлы z1.c и z1_vm.prj модифицированного проекта.

4. В следующем проекте будем выводить данные на символьный LCD дисплей (жидко-кристаллический индикатор). Схема его подключения к порту А микроконтроллера приведена на рис. 9.1 (там же указан источник информации, в котором вы можете более подробно ознакомиться с решаемой задачей).

Запустите компилятор CodeVisionAVR , затем генератор начального кода " CodeWizardAVR " - кликнув серую шестеренку слева от красного жучка... Выберите ATmega16 и частоту кварца 4 МГц. Перейдите к закладке LCD и укажите PORTA и 16 символов.

Выполнив Файл -> Generate , Save and Exit , создайте в директории C:\CVAVR папку z2 (задача 2) для файлов нового проекта. Сохраните, нажимая три раза z2, файлы z2.c, z2.prj и z2.cwp. Посмотрите сгенерированный мастером файл начального кода программы z 2. c . Какими командами проводится инициализация LCD дисплея? Можно ли удалить из программы команды, реализующие инициализацию периферийных устройств, не используемых в данной задаче?

Рис. 9.1 –Типовая схема включенияLCDдисплея

После команды

lcd _ init (16); // LCD 16 символов на строку

добавьте две строчки:

lcd _ gotoxy (5,0); // вывод символов с 6-й позиции в первой строке lcd _ putsf (" Hello ! "); //счет строк и символов начинается с нуля!

Сохраните (File -> Save All) и откомпилируйте программу.

Не закрывая компилятор, откройте VMLAB . В окне Open Project File впишите имя файла z2_vm и откройте файл проекта для симулятора z 2_ vm . prj . Впишите в него приведенный ниже в рамке текст и запустите Re - build all ... Загоревшийся светофор говорит о том, что программа готова к симуляции. Откройте окно Control Panel и, трижды нажав светофор, добейтесь непрерывной симуляции. Долгожданная надпись на экране LCD появится не сразу (процесс инициализации LCD продолжается достаточно долго). Почему через некоторое время загорается светофор?

Не закрывая VMLAB вернитесь в компилятор CVAVR .После команды #include добавьте команду

#include // функции организации задержек

После команды lcd _ putsf (" Hello ! "); добавьте команды:

delay _ ms (200);

lcd _ clear (); // очистка экрана LCD

delay_ms(200);

lcd_gotoxy(5,1);

lcd_putsf("FINISH!");

В последнем цикле программы перед комментарием // Place your code here добавьте команду # asm (" wdr ") и перекомпилируйте проект.

Вернитесь в VMLAB. Сделайте глубокий рестарт и запустите Re - build all ... Как теперь выводится информация на табло дисплея? Почему не загорается светофор после запуска непрерывной симуляции?

5. Проведите исследование работы АЦП. В папке C:\CVAVR \z3 с помощью компилятора создайте файлы проекта задачи 3 на базе программы z 3. c , текст которой приведен ниже в рамке (он подробно прокомментирован в разделе 7).

Затем с помощью симулятора запишите файл Z3_vm.prj.

; файл Z 3_ vm . prj

. MICRO " ATmega 16"

. TOOLCHAIN " GENERIC "

. TARGET " z 3. hex " ; эмулируемая прошивка МК

. COFF " z 3. cof " ; файл содержит привязку

; содержимого [.hex] к коду в [__.c]

. SOURCE " z 3__. c " ; исходник на Си, на который сориентирован файл [.cof].

; это CodeVision добавляет "__" при компиляции

. TRACE ; выводить отладочную информацию в окне

; SCOPE - розовым (см. HELP эмулятора)

. CLOCK 4 meg ; частота используемого кварца

; Обозначения точек МК, к которым можно

;"подключить" эмулятор: RESET, AREF, PA0-PA7, PB0-PB7, PC0-PC7, PD0-PD7, ACO, TIM1OVF

; Для использования АЦП МК нужно подать опорное напряжение на вывод AREF - мы подадим 5 вольт питания МК. Но в VMLAB

; нельзя соединить два узла напрямую. Берем резистор на 1 Ом.

R 1 VDD AREF 1 ; резистор R1 подключен к

; узлам VDD и AREF через сопротивление 1 Ом

; опорное напряжение Vref у нас 5 вольт -

; значит при подаче 5 вольт на вход АЦП

; мы получим результат: 1111111111 (АЦП 10-ти разрядный)

; Вход0 АЦП (это вывод PA0 МК) мы подключим к

; подвижному контакту переменного резистора

; (Slider 1 в окне "Control Panel") -

; чтобы при эмуляции менять напряжение на входе АЦП.

V1 PA0 VSS SLIDER_1(0 5)

; на концах переменного резистора 0 и 5 вольт

; Эмулятор имеет 8 светодиодов -

; подключаем их к выводам порта B

D1 VDD PB0

D2 VDD PB1

D3 VDD PB2

D4 VDD PB3

D5 VDD PB4

D6 VDD PB5

D7 VDD PB6

D8 VDD PB7

; Эмулятор допускает прямое подключение светодиодов к

; плюсу питания и выводам МК - в действительности необходим

; токоограничительный резистор 430-910 Ом

; последовательно с каждым светодиодом!

.PLOT V(PA0) ; на экран осциллографа (окно "SCOPE")

; выведем напряжение на движке потенциометра

Запустив проект на симуляцию, понаблюдайте за светодиодами и осциллографом, изменяя положение движка потенциометра. Какое напряжение соответствует единице младшего разряда АЦП? Раскройте окно Peripherals и понаблюдайте за регистрами АЦП при изменении положения движка потенциометра S1. Сравните показания светодиодов и содержимое регистров ADCH и ADCL.

Просмотрите содержимое памяти программ и текст программы на ассемблере. Сколько ячеек занимает программа? По какому адресу расположен вектор прерывания по завершению процесса аналого-цифрового преобразования?

6. Запустите на симуляцию проект, подготовленный в папке z 4 (задача 4). Проект реализован на МК ATmega16.

В окне SCOPE (это виртуальный осциллограф) можно увидеть изменения напряжений на ножках МК, указанных в файле проекта - vmlab.prj . Верхняя осциллограмма – это сигнал на ножке TXD (PD 1) последовательного порта USART , по которой МК передает данные на COM порт ПК через интерфейс RS232- что передает МК мы видим в виртуальном терминале TTY панели Control Panel . Там выводится значение ШИМ (PWM ) сигнала, создаваемого на ножке PD5. Сам сигнал виден в окне SCOPE – посмотрите, как он меняется в соответствии с сообщаемыми числовыми значениями. На ножкеPD 4 формируются импульсы той же частоты с неизменной длительностью.

В файле проекта vmlab.prj к ножке PD 5 подключен простейший фильтр нижних частот (ФНЧ) из резистора и конденсатора – он преобразует ШИМ-сигнал в постоянное напряжение, которое можно увидеть в окне SCOPE (сигнал DAC ).

Формат передачи данных в примере – 8N1 (это формат по умолчанию для ПК). В таком формате передача байта начинается со "старт-бита" – это лог. "0" на ножке TXD для USART МК и +5...+15 В для COM порта ПК. Затем на ножку TXD выводятся все 8 бит передаваемого байта, начиная с нулевого. За время передачи бита приемник должен определить и запомнить этот уровень. Далее идет "стоп-бит" – это лог. "1" на ножке TXD для USART МК и -5...-15 В для COM порта ПК. Для согласования уровней между МК и ПК включают адаптер MAX232.

7 . Протестируйте работу программы, текст которой приведен ниже. Разработайте программу, реализующую световой эффект бегущего огонька без использования ассемблерных вставок.

#include

#include

void main(void){

#asm ("ldi r20,1")

#asm ("lsl r20")

#asm ("out 0x18,r20")

#asm ("ldi r20,1")}; Контрольные вопросы

    Назовите нагрузочную способность линий портов AVR.

    Какими ассемблерными вставками можно разрешать и запрещать глобально прерывания в программе для AVR на языке Си?

    Запишите результат выполнения арифметических операций: 245/37 и 245%37.

    Какими командами можно организовать задержку в одну секунду в программе для AVR на языке Си?

    Дать комментарий к команде PORTA=~(per++);

    Объявите переменную mnogo, если она может принимать значения от нуля до миллиона.

    Прокомментировать результат выполнения команды ADCSRA|=0x40;