Технический форум по робототехнике.
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
мне не лень читать, просто к моей задаче это не сильно имеет отношение, я в этом вопросе не могу разобраться, а еще
дополнительная инфа меня совсем запутает.
dccharacter » 30 мар 2011, 17:16
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)
dccharacter » 30 мар 2011, 19:43
Ты располагаешь объявление одной функции внутри другой. Почитай учебник по Си или курс proavr.narod.ru
AlexNail » 30 мар 2011, 23:21
dccharacter писал(а):Ты располагаешь объявление одной функции внутри другой. Почитай учебник по Си или курс proavr.narod.ru
Да? Так вроде в даташит написано. Как правильно?
dccharacter » 31 мар 2011, 00:02
в даташите не может быть написано как правильно объявлять функции. Это может быть написано в учебнике по Си или на сайте proavr.narod.ru
AlexNail » 31 мар 2011, 00:09
Так помоги разобраться, я же не просто так спрашиваю, у меня не получаеться.
dccharacter » 31 мар 2011, 00:19
AlexNail писал(а):Так помоги разобраться, я же не просто так спрашиваю, у меня не получаеться.
Так я и стараюсь помочь, изо всех сил стараюсь донести, что лучше день потерять, потом за пять минут долететь! Т.е. почитать учебник по Си или сайт proavr.narod.ru.
AlexNail » 31 мар 2011, 00:30
dccharacter писал(а):AlexNail писал(а):Так помоги разобраться, я же не просто так спрашиваю, у меня не получаеться.
Так я и стараюсь помочь, изо всех сил стараюсь донести, что лучше день потерять, потом за пять минут долететь! Т.е. почитать учебник по Си или сайт proavr.narod.ru.
прочитал, не один раз, не могу понять и все. Если не хочешь помочь, не трать время на болтавню.
Radist » 31 мар 2011, 06:24
Ну я примерно так и предполагал: на курс лекций ТС уже отправили. Но он упорствует: я все прочитал и нифига не понял, сделайте наконец за меня, а не болтайте. Вывод прост: ТС не хочет учиться. А ведь вся инфа перед ним: действительно, в даташитах на авр есть инициализация, прием и передача как на асме, так и на Си. Интересно чем дело кончится: какой-нибудь добряк не выдержит и напишет ему код / ТС соберет силы и разберется / тема завянет.
ЗЫ. Когда я в далеком студенчестве разбирался с уартом, у меня тоже не сразу заработало. Но я разобрался за выходные сам. Тогда интернет был редкостью, у меня был только даташит, терминалка, комп, руки и голова. Удачи.
avr123.nm.ru » 31 мар 2011, 09:19
AlexNail писал(а):я и прошу пример кода, для дальнейшего изучения и пробы. Спасибо.
Пример краткого курса по AVR -
www.proavr.narod.ru/z5.htm - использование UART в AVR -
www.proavr.narod.ru/z4.htm
AlexNail » 31 мар 2011, 13:54
Radist писал(а):Ну я примерно так и предполагал: на курс лекций ТС уже отправили. Но он упорствует: я все прочитал и нифига не понял, сделайте наконец за меня, а не болтайте. Вывод прост: ТС не хочет учиться. А ведь вся инфа перед ним: действительно, в даташитах на авр есть инициализация, прием и передача как на асме, так и на Си. Интересно чем дело кончится: какой-нибудь добряк не выдержит и напишет ему код / ТС соберет силы и разберется / тема завянет.
ЗЫ. Когда я в далеком студенчестве разбирался с уартом, у меня тоже не сразу заработало. Но я разобрался за выходные сам. Тогда интернет был редкостью, у меня был только даташит, терминалка, комп, руки и голова. Удачи.
В том то все и дело, что "курс лекции" (который был прочитан, не один раз) основан тоже на примере, и если я его использую, то ничего не получаеться, поэтому я и пытаюсь разобраться НА СВОИХ конкретных примерах. А то что Вы смогли сами разобраться, вам +. Может я не могу пока правильно сформулировать свой вопрос, поэтому и прошу пример КОДа, может это мне поможет или что то в этом роде. И потом вместо помощи я слышу одни упреки (для чего тогда этот форум?).
Огромное спасибо авр123, у него хороший курс, но многие моменты из это курса я понял, а что то нет. И те вопросы которые у меня возникают, я и пытаюсь разобрать.
И не думайте что я не ЧИТАЮ. Как раз наоборот.
dccharacter » 31 мар 2011, 14:02
AlexNail » 31 мар 2011, 14:36
А ты сам смотрел, что там? то что там есть не работает!!! и непонятно как должно работать!
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;
}