roboforum.ru

Технический форум по робототехнике.
Текущее время: 03 дек 2024, 17:45

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 31 мар 2011, 14:57 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
я прям тут из Твери слышу раскаты от взрывов мозгов...

а по теме вопроса:
Цитата:
This program is written C and should would with the gcc compiler

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 31 мар 2011, 15:01 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Myp писал(а):
should would

should would - это правильно, красиво и православно.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 31 мар 2011, 15:13 
Не в сети

Зарегистрирован: 21 мар 2011, 17:06
Сообщения: 31
Откуда: АНАПА
dccharacter писал(а):
Ты вообще что-ли %:"№;№";?

Там вот что:
Code:
Код:
main (void)
/* Read and write functions */
unsigned char
ReceiveByte (void)
{
  /* Wait for incomming data */
  while (!(UCSRA & (1 << RXC)));

  /* Return the data */
  return UDR;
}

void
TransmitByte (unsigned char data)
{
  /* Wait for empty transmit buffer */
  while (!(UCSRA & (1 << UDRE)));

  /* Start transmittion */
  UDR = data;
}

Все верно, я точно так же прописываю функции и компилятор выдает ошибки, см. выше. Инициализацию сделал кодевижн. Так в чем у меня ошибка?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 31 мар 2011, 15:22 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
AlexNail писал(а):
Все верно, я точно так же прописываю функции и компилятор выдает ошибки, см. выше.

Поскольку ты не способен к элементарному анализу, я с тобой разговаривать прекращаю. На прощание, почувствуй разницу между этим:
Код:
void InitUART (unsigned char baudrate);
unsigned char ReceiveByte (void);
void TransmitByte (unsigned char data);

int main (void) {...}

void InitUART (unsigned char baudrate) {...}

unsigned char ReceiveByte (void) {...}

void TransmitByte (unsigned char data) {...}

и этим:
Код:
void main(void) { unsigned char USART_R(void) {...}  void USART_T(unsigned char data) { } }

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 31 мар 2011, 15:25 
Не в сети

Зарегистрирован: 05 янв 2010, 23:07
Сообщения: 283
Откуда: Красноармейск
Skype: dmitry.vladimirivich
ФИО: Дима.В.
Alex,

советую почитать

http://en.wikipedia.org/wiki/Main_function

http://en.wikipedia.org/wiki/Function_% ... B_examples


ни в коем случае не надо на на меня обижаться

просто почитав эти страницы (начиная именно с того места где откроется станица) Вам сразу станет понятно, что функция название которой начинается с void - это что то типа подпрограммы (а лучше гляньте в вики что это на самом деле) и что её нельзя объявлять (описывать что она будет делать) в главной части программы

когда Вам давали ссылки на программы для Пик итд, Вам давали намек (четко говорили) что надо посмотреть, как правильно вставлять "подпрограммы" из даташита

_________________
#define TRUE FALSE


Последний раз редактировалось Dmitri Vladimirovich 31 мар 2011, 15:38, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 31 мар 2011, 15:32 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Dmitri Vladimirovich писал(а):
Вам давали намек на то что надо посмотреть, как правильно вставлять "подпрограммы" из даташита


Ты располагаешь объявление одной функции внутри другой. Почитай учебник по Си или курс proavr.narod.ru - разве это намек?

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 31 мар 2011, 16:34 
Не в сети

Зарегистрирован: 21 мар 2011, 17:06
Сообщения: 31
Откуда: АНАПА
dccharacter писал(а):
AlexNail писал(а):
Все верно, я точно так же прописываю функции и компилятор выдает ошибки, см. выше.

Код:
void main(void) { unsigned char USART_R(void) {...}  void USART_T(unsigned char data) { } }


Я, серьезно, запутался. Т.е получаеться: функция USART_R будет выполняться в главной функции, верно? а функцию USART_T нужно обьявить за пределами главной функции. Верно?
или вытащить ее из функции USART_R (т.е. с {} запутался). верно?

Добавлено спустя 46 минут 11 секунд:
Фу вроде немного вьехал :))
Вот Код, компилятор пишет ок, но в VMLab в терминале не возвращает те символы которые пришли. Что может быть не так?
Код:
while (1)
      {   
                 USART_T(USART_R());
      };
}
            unsigned char USART_R(void)
           
            {
                while(!(UCSRA&(1<<RXC)));
                return UDR;
            };
         
           void USART_T(unsigned char data)
           
            {
                while(!(UCSRA&(1<<UDRE)));
                UDR=data;
            }           


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 31 мар 2011, 16:47 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
И почему часть новичков начинают не с начала, а сразу с USARTа или с боевых осьминогов с роборуками?
Что у вас не так, пока непонятно. Но объявления функций сделано уже нормально, значит прогресс есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 31 мар 2011, 17:47 
Не в сети

Зарегистрирован: 21 мар 2011, 17:06
Сообщения: 31
Откуда: АНАПА
HarryStar писал(а):
И почему часть новичков начинают не с начала, а сразу с USARTа или с боевых осьминогов с роборуками?
Что у вас не так, пока непонятно. Но объявления функций сделано уже нормально, значит прогресс есть.

я придумал себе задачу, USART это пока часть ее :) и пытаюсь на конкретном примере разобраться, конечно тяжело, но я думаю участники форума всетаки помогут мне :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 01 апр 2011, 05:55 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Вот именно поэтому я и пишу свои программы на асемблере, а не на Си. Сколько раз пытался выучить его по самоучителю. Простое получалось, что-то посложнее - глючило. В результате я могу читать и понимать сишные программы (не слишком заумные), а писать - нет. Как и с английским - читаю и понимаю, но не говорю и не пишу. В асемблере с уартом все просто - есть управляющие регистры, в которые надо писать данные. Их структура описана в даташите. На Си надо делать то же самое, но при этом соблюсти все условия синтаксиса, которые у разных компиляторов немного различаются. По идее хорошо было бы знать оба эти языка. Но в любом случае нужно понимание. Если есть рабочий код, решающий вашу задачу, но нет понимания как он работает - такой код пользы не принесет. Поэтому считаю что пользование всякими мастерами и визардами для новичка - это вред. Он сгенерил код, который вы не понимаете - зачем вам это надо? Чтобы написать рабочий код нужно знать КАК писать (учебник по Си) и что писать (даташит).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 01 апр 2011, 08:08 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
Radist писал(а):
Поэтому считаю что пользование всякими мастерами и визардами для новичка - это вред. Он сгенерил код, который вы не понимаете - зачем вам это надо? Чтобы написать рабочий код нужно знать КАК писать (учебник по Си) и что писать (даташит).



+100500

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 01 апр 2011, 23:45 
Не в сети

Зарегистрирован: 21 мар 2011, 17:06
Сообщения: 31
Откуда: АНАПА
Да я это прекрасно понимаю. Но все таки хотелось бы конкретнее. Мне нужна помощь, кто может помочь, помогите разобраться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 02 апр 2011, 11:38 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Сначала нужно научиться программированию, хотя бы базовому. Проблема не в UART и не в микроконтроллере, а в банальном незнании синтаксиса


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 02 апр 2011, 17:12 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
AlexNail писал(а):
Мне нужна помощь, кто может помочь, помогите разобраться.
что там - Пример краткого курса по AVR - www.proavr.narod.ru/z5.htm - использование UART в AVR - www.proavr.narod.ru/z4.htm - вам не понятно ? Конкретно что ?

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с UART
СообщениеДобавлено: 05 апр 2011, 14:51 
Не в сети
Аватара пользователя

Зарегистрирован: 08 дек 2009, 19:21
Сообщения: 404
Откуда: Й-Ола
Непонятно вот что:

в задаче есть инициализация усарта и 2 команды - putchar и getchar,

а код вижн при настройки усарта выдает еще такую лабуду

Код:
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 256
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 USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_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;
      };
   };
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// USART Transmitter buffer
#define TX_BUFFER_SIZE 256
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

// USART Transmitter interrupt service routine
interrupt [USART_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;
   };
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
   {
   tx_buffer[tx_wr_index]=c;
   if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
   ++tx_counter;
   }
else
   UDR=c;
#asm("sei")
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>


непонятную, что тут и зачем неясно и нужна лиона тоже неясно.

_________________
Ваш IP-адрес 85.140.5.459 был внесён в черный список и заблокирован. Для получения дополнительной информации перейдите по ссылке http://www.spamhaus.org/query/bl?ip=85.140.5.459.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO