С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/53: Рейтинг темы: голосов - 53, средняя оценка - 4.89
11 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 49

Инициализация USART для ATtiny2313

11.04.2012, 22:29. Показов 15602. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане и доброго времени суток.
Я пытался инициализировать Usart на контроллере attiny2313, прочитал для этого даташиты на него русский и английский, увидел несколько функций инициализации, написал их, но кажется они что-то забыли, т.к. Code Vision AVR показывает ошибки. Может есть другой способ инициализации без функции? Здесь 2 ошибки, он не знает, что такое UBBRH и UBBRL, но я так понял это из-за неизвестных без знаковых переменных.
вот код
C
1
2
3
4
5
6
7
8
9
#include <tiny2313.h>
#include <stdio.h>
void USORT_init(unsigned int boud)  // функция инициализации USORT
{
    UBBRH = (unsigned char)(boud>>8); // задаем скорость
    UBBRL = (unsigned char)boud;     // в бодах, т.е. бит\с
    UCSRB = (1<<TXEN)|(1<<RXEN);    // разрешаем передачу и прием
    UCSRC = (1<<USBS)|(3<<UCSZ0);   // задаем формат кадра сигнала
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.04.2012, 22:29
Ответы с готовыми решениями:

USART на ATtiny2313 (прием и передача)
Доброго всем времени суток. Возникла задача : принять и передать слово, по средствам МК тини 2313. На входе приемника и на выходе...

USART interrupt ATTINY2313, необходима консультация
необходима консультация по настройкам и правильному коду для прерываний по USORT, на данный момент настройки таковы (для ATTINY2313;...

attiny2313+usart, продолжительность посылки и мусор
Пытаюсь научить attiny2313 на Pinboard II (т.е. через FT2332+usb) писать отладочные сообщения по usart в терминал. Результат: на терминал...

11
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
11.04.2012, 22:55
А попробуй так. По мойму просто невнимательность.
C
1
2
UBRRH = (unsigned char)(boud>>8); // задаем скорость
UBRRL = (unsigned char)boud;
Цитата Сообщение от Pyls Посмотреть сообщение
Может есть другой способ инициализации без функции?
Перенеси код инициации(тот что в функции) в начало программы, до начала бесконечного цикла.
1
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
11.04.2012, 22:56
Code Vision AVR
в нем есть такая вещь как CodeWizardAVR и его меню:

(попробуйте)
1
11 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 49
12.04.2012, 00:29  [ТС]
Да, я видел такую менюшку, это если создать проект и задать начальные настройки, и тогда он вставляет ассемблерные вставки, но я им ни разу не пользовался. Мне проще было с нуля написать...
Хорошо я попробую, но не совсем понимаю как он действует, надеюсь получится. Спасибо большое

Добавлено через 3 минуты
Цитата Сообщение от Grey Посмотреть сообщение
А попробуй так. По мойму просто невнимательность.
C
1
2
UBRRH = (unsigned char)(boud>>8); // задаем скорость
UBRRL = (unsigned char)boud;
Перенеси код инициации(тот что в функции) в начало программы, до начала бесконечного цикла.
т.е. сделать как глобальные переменные или как #define ?
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
12.04.2012, 07:34
Хорошо я попробую, но не совсем понимаю как он действует
может стоит наконец-таки открыть инструкцию по пользованию IDE? Ведь на русском есть.
1
11 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 49
12.04.2012, 07:38  [ТС]
Есть, но там все не последовательно, иногда даже кажется спутано. Но я посмотрю!
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
12.04.2012, 18:49
Цитата Сообщение от Pyls Посмотреть сообщение
т.е. сделать как глобальные переменные или как #define ?
Можно и так попробовать. Но я думал записать их после объявления переменных.
1
11 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 49
13.04.2012, 22:06  [ТС]
Ну вот я впринципе немного подредактировал, вроде выглядит более прилично и правильно
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <tiny2313.h>
#include <stdio.h>
#define speed XTAL/(16*baudrate)-1 // Вычесление значения для регистра скoр.
#define SET_B(x) |= (1<<x) // Установить бит
#define CLR_B(x) &=~(1<<x) // Сбросить бит
int XTAL = 8000000; // Рабочая частота контроллера в Гц
int baudrate = 9600; // Скорость передачи данных в бит/с
 
 
 
void USORT_init(void) // функция инициализации USORT
{
 
UBRR = speed; // задаем скорость
 
UCSRB SET_B(TXEN); // разрешаем передачу - установка бита TXEN в 1
UCSRC SET_B(USBS); // один стоповый бит 
UCSRC = (3<<UCSZ0); // формат кадра - 8 бит
}
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
13.04.2012, 22:48
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <tiny2313.h>
 
// USORT Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];
 
#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif
 
// This flag is set on USORT Receiver buffer overflow
bit rx_buffer_overflow;
 
// USORT Receiver interrupt service routine
interrupt [USORT_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer[rx_wr_index]=data;
   if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
   if (++rx_counter == RX_BUFFER_SIZE)
      {
      rx_counter=0;
      rx_buffer_overflow=1;
      };
   };
}
 
 
// USORT Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];
 
#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif
 
// USORT Transmitter interrupt service routine
interrupt [USORT_TXC] void usart_tx_isr(void)
{
if (tx_counter)
   {
   --tx_counter;
   UDR=tx_buffer[tx_rd_index];
   if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
   };
}
 
 
 
 
void USORT_init(void) // ôóíêöèÿ èíèöèàëèçàöèè USORT
{
 
// USORT initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USORT Receiver: On
// USORT Transmitter: On
// USORT Mode: Asynchronous
// USORT Baud Rate: 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x06;
}
 
 
void main(void)
{
USORT_init();
 
#asm("sei")
 
while (1)
      {
 
      };
}
1
11 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 49
13.04.2012, 22:49  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void USORT_init(void) // ôóíêöèÿ èíèöèàëèçàöèè USORT
{
 
// USORT initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USORT Receiver: On
// USORT Transmitter: On
// USORT Mode: Asynchronous
// USORT Baud Rate: 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x06;
}
А так намного проще
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
13.04.2012, 22:55
А так намного проще
вот только нет функций приема и передачи, полный код см. выше.
1
11 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 49
14.04.2012, 22:41  [ТС]
Насчет функций приема и передачи, я в даташите гляну. Её постараюсь записать как функцию вызываемую в главной функции. Завтра выложу, что получилось

Добавлено через 16 часов 1 минуту
Еще раз прошу прощения, но я не совсем понимаю как работает этот код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];
 
#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif
 
// This flag is set on USORT Receiver buffer overflow
bit rx_buffer_overflow;
 
// USORT Receiver interrupt service routine
interrupt [USORT_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer[rx_wr_index]=data;
   if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
   if (++rx_counter == RX_BUFFER_SIZE)
      {
      rx_counter=0;
      rx_buffer_overflow=1;
      };
   };
}
 
 
// USORT Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];
 
#if TX_BUFFER_SIZE<256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif
 
// USORT Transmitter interrupt service routine
interrupt [USORT_TXC] void usart_tx_isr(void)
{
if (tx_counter)
   {
   --tx_counter;
   UDR=tx_buffer[tx_rd_index];
   if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
   };
}
Главное, что понял - это прием и передача на 8 бит. С буффером для данных

Добавлено через 7 часов 29 минут
ну вот что у меня получилось на передачу
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <tiny2313.h>
#include <stdio.h>
#define speed XTAL/(16*baudrate)-1 // Вычесление значения для регистра скoр.
#define SET_B(x) |= (1<<x) // Установить бит
#define CLR_B(x) &=~(1<<x) // Сбросить бит
#define XTAL 8000000 // Рабочая частота контроллера в Гц
#define baudrate 9600 // Скорость передачи данных в бит/с 
 
void USORT_init(void) // функция инициализации USORT
{
UBRR = speed; // задаем скорость
UCSRB SET_B(TXEN); // разрешаем передачу - установка бита TXEN в 1
UCSRC SET_B(USBS); // один стоповый бит 
UCSRC = (3<<UCSZ0); // формат кадра - 8 бит
}
 
void USORT_snt(unsigned char data)
{
while(!(UCSRA & (1<<UDRE)) ); // ждем пока очистится буфер передачи
// как только UDRE установится
UDR = data; // начать передачу данных 
}
 
void main(void) 
{
unsigned char data = 0xFF;
USORT_init();
USORT_snt(data);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2012, 22:41
Помогаю со студенческими работами здесь

Attiny2313 + mcp2510 (mcp2515) инициализация, ассемблер
Здравствуйте! Есть MCP2510 подключенный через USI порт attiny2313. Нужно отправить mcp2510 команду READ (0x03), адрес запрашиваемого...

xmega: usart - какой глубины буфер в USART?
Взялся тут &quot;запилить&quot; на xmego32a4 мультиплексор двух rs232 в один rs485. Все как бы получилось и почти работает (надо код почистить и...

передача данных с 2 портов can и 1 usart в usart
Доброго времени суток форумчане! Пытаюсь написать код для stm32f4disko с помощью которого можно читать данные с 2 can и usart. насколько я...

Программа для ATtiny2313
/* * AVRGCC3.c * * Created: 02.02.2012 8:42:25 * Author: User */ #include &lt;avr/io.h&gt; #include...

Контроль ШД для стеклоочистителя на базе МК Attiny2313
Здравствуйте, знатоки. Подскажите пожалуйста. Необходимо организовать подобие автомобильных стеклоочистителей на базе МК Attiny2313. У меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru