roboforum.ru

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

Помогите с UART

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

AlexNail » 30 мар 2011, 17:09

dccharacter писал(а):Пример по ссылке, которую тебе лень читать:

Код: Выделить всёРазвернуть
#include <p24fj128ga010.h>
#define DELAY  16000
main()
{
// инициализация управляющих регистров
TRISA = 0xff00;     // Выводы 0..7 порта PORTA настраиваем как выходы
T1CON = 0x8030;     // TMR1 включен, предделитель 1:256, Tclk/2

// главный цикл приложения
while(1)
{
   // 1. Включаем выводы 0-7 и ждём 1/4 секунды
   PORTA = 0xff;
   TMR1 =  0;          // обнуляем счётчик
   while (TMR1 < DELAY) { } // просто ждём

   // 2. Выключаем все выводы и ждём 1/4 секунды
   PORTA = 0x00;
   TMR1 =  0;            // обнуляем счётчик
   while ( TMR1 < DELAY) { } // просто ждём

  } // главный цикл
} // main

мне не лень читать, просто к моей задаче это не сильно имеет отношение, я в этом вопросе не могу разобраться, а еще
дополнительная инфа меня совсем запутает.

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

dccharacter » 30 мар 2011, 17:16


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

AlexNail » 30 мар 2011, 18:33

Вот кусок кода, который не хочет компилироваться, не могу понять чего не хватает. По идее при этом он должен
работать (так написано в ДШ) принимать и отсылать данные.
Код: Выделить всёРазвернуть
void main(void)
{
        unsigned char USART_R(void) //№1
           
            {
                While(!(UCSRA&(1<<RXC)));
                return UDR;
            }

        void USART_T(unsigned char data) //№2
           
            {
                While(!(UCSRA&(1<<UDRE)));
                UDR=data;
            }           

после компиляции выдает 2 ошибки:
declaration syntax error (строка №1)
must declare first in block (строка №2)

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

dccharacter » 30 мар 2011, 19:43

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

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

AlexNail » 30 мар 2011, 23:21

dccharacter писал(а):Ты располагаешь объявление одной функции внутри другой. Почитай учебник по Си или курс proavr.narod.ru

Да? Так вроде в даташит написано. Как правильно?

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

dccharacter » 31 мар 2011, 00:02

в даташите не может быть написано как правильно объявлять функции. Это может быть написано в учебнике по Си или на сайте proavr.narod.ru

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

AlexNail » 31 мар 2011, 00:09

Так помоги разобраться, я же не просто так спрашиваю, у меня не получаеться.

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

dccharacter » 31 мар 2011, 00:19

AlexNail писал(а):Так помоги разобраться, я же не просто так спрашиваю, у меня не получаеться.

Так я и стараюсь помочь, изо всех сил стараюсь донести, что лучше день потерять, потом за пять минут долететь! Т.е. почитать учебник по Си или сайт proavr.narod.ru.

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

AlexNail » 31 мар 2011, 00:30

dccharacter писал(а):
AlexNail писал(а):Так помоги разобраться, я же не просто так спрашиваю, у меня не получаеться.

Так я и стараюсь помочь, изо всех сил стараюсь донести, что лучше день потерять, потом за пять минут долететь! Т.е. почитать учебник по Си или сайт proavr.narod.ru.

прочитал, не один раз, не могу понять и все. Если не хочешь помочь, не трать время на болтавню.

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

Radist » 31 мар 2011, 06:24

Ну я примерно так и предполагал: на курс лекций ТС уже отправили. Но он упорствует: я все прочитал и нифига не понял, сделайте наконец за меня, а не болтайте. Вывод прост: ТС не хочет учиться. А ведь вся инфа перед ним: действительно, в даташитах на авр есть инициализация, прием и передача как на асме, так и на Си. Интересно чем дело кончится: какой-нибудь добряк не выдержит и напишет ему код / ТС соберет силы и разберется / тема завянет.

ЗЫ. Когда я в далеком студенчестве разбирался с уартом, у меня тоже не сразу заработало. Но я разобрался за выходные сам. Тогда интернет был редкостью, у меня был только даташит, терминалка, комп, руки и голова. Удачи.

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

avr123.nm.ru » 31 мар 2011, 09:19

AlexNail писал(а):я и прошу пример кода, для дальнейшего изучения и пробы. Спасибо.


Пример краткого курса по AVR - www.proavr.narod.ru/z5.htm - использование UART в AVR - www.proavr.narod.ru/z4.htm

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

AlexNail » 31 мар 2011, 13:54

Radist писал(а):Ну я примерно так и предполагал: на курс лекций ТС уже отправили. Но он упорствует: я все прочитал и нифига не понял, сделайте наконец за меня, а не болтайте. Вывод прост: ТС не хочет учиться. А ведь вся инфа перед ним: действительно, в даташитах на авр есть инициализация, прием и передача как на асме, так и на Си. Интересно чем дело кончится: какой-нибудь добряк не выдержит и напишет ему код / ТС соберет силы и разберется / тема завянет.

ЗЫ. Когда я в далеком студенчестве разбирался с уартом, у меня тоже не сразу заработало. Но я разобрался за выходные сам. Тогда интернет был редкостью, у меня был только даташит, терминалка, комп, руки и голова. Удачи.

В том то все и дело, что "курс лекции" (который был прочитан, не один раз) основан тоже на примере, и если я его использую, то ничего не получаеться, поэтому я и пытаюсь разобраться НА СВОИХ конкретных примерах. А то что Вы смогли сами разобраться, вам +. Может я не могу пока правильно сформулировать свой вопрос, поэтому и прошу пример КОДа, может это мне поможет или что то в этом роде. И потом вместо помощи я слышу одни упреки (для чего тогда этот форум?).
Огромное спасибо авр123, у него хороший курс, но многие моменты из это курса я понял, а что то нет. И те вопросы которые у меня возникают, я и пытаюсь разобрать.
И не думайте что я не ЧИТАЮ. Как раз наоборот.

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

dccharacter » 31 мар 2011, 14:02

НУ ТАК ЧИТАЙ: let me google that for you: attiny2313 uart example первая же ссылка

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

AlexNail » 31 мар 2011, 14:36

dccharacter писал(а):НУ ТАК ЧИТАЙ: let me google that for you: attiny2313 uart example первая же ссылка

А ты сам смотрел, что там? то что там есть не работает!!! и непонятно как должно работать!

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

dccharacter » 31 мар 2011, 14:55

Ты вообще что-ли %:"№;№";?

Там вот что:
Code:
Код: Выделить всёРазвернуть
#include <avr/io.h>
#include <avr/interrupt.h>

/* Prototypes */
void InitUART (unsigned char baudrate);
unsigned char ReceiveByte (void);
void TransmitByte (unsigned char data);


/* --------------------------------------------------------------
Main - program that recieves a character then transmits back the next character. 
An example would be if you send in an A, the chip will return a B
---------------------------------------------------------------- */
int
main (void)
{
  unsigned char i;
  InitUART (95);     /* Set the baudrate to
2400 bps using a 3.6846MHz crystal */
  while (1)
    {
      TransmitByte (ReceiveByte () + 1);       
/* Echo the received character + 1.  Example send in A then send out B */
      for (i = 0; i < 200; i++);
    }
}

/* Initialize UART */
void
InitUART (unsigned char baudrate)
{
  /* Set the baud rate */
  UBRRL = baudrate;

  /* Enable UART receiver and transmitter */
  UCSRB = (1 << RXEN) | (1 << TXEN);

  /* set to 8 data bits, 1 stop bit */
  UCSRC = (1 << UCSZ1) | (1 << UCSZ0);

}

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


Rambler\'s Top100 Mail.ru counter