|
USART & Atmega128A |
|
|
|
Jan 19 2012, 08:02
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 5-05-09
Пользователь №: 48 683

|
Постановка задачи: Есть Atmega162, которая непрерывно посылками светит по USART. Нужно выцепить определенный байт из посылки. Задача 1: Просто что-нибудь поймать по USART CODE #include <avr/io.h> #include <avr/delay.h> #include "lcd.h" #include <stdio.h> #include "stdafx.h"
typedef unsigned char byte; typedef unsigned short word; typedef unsigned long dword; void uart0_init(void) // инициализация uart { DDRE = (DDRE | 2) & ~1; // выводы порта - PE0 in, PE1 out UCSR0B = 0x00; // временно запретить uart UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x17; // скорость 19200 UBRR0H = 0x00; UCSR0B = 0x18; // запуск }
void uartsend(byte c) // посылка байта { while(!(UCSR0A & (1<<UDRE0))); UDR0 = c; }
byte uartrecv() // прием байта { while(!(UCSR0A & (1<<RXC0))); return UDR0; }
void main(void) { UCHAR i; DDRE = 0x00; char text[6]; unsigned int n=0; double ut = 0; CLI(); lcd_init(); lcd_write("Autorising..."); seconds(1); lcd_init(); lcd_write("Autorising..."); seconds(1); uart0_init(); DDRD = (1 << 4); SEI(); while (1) { ut = uartrecv(); dtostrf(ut,6,0,text); lcd_send(COMMAND, LCD_CLEAR); DDRD = (1 << 4); lcd_write(text); DDRD = 0x00; seconds(1); }
}
Что здесь не так?
|
|
|
|
|
 |
Ответов
|
Jan 19 2012, 08:51
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 5-05-09
Пользователь №: 48 683

|
Цитата(Палыч @ Jan 19 2012, 12:21)  1. В этом МК регистры UBRR0H и UCSR0C имеют один адрес и различаются битом URSEL Что мне с этим делать? Отладчик показывает, что программа стопорится на: byte uartrecv() // прием байта { while(!(UCSR0A & (1<<RXC0))); <<<<<<<<<<<<<<<<<<<<ЗДЕСЬ return UDR0; }
|
|
|
|
|
Jan 19 2012, 09:04
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(ADEPTPS @ Jan 19 2012, 12:51)  Что мне с этим делать? Например, что-то такое: Код UCSR0C = 0x06 | (1 << URSEL); Цитата(ADEPTPS @ Jan 19 2012, 12:51)  Отладчик показывает ... Убедится (осциллографом, например), что сигнал доходит до МК.
|
|
|
|
|
Jan 19 2012, 09:35
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 5-05-09
Пользователь №: 48 683

|
Цитата(Палыч @ Jan 19 2012, 13:04)  Код UCSR0C = 0x06 | (1 << URSEL); URSEL???? у меня Atmega128!!! у нее URSEL по крайней мере по даташиту отсутствует Цитата Убедится (осциллографом, например), что сигнал доходит до МК. Это я проверил первым делом!
Сообщение отредактировал ADEPTPS - Jan 19 2012, 09:36
|
|
|
|
Сообщений в этой теме
ADEPTPS USART & Atmega128A Jan 19 2012, 08:02 =GM= seconds(1); убрать Jan 19 2012, 08:17    Палыч Цитата(ADEPTPS @ Jan 19 2012, 13:35) у ме... Jan 19 2012, 09:54     ADEPTPS Цитата(Палыч @ Jan 19 2012, 13:54) Снять ... Jan 19 2012, 10:05      Палыч Цитата(ADEPTPS @ Jan 19 2012, 14:05) Оста... Jan 19 2012, 10:27       ADEPTPS Цитата(Палыч @ Jan 19 2012, 14:27) Остало... Jan 19 2012, 10:47        _Артём_ Цитата(ADEPTPS @ Jan 19 2012, 12:47) Как ... Jan 19 2012, 12:22 smalcom я думаю для задач обмена данными по UART нужно как... Jan 19 2012, 13:05 ADEPTPS Используется внешнее тактирование судя по фьюзам.
... Jan 20 2012, 05:16 Navovvol Цитата(ADEPTPS @ Jan 20 2012, 08:16) Испо... Jan 20 2012, 11:52 Navovvol Да тактирование тут ни причем, мусор бы все равно ... Jan 20 2012, 06:58 Палыч Цитата(Navovvol @ Jan 20 2012, 10:58) Да ... Jan 20 2012, 08:14 ADEPTPS да Jan 20 2012, 12:18 Navovvol на Atmega162 вывод PD1(или PB3) соединен с пином P... Jan 20 2012, 12:49 ADEPTPS Да, но я уже нашел другой способ получения информа... Jan 22 2012, 03:05 Aktus Всем добрый день.
Пишу вроде бы простейшую прогу ... May 19 2015, 16:13 RabidRabbit UCSR0C = (1<<USBS0)|(1<<UCSZ00);
Tabl... May 19 2015, 18:52 Aktus RabidRabbit, косяк признаю. Большое спасибо. Про р... May 20 2015, 18:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|