Небольшое вступление... Микроконтроллеры серии ATmega8L рассчитаны на широкий диапазон питающих напряжений от 2,7 до 5,5 вольт. Поэтому для питания этого микроконтроллера достаточно двух "свежих" батареек 2х1,5В с суммарным напряжением 3 вольта! Не забывайте что напряжение превышающее верхний порог 5,5В испортит микроконтроллер! Далее, в схемах часто можно видеть подключение вывода сброса (выв.1.) с использованием резистора и конденсатора для формирования импульса сброса. Но это совершенно не обязательно в простейших схемах. Потому что схема сброса уже встроена в микроконтроллер!
Многие начинающие при освоении микроконтроллеров не знают, что подключать внешний кварцевый резонатор для задания частоты вовсе не обязательно. В микроконтроллерах серии ATmega есть встроенный генератор, частоту которого можно выставить непосредственно в программе. Для схем и разработок где высокая стабильность не требуется подключение внешнего кварцевого резонатора не обязательно!
Схема управления кнопкой проста. Необходимо соединить выводы строго по схеме и подключить светодиод для индикации срабатывания кнопки.
Добавлено (14.05.2011, 20:59)
---------------------------------------------
Теперь разберём алгоритм работы. Сразу после включения светодиод светиться не будет. При первом нажатии кнопки светодиод зажжётся, при последующем нажатии светодиод будет гаснуть.
Особенность подключения кнопки в том, что она включена без так называемого подтягивающего резистора. Или точнее резистора устанавливающего начальный потенциал на ножке микроконтроллера до нажатия кнопки. Вообще такой резистор используется только потому что ножка микроконтроллера не должна "висеть в воздухе", то есть быть не подключенной. Не забывайте. что ножка сконфигурирована программно на вход. Но в нашей программе, мы выполним небольшой трюк! А вернее совершенно простое программное подключение внутреннего резистора для кнопки.
Добавлено (14.05.2011, 21:14)
---------------------------------------------
аппаратные прерывания организовать не сложно. Но нужно учесть что одной строчкой кода в BAscom они не вызываются.
Так для разрешения прерывания на ножке микроконтроллера необходимо:
-указать на какой потенциал должна произойти реакция (положительный или отрицательный);
-задать метку на которую будет переходить программа при возникновении прерывания;
-разрешить глобальные прерывания;
-разрешить прерывания на физической ножке микроконтроллера;
Только после соблюдения этих условий произойдёт программное прерывание!
Вот часть кода осуществляющего указанное выше..
Config Int0 = Falling 'разрешаем прерывания по спаду напряжения On Int0 Perekluch1
On Int0 Perekluch1 'задаём метку перехода по прерыванию
Enable Interrupts 'разрешаем глобальные прерывания
Enable Int0 'разрешаем прерывания на ножке int0
ВАЖНО! Прерывание-это остановка выполнения кода программы на очень короткое время. Во время прерывания происходит опрос указанного вывода сконфигурированого как вход. И переход на метку подпрограммы. Запомните код в подпрограмме должен быть минимальным. Потому что пока он обрабатывается программа стоит! Лучшим вариантом будет размещение там флагов меняющих своё состояние и не стоит размещать вычисления!
Далее будет приведена программа полностью и в уже скомпилированном HEX-коде.