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

 
 
> Как передать по USART?, Вместо числа приходит точка
Xenom0rph
сообщение Nov 23 2008, 18:29
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646



В устройстве требуются простенькие часы.
Я задал структуру:
Код
typedef struct{
unsigned char sec;   //Cекунды
unsigned char min;   //Минуты
unsigned char hour;  //Часы
}time;

time t;


Прерывание по переполнению таймера.

Код
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
if (++t.sec==60)
{
  t.sec=0;
  if (++t.min==60)
  {
   t.min=0;
   if (++t.hour == 24)
   {
    t.hour =0;
   }
  }
}    

}


Допустим, отправляю UDR = t.sec. (t.sec к примеру = 7)
И на выходе я получаю символ “.” C хекс кодом 07, и так с любым числом, всегда точки.

Вот вопрос как передать это по USART?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Nov 23 2008, 23:17
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



В лоб:
Код
void send_value(unsigned char value)
{
    while(!(UCSRA & _BV(UDRE)));
    
    UDR = value / 10 + (unsigned char) 0x30;
    
    while(!(UCSRA & _BV(UDRE)));
    
    UDR = value % 10 + (unsigned char) 0x30;
}
Go to the top of the page
 
+Quote Post
Xenom0rph
сообщение Nov 24 2008, 09:17
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646



Цитата(SysRq @ Nov 24 2008, 02:17) *
В лоб:
Код
void send_value(unsigned char value)
{
    while(!(UCSRA & _BV(UDRE)));
    
    UDR = value / 10 + (unsigned char) 0x30;
    
    while(!(UCSRA & _BV(UDRE)));
    
    UDR = value % 10 + (unsigned char) 0x30;
}


Спасибо, то что надо, ещё сразу вопрос
while(!(UCSRA & _BV(UDRE))); эта строка в не для CVAVR!
нашел замену (пример из книги)
Код
#DEFINE UDRE 5
while(!(UCSRA & (1<<UDRE)));


c ней у меня вообще ничего не передаёт!

сделал вот так while(UCSRA.5 != 1) {}
Все передает, но меня мучает вопрос правильно ли это? Незнаю как это узнать! Но вроде передает без ошибок.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Xenom0rph   Как передать по USART?   Nov 23 2008, 18:29
- - rezident   Если вы хотите получить в терминале символьное зна...   Nov 23 2008, 18:40
|- - Xenom0rph   Цитата(rezident @ Nov 23 2008, 21:40) Есл...   Nov 23 2008, 22:45
- - Aesthete Animus   ...а для этого изучите например функции *printf. К...   Nov 23 2008, 20:58
|- - shasik   Цитата(SysRq @ Nov 24 2008, 01:17) В лоб:...   Nov 24 2008, 11:19
- - SysRq   МК у вас какой? Смысл этой строки - проверить своб...   Nov 24 2008, 10:14
|- - Xenom0rph   Цитата(SysRq @ Nov 24 2008, 13:14) МК у в...   Nov 24 2008, 13:00
|- - Paulina   или так (без деления): Кодvoid uchartostr(unsi...   Nov 24 2008, 14:55
|- - SysRq   Цитата(Paulina @ Nov 24 2008, 17:55) или ...   Nov 24 2008, 15:44
|- - Paulina   Цитата(SysRq @ Nov 24 2008, 18:44) GCC им...   Nov 24 2008, 15:48
- - Okada   В продолжение темы. Начал изучать AVR. Есть ATmeg...   Feb 6 2010, 18:38
- - smac   Цитата(Okada @ Feb 6 2010, 21:38) UDRE не...   Feb 6 2010, 21:24
- - Okada   Цитата(smac @ Feb 7 2010, 00:24) Вы навер...   Feb 9 2010, 05:42
- - Okada   Цитата(Okada @ Feb 9 2010, 08:42) Железка...   Feb 10 2010, 06:49


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 07:53
Рейтинг@Mail.ru


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