roboforum.ru

Технический форум по робототехнике.

Помогите с UART

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Помогите с UART

Сообщение Myp » 31 мар 2011, 14:57

я прям тут из Твери слышу раскаты от взрывов мозгов...

а по теме вопроса:
This program is written C and should would with the gcc compiler
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Помогите с UART

Сообщение dccharacter » 31 мар 2011, 15:01

Myp писал(а):should would

should would - это правильно, красиво и православно.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Помогите с UART

Сообщение AlexNail » 31 мар 2011, 15:13

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;
}

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

Re: Помогите с UART

Сообщение dccharacter » 31 мар 2011, 15:22

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) { } }
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Помогите с UART

Сообщение Dmitri Vladimirovich » 31 мар 2011, 15:25

Alex,

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

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

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


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

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

когда Вам давали ссылки на программы для Пик итд, Вам давали намек (четко говорили) что надо посмотреть, как правильно вставлять "подпрограммы" из даташита
Последний раз редактировалось Dmitri Vladimirovich 31 мар 2011, 15:38, всего редактировалось 2 раз(а).
#define TRUE FALSE
Dmitri Vladimirovich
 
Сообщения: 283
Зарегистрирован: 05 янв 2010, 23:07
Откуда: Красноармейск
Skype: dmitry.vladimirivich
ФИО: Дима.В.

Re: Помогите с UART

Сообщение dccharacter » 31 мар 2011, 15:32

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


Ты располагаешь объявление одной функции внутри другой. Почитай учебник по Си или курс proavr.narod.ru - разве это намек?
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Помогите с UART

Сообщение AlexNail » 31 мар 2011, 16:34

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;
            }           
AlexNail
 
Сообщения: 31
Зарегистрирован: 21 мар 2011, 17:06
Откуда: АНАПА

Re: Помогите с UART

Сообщение HarryStar » 31 мар 2011, 16:47

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

Re: Помогите с UART

Сообщение AlexNail » 31 мар 2011, 17:47

HarryStar писал(а):И почему часть новичков начинают не с начала, а сразу с USARTа или с боевых осьминогов с роборуками?
Что у вас не так, пока непонятно. Но объявления функций сделано уже нормально, значит прогресс есть.

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

Re: Помогите с UART

Сообщение Radist » 01 апр 2011, 05:55

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

Re: Помогите с UART

Сообщение Duhas » 01 апр 2011, 08:08

Radist писал(а):Поэтому считаю что пользование всякими мастерами и визардами для новичка - это вред. Он сгенерил код, который вы не понимаете - зачем вам это надо? Чтобы написать рабочий код нужно знать КАК писать (учебник по Си) и что писать (даташит).



+100500
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Помогите с UART

Сообщение AlexNail » 01 апр 2011, 23:45

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

Re: Помогите с UART

Сообщение Сергей » 02 апр 2011, 11:38

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

Re: Помогите с UART

Сообщение avr123.nm.ru » 02 апр 2011, 17:12

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

Re: Помогите с UART

Сообщение к561ЛА7 » 05 апр 2011, 14:51

Непонятно вот что:

в задаче есть инициализация усарта и 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.
Аватара пользователя
к561ЛА7
 
Сообщения: 404
Зарегистрирован: 08 дек 2009, 19:21
Откуда: Й-Ола

Пред.След.

Вернуться в Микроконтроллеры

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

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