|
Шпак передача данных по USART |
|
|
|
Aug 22 2011, 05:29
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 18-08-11
Пользователь №: 66 777

|
программа такая: Код #include <avr/io.h> #include <avr/interrupt.h> //Для доступа к функции sei() #include <avr/signal.h> //Для доступа к макросу INTERRUPT //Определяем одиннадцать выводимых строк (последняя - на тот случай, если был принят не цифровой символ)
char str0[] = "Zero"; char strl[] = "One"; char str2[] = "Two"; char str3[] = "Three"; char str4[] = "Four"; char str5[] = "Five"; char str6[] = "Six"; char str7[] = "Seven"; char str8[] = "Eight"; char str9[] = "Nine"; char strDefault[] = "Not digit"; unsigned char queueC, sendC; //Индексы текущего и переданного символа unsigned char queue[50]; //Очередь
ISR(USART0_TX_vect) //Подпрограмма обработки прерывания при завершении передачи очередного символа. { //Если был передан не последний символ, то передаем текущий и увеличиваем счетчик переданных данных на 1 if (queueC != sendC) UDR = queue[sendC++]; }
//Функция формирования очереди символов из строки void SendStr(char *s) { queueC =0; //Текущий символ - первый sendC = 1; //Первый символ считаем уже переданным queue[queueC++] = 0x0D; //Добавляем в конец очереди символы queue[queueC++] = 0x0A; // возврата каретки и переноса строки. Просматриваем строку и помещаем в очередь символы. while (*s) queue[queueC++] = *s++; UDR = queue[0]; //Передаем первый символ, чтобы начать процесс }
int main (void){ char с; UCR = 0x58; UBRR = 0x33; sei(); //Общее разрешение прерываний while(1) //Бесконечный цикл { if (UCR & 0x80) //Если UART принял символ от ПК,... { с = UDR; switch (с) //Анализируем символ и выводим соответствующую { //строку через UART case '0': SendStr(str0); break; case '1': SendStr(strl); break; case '2': SendStr(str2); break; case '3': SendStr(str3); break; case '4': SendStr(str4); break; case '5': SendStr(str5); break; case '6': SendStr(str6); break; case '7': SendStr(str7); break; case '8': SendStr(str8); break; case '9': SendStr (str9); break; default: SendStr(strDefault); } } } } лог ошибок такой: Цитата > "make.exe" all
-------- begin -------- avr-gcc (WinAVR 20100110) 4.3.3 Copyright © 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiling C: test3.c avr-gcc -c -mmcu=atmega16a -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./test3.lst -std=gnu99 -MMD -MP -MF .dep/test3.o.d test3.c -o test3.o In file included from test3.c:3: c:/winavr/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>." test3.c:20: warning: 'USART0_TX_vect' appears to be a misspelled signal handler test3.c: In function 'main': test3.c:37: error: stray '\361' in program test3.c:37: warning: useless type name in empty declaration test3.c:38: error: 'UCR' undeclared (first use in this function) test3.c:38: error: (Each undeclared identifier is reported only once test3.c:38: error: for each function it appears in.) test3.c:39: error: 'UBRR' undeclared (first use in this function) test3.c:45: error: stray '\361' in program test3.c:45: error: expected expression before '=' token test3.c:46: error: stray '\361' in program test3.c:46: error: expected expression before ')' token make.exe: *** [test3.o] Error 1
> Process Exit Code: 2 > Time Taken: 00:01 вот например Цитата test3.c:37: error: stray '\361' in program Код char с; что тут не так?
|
|
|
|
|
 |
Ответов
|
Aug 30 2011, 13:11
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 12-08-11
Пользователь №: 66 698

|
1 - в мэйк файле измените значение F_CPU=8000000UL на F_CPU=16000000UL. 2 - CODE #define BAUD 9600
static void initcpu(void) {
unsigned int tmp; // Declare your local variables here
// Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00; DDRA=0x00;
// Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00;
// Port C initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00;
// Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00;
// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x00; TCNT0=0x00; OCR0=0x00;
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00;
// External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;
// USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600
tmp = (F_CPU/(16 * BAUD));
UCSRA=0x00; UCSRB=0x58; UCSRC=0x86; UBRRH=(unsigned char)(tmp >> 8); UBRRL=(unsigned char)(tmp);
// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00;
} 3 - изучите даташит, начиная со страницы 146 Сори, ошибочка, строку Цитата tmp = (F_CPU/(16 * BAUD)); замените на Цитата tmp = ((F_CPU/(16 * BAUD)) - 1);
Сообщение отредактировал IgorKossak - Aug 30 2011, 17:58
Причина редактирования: [codebox]
|
|
|
|
Сообщений в этой теме
zeonix0 Шпак передача данных по USART Aug 22 2011, 05:29 777777 Вместо 'с' напиши 'c' )
У тебя пе... Aug 22 2011, 05:52 zeonix0 аЦитата38: error: 'UCR' undeclared (first ... Aug 22 2011, 05:57 777777 UCR undeclared скорее всего означает, что проект т... Aug 22 2011, 06:03 zeonix0 makefile выложить? atmega16a там все есть. Aug 22 2011, 06:08 777777 Цитата(zeonix0 @ Aug 22 2011, 10:08) make... Aug 22 2011, 06:24 Genadi Zawidowski В атмеге 16 UCSRA, например.
И
ISR(USART_TXC_vect)... Aug 22 2011, 06:40 zeonix0 Цитата(Genadi Zawidowski @ Aug 22 2011, 10... Aug 22 2011, 09:19  Genadi Zawidowski Цитатавроде скомпилился норм... но правильно ли эт... Aug 22 2011, 09:58 777777 А что такое "шпак"? Aug 22 2011, 06:55 Genadi Zawidowski Цитата(777777 @ Aug 22 2011, 10:55) А что... Aug 22 2011, 06:59 zeonix0 шпак это мужик который написал проги для МК, котор... Aug 22 2011, 07:03 777777 Цитата(zeonix0 @ Aug 22 2011, 11:03) шпак... Aug 22 2011, 07:05  ILYAUL Де жавю
Цитата'Aug 18 2011, 15:15' post... Aug 22 2011, 07:40 zeonix0 меня прикалывает шпак просто...
Может кто посовет... Aug 22 2011, 07:47 zeonix0 ген , спасибо. Попробую Aug 22 2011, 12:12 Genadi Zawidowski Цитата(zeonix0 @ Aug 22 2011, 16:12) ген ... Aug 29 2011, 15:28 zeonix0 RE: Шпак передача данных по USART Aug 29 2011, 07:07 777777 Цитата(zeonix0 @ Aug 29 2011, 11:07) Кодc... Aug 29 2011, 07:44 zeonix0 какая разница этого в контексте данного топика? ну... Aug 29 2011, 08:56 Vasily_ Осциллом надо измерять а не вольтметром, хотя не и... Aug 29 2011, 09:06 zeonix0 Цитата(Vasily_ @ Aug 29 2011, 13:06) Осци... Aug 29 2011, 09:11 GDI Если вместо -8.5В меяется +6.48В, то однозначно до... Aug 29 2011, 12:31 zeonix0 похоже что макс действительно сдох, заменил его на... Aug 30 2011, 12:20 aba Похоже что то напутано со скоростями. Вы уверены, ... Aug 30 2011, 12:28 zeonix0 CODE##############################################... Aug 30 2011, 12:33 aba У вас есть срока ЦитатаCFLAGS += -Wall -gdwarf-2 -... Aug 30 2011, 12:43 zeonix0 на кварце написано 16 ... бррр из-за этого что ли ... Aug 30 2011, 12:44 IgorKossak Господа, научитесь оформлять длинные коды в тэги c... Aug 30 2011, 17:59 zeonix0 IgorKossak, это какая кнопочка?
aba, ничего не из... Aug 31 2011, 06:23 IgorKossak Цитата(zeonix0 @ Aug 31 2011, 09:23) Igor... Aug 31 2011, 07:29
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|