Добавлю свои 5 капель:
Пример программы на С (IAR) для работы с UART:
#include <iom8.h>
#define Led_on() PORTC |= 0x01 // включение светодиода
#define Led_off() PORTC &= ~0x01 // выключение светодиода
// Отправка байта
//
void rs_out(unsigned char byte) {
while ( !( UCSRA & (1<<UDRE)) );
UDR = byte;
}
// Прием байта
//
unsigned char rs_in(void) {
while ( !(UCSRA & (1<<RXC));
return UDR;
}
// Основная программа
//
void main(void) {
unsigned char d;
// инициализация портов
DDRC = 0x01; PORTC = 0x00; // PC0 - выход
DDRD = 0x02; PORTD = 0x00; // RXD - вход, TXD выход
// инициализация UART
UBRRH = 0;
UBRRL = 51; // скорость 9600 бод для кварца 8МГц
USCRB = (1<<RXEN)|(1<<TXEN); // разрешаем прием и передачу
UCSRC = (1<<URSEL)|(3<<UCSZ0);
// Цикл приема отправки
while(1) {
d = rs_in(); // Принимаем байт
rs_out(~d); // инвертируем и отправляем (для наглядности)
if (d == 0x10) Led_on(); // пришло 0x10 - зажигаем
if (d == 0x20) Led_off(); // пришло 0x20 - гасим
}
}
Писал по памяти, но должно работать. Если что-то не так, сообщите, будем править
Схемотехника:
- на PC.0 контроллера вешаем светодиод ч/з резистор 560 Ом на землю
- ноги PD.0, PD.1 (RXD и TXD) ч/з преобразователь уровней TTL-RS-232 (типа AD202) к компьютеру
- кварц 8МГц (можно internal RC-osc с той же частотой)
На копьютере удобно использовать программу типа ComPortToolkit (кажется так) для отправки и приема байтов.
Ну и удачи конечно же. Вопросы - обращайтесь.