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

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

11.04.2012, 22:29. Показов 15579. Ответов 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
Ответ Создать тему
Новые блоги и статьи
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru