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

 
 
> Полудуплексный обмен по 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, 06:55
Сообщение #2


Местный
***

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



Цитата(=GM= @ Jan 20 2009, 02:52) *
Надо бы передатчик отключать, причём на другой стороне, а не приёмник. Приёмник пусть себе принимает.

отключать нужно именно приемник, тк ему не следует считывать то, что сам отправил.
Цитата(Александр Куличок @ Jan 20 2009, 03:27) *
Достаточно очистить бит RXEN:
Может, вместо TXEN, RXEN нужно писать TXEN0, RXEN0?

не работает. не играет никакой роли.
Код
/* USART Control Register B (generic) */
#define    RXCIE        7
#define    TXCIE        6
#define    UDRIE        5
#define    RXEN         4
#define    TXEN         3
#define    UCSZ         2
#define    UCSZ2        2       /* new name in datasheet (2467E-AVR-05/02) */
#define    RXB8         1
#define    TXB8         0

/* USART1 Control Register B - UCSR1B */
#define    RXCIE1       7
#define    TXCIE1       6
#define    UDRIE1       5
#define    RXEN1        4
#define    TXEN1        3
#define    UCSZ12       2
#define    RXB81        1
#define    TXB81        0

/* USART0 Control Register B - UCSR0B */
#define    RXCIE0       7
#define    TXCIE0       6
#define    UDRIE0       5
#define    RXEN0        4
#define    TXEN0        3
#define    UCSZ02       2
#define    RXB80        1
#define    TXB80        0


Цитата
А вместо этого следовало бы описать, что для Вас означает "не работает". Т.е. что Вы хотели получить в результате выполнения кода и что получили.

Не работает, означает, что во время передачи приемник не выключается и начинает считывать данные с линии.

Цитата
Надо бы передатчик отключать, причём на другой стороне, а не приёмник. Приёмник пусть себе принимает.


Нужно отключать именно приемник на передающей стороне.



PS Использую WinAVR-20081205


--------------------
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
|- - _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   Цитата(_Pasha @ Jan 20 2009, 13:02) На ос...   Jan 20 2009, 13:02
|- - Палыч   Цитата(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 - 08:55
Рейтинг@Mail.ru


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