реклама на сайте
подробности

 
 
> Полудуплексный обмен по USART, туплю ?!?
Hellper
сообщение Jan 19 2009, 20:57
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 13-08-07
Из: Санкт-Петербург
Пользователь №: 29 745



Полудуплексный обмен. Два МК. Приемники/передатчики обоих МК соединены в одну линию.
Туплю. Как отключить приемник во время передачи байта информации?

Код
#define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))

void tx_disable( void )
{
    CLEARBIT(UCSR0B, TXEN);
}
void tx_enable( void )
{
    SETBIT(UCSR0B, TXEN);
}

void rx_disable( void )
{
    CLEARBIT(UCSR0B, RXEN);
//    UCSR0B &= ~(1 << RXEN0);
}

void rx_enable( void )
{
    SETBIT(UCSR0B, RXEN);
//    UCSR0B |= (1 << RXEN0);
}

void byte_to(uint8_t byte)
{
    rx_disable();
    tx_enable();

    UDR0 = byte;
//    while (!(UCSR0A&(1 << UDRE0)))
//;
    while (!(UCSR0A&(1 << TXC0)))
;

    tx_disable();
    rx_enable();          
}


Этот код не работает !
Прошу вправить мне мозг!
smile3009.gif

Сообщение отредактировал Hellper - Jan 19 2009, 20:59


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Hellper
сообщение Jan 20 2009, 13:02
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 13-08-07
Из: Санкт-Петербург
Пользователь №: 29 745



Цитата(_Pasha @ Jan 20 2009, 13:02) *
На основании чего Вы делаете такой вывод? У Вас прием в прерывании? Приведите листинг, мож там бага smile.gif

То что на железке при отправке данных они возвращаются отправителю.
Да, прием в прерывании.
Код
ISR(USART0_RX_vect)
{
    uint8_t status;
    uint8_t data;
    status = UCSR0A;
    data = UDR0;
    if ( ( status & ( FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN ) ) == 0 )
    {
    UDR1 = data;
    };
}

тут все просто -- принять и переслать.
Цитата
P.S. Не дожидаясь окончания передачи Вы запретили передатчик (но, передача не закончилась и запрет отложен), и разрешили приёмник...


Код
void byte_to(uint8_t byte)
{
    rx_disable();

Приемник отключается. Правильно ?
Код
    tx_enable();

Передатчик включается. Да ?
Код
    UDR0 = byte;

Данные уходят в регистр передатчика. ?
Код
    while (!(UCSR0A&(1 << TXC0)))
   ;

Ожидаем полного выплевывания данных из сдвигового регистра. Верно ?
Код
    tx_disable();

Отключаем передатчик. Наверно отключаем.
Код
    rx_enable();          
}

Включаем приемник.

НО. Переданные данные возвращаются пользователю.

Добейте меня !


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Hellper   Полудуплексный обмен по USART   Jan 19 2009, 20:57
- - =GM=   Цитата(Hellper @ Jan 19 2009, 20:57) Как ...   Jan 19 2009, 23:52
- - Александр Куличок   ЦитатаКак отключить приемник во время передачи бай...   Jan 20 2009, 00:27
- - Hellper   Цитата(=GM= @ Jan 20 2009, 02:52) Надо бы...   Jan 20 2009, 06:55
|- - _Pasha   Цитата(Hellper @ Jan 20 2009, 09:55) Не р...   Jan 20 2009, 10:02
|- - Палыч   Цитата(_Pasha @ Jan 20 2009, 13:02) У Вас...   Jan 20 2009, 10:09
- - Maik-vs   Цитата(Hellper @ Jan 19 2009, 23:57) Полу...   Jan 20 2009, 07:49
- - GDI   А это дублирующие строки закоментированы.   Jan 20 2009, 09:42
- - Палыч   Цитата(Hellper @ Jan 19 2009, 23:57) Этот...   Jan 20 2009, 09:51
|- - _Pasha   Цитата(Палыч @ Jan 20 2009, 12:51) Не дож...   Jan 20 2009, 10:25
|- - Палыч   Цитата(_Pasha @ Jan 20 2009, 13:25) Так о...   Jan 20 2009, 10:33
|- - Палыч   Цитата(Hellper @ Jan 20 2009, 16:02) Добе...   Jan 20 2009, 14:51
- - Hellper   Кодvoid Byte_to(uint8_t byte) { rx_disab...   Jan 20 2009, 18:35
- - SysRq   А вы вот это вотКодif ( ( status & ...   Jan 21 2009, 18:57
- - Hellper   Цитата(SysRq @ Jan 21 2009, 21:57) А вы в...   Jan 21 2009, 20:18
- - SysRq   Цитата(Hellper @ Jan 20 2009, 16:02) инте...   Jan 21 2009, 22:02
- - Hellper   Цитата(SysRq @ Jan 22 2009, 01:02) Покажи...   Jan 22 2009, 07:22
|- - Палыч   Бегло пробежал взглядом программы... В Buffer_to_c...   Jan 22 2009, 09:24
- - Hellper   Цитата(Палыч @ Jan 22 2009, 12:24) Бегло ...   Jan 22 2009, 09:35
- - SysRq   Цитата(Палыч @ Jan 22 2009, 12:24) Это не...   Jan 23 2009, 21:00


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 12:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01472 секунд с 7
ELECTRONIX ©2004-2016