Читаем Микроконтроллеры AVR: от простого к сложному полностью

#include

#include

#include

#ifdef AVR_ATmega103

   #define AVR_MEGA 1

#else

   #ifdef AVR_ATmega603

      #define AVR_MEGA 2

   #else

     #ifdef AVR_ATmega161

       #define AVRMEGA 3

     #else

       #define AVR_MEGA 0

     #endif

   #endif

#endif

typedef unsigned char u08;

SIGNAL(SIG_INTERRUPTO) /* Обработчик внешнего прерывания into */

{

    register u08 led = mp(PORTB);

      if (led & 1)

         led &=  ~0x0f; else

      led |= 0x0f;

      out(led, PORTB); /* Зажечь светодиоды */

}

SIGNAL(SIG_INTERRUPT1) /* Обработчик внешнего прерывания int1 */

{

   register u08 led = inp(PORTB);

   if (led & 0x80)

      led &= ~0xf0;

   else

      led |= 0xf0;

   outp(led, PORTB); /* Зажечь светодиоды */

}

int main(void)

{

   outp(0xff, DDRB); /* Все линии порта В на вывод (светодиоды) */

   outp(0x00, DDRD); /* Все линии порта D на ввод (кнопки) */

#if AVR_MEGA

   outp((1< /* Разрешить внешние прерывания into, inti */

#else

   outp((1< /* Разрешить внешние прерывания into, inti */

   outp((1< /* По спаду: int0, no нарастанию: int1 */

#endif

   sei(); /* Разрешить прерывания */

   for (;;) {} /* Бесконечный цикл */

}

Иллюстрация применения UART

Автор: Volker Oth.

Иллюстрация применения UART. Работает совместно с программой terminal или подобной.

Формат UART: 9600 бод, 8 битов, 1 стоп-бит, без проверки четности.

Текст программы:

#include

#include

#include

#define F_CPU 4000000 /* 4 МГц */

#define UART_BAUD_RATE 9600 /* 9600 бод */

#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*161)-1)

typedef unsigned char u08;

typedef char s08;

typedef unsigned short u16;

typedef short s16;

static volatile u08 *uart_data_ptr;

static volatile u08 uart_counter;

SIGNAL(SIG_UART_TRANS) /* Обработчик прерывания UART txd готов */

{

   uart_data_ptr++;

   if (--uart_counter)

       outp(*uart_data_ptr, UDR); /* Записать байт в буфер данных */

}

SIGNAL(SIG_UART_RECV) /* Обработчик прерывания "прием завершен" */

{

    register char led;

   led = inp(UDR); /* Прочитать байт из буфера данных UART */

   outp(~led, PORTB); /* Отобразить полученный байт на светодиодах, подключенных к порту В */

}

void uart_send(u08 *buf, u08

{

   if (!uart_counter) { «Записать первый байт в буфер данных */

      uart_data_ptr = buf;

      uart_counter = size;

      outp(*buf, UDR);

   }

}

void uart_init(void) /* Инициализировать UART */

{ /* разрешить прерывания RxD/TxD */

    outp((1<

    /* установить скорость */

    outp((uD8)UART_BAUD_SELECT, UBRR);

}

int main(void)

}

   outp(0xff,DDRB); /* Все линии порта В на вывод */

   outp(0x00, PORTB); /* Зажечь светодиоды */

   uart_init();

   sei(); /* Разрешить прерывания */

   for (;;) { /* Бесконечный цикл */

       uart_send("Serlal Data from AVR received###", 32);

   }

}

Работа с EEPROM и UART

Автор: Volker Oth.

Читает и записывает EEPROM. При возникновении прерывания UART «передача завершена», содержимое EEPROM пересылается на компьютер. После получения байта от компьютера прерывание «прием завершен» отображает полученный байт на светодиодах и сохраняет его в EEPROM. Формат UART: 9600 бод, 8 битов, 1 стоп-бит, без проверки четности.

Перейти на страницу:

Все книги серии Библиотека инженера

Похожие книги

Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

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

Чарльз Платт

Радиоэлектроника / Технические науки
Электроника для начинающих
Электроника для начинающих

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

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки
Искусство схемотехники. Том 3 (Изд.4-е)
Искусство схемотехники. Том 3 (Изд.4-е)

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

Пауль Хоровиц , Уинфилд Хилл

Техника / Радиоэлектроника