Перейти к содержанию

Помогите Разобраться С Usart На Си


Katerunka

Рекомендуемые сообщения

пробую написать в AVR Studio на си

void USART_Transmit( unsigned char data )

{

/* Wait for empty transmit buffer */

while ( !( UCSRnA & (1<<UDREn)) );

/* Put data into buffer, sends the data */

UDRn = data;

}

что значит

UCSRnA, UDREn,UDRn, что значит "n"? взято с даташит на мегу 328 р

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Это значит нужно открыть таблицу регистров на странице 425 и посмотреть что есть похожего на ваши регистры и сделать выводы.

- А совесть в курсе? - А совесть в доле! :-D

Эксперт — это человек, который совершил все возможные ошибки в некотором узком поле.

Все грамматические ошибки являются авторским стилем изложения материала.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

что то не проходит у меня..может ошиблась в определителях или библиотеках, или в самой программе...((

здесь программа на передачу

#include <avr/io.h>

#include <avr/delay.h>

#define BAUDRATE 9600 // Скорость обмена данными

#define F_CPU 8000000UL // Рабочая частота контроллера

#define FOSC 1843200 // тактовая частота

#define BAUD 9600

#define MYUBRR FOSC/16/BAUD-1

void USART_Init( unsigned int ubrr)

{

/*Скорость передачи*/

UBRR0H = (unsigned char)(ubrr>>8);

UBRR0L = (unsigned char)ubrr;

//Включить приемник и передатчик */

UCSR0B = (1<<RXEN0)|(1<<TXEN0);

/* Установите формат кадра: 8data, 2stop bit */

UCSR0C = (1<<USBS0)|(3<<UCSZ00);

}

void USART_Transmit( unsigned char data )

{

/* Пустой буфер*/

while ( !( UCSR0A & (1<<UDRE0)) );

/* отправка данных в буфер */

UDR0 = data;

}

int main()

{

char x;

x=1;

USART_Init(MYUBRR);

USART_Transmit(x);

}

Ссылка на комментарий
Поделиться на другие сайты

ху из тактовая частота FOSC. В формулу надо подставлять тактовую МК, т.е. если она 8Мгц, то надо F_CPU.

зы. И USBS0 тоже вам не нужен.

Изменено пользователем __alexander
Ссылка на комментарий
Поделиться на другие сайты

оу спасибо, вроде получилось..) а в приеме нужно в цикл заключить "USART_Receive();" ??))

#include <avr/io.h>

#include <avr/delay.h>

#define BAUDRATE 9600 // Скорость обмена данными

#define F_CPU 8000000UL // Рабочая частота контроллера

#define FOSC 1843200 // Clock Speed

#define BAUD 9600

#define MYUBRR FOSC/8/BAUD-1

void USART_Init( unsigned int ubrr)

{

/*Set baud rate */

UBRR0H = (unsigned char)(ubrr>>8);

UBRR0L = (unsigned char)ubrr;

//Enable receiver and transmitter */

UCSR0B = (1<<RXEN0)|(1<<TXEN0);

/* Set frame format: 8data, 2stop bit */

UCSR0C = (3<<UCSZ00);

}

unsigned char USART_Receive( void )

{

/* Wait for data to be received */

while ( !(UCSR0A & (1<<RXC0)) );

DDRD=0b10000010;

PORTD|=_BV(PD7);//включаем светодиод

delay_ms(10);

/* Get and return received data from buffer */

return UDR0;

}

int main()

{

USART_Init(MYUBRR);

USART_Receive();

}

Ссылка на комментарий
Поделиться на другие сайты

Ну вообще то да, у вас выполнение просто дойдет до конца и дальше пойдет до конца памяти.

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

обычно делают так:

while(1)
{
USART_Receive();
}

Изменено пользователем Mkile
Ссылка на комментарий
Поделиться на другие сайты

оу спасибо, вроде получилось..)

это ключевое слово "вроде". ) программа ниже - без изменений. она работать не будет.

загорится светодиод и на этом все наверное закончится.

еще один с "наверное". ))

Изменено пользователем __alexander
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Привет, радионарод! Вот, решил показать, рассказать и дать попробовать свою придумку, как я внешнюю синхронизацию к "ослику" прикрутил. DSO138 уже не так популярен, но кто-то пользуется, кому-то быть может пригодится. Подробной информации по таким доработкам в сети не встречал, так что делюсь, чем сам измыслился. Собственно, схема. Немного фоточек. С "ослика" не пугайтесь, не умею я делать красивые корпуса с красивыми мордами лица к ним. Двухканального функционального генератора с возможностью двигать фазу у меня нет, поэтому какая-то программа-генератор из Интернетов, звуковая карта и DSO138. Смотрим синус, т.к. меандр из звуковухи никакой. Конечно, видна погрешность в измерениях. Прибор-то - игрушка. Да и генератор не блещет точным сигналом. Полноценного аналога внешней синхронизации (как у аналоговых приборов) не получится, но даже в таком виде эта доработка расширяет функционал осциллографа и дает в некоторых случаях возможность изучать два сигнала. Как пользоваться. Из иных доработок. Как видите, дурацкие ползунковые переключатели заменены на сдвоенные галетники на три положения. Кнопки поставлены большие тактовые 12х12 мм. Подпаяны паралельно, старые удалять не нужно. Светодиод тоже в паралель. Питание батарейное, от аккумулятора старого "умнофона". Полтора ампер-часа, наверное. Плата зарядки, плюс повышайка с фильтрами по питанию. Корпус алюминиевый от "не-знаю-как-правильно-называется", там жесткий диск стоял с парой ветродуйчиков. Гетинакс, оргстекло.   Короче, удачи!
    • Тут нет схемы самой Ардуино(но есть второе напряжение 3,3в , схема ниже)   Не вывозит!!!
    • Сорри, вопрос был не вам - исправлено.   И как Вы об этом узнали? Иными словами, можно ли без ПК узнать есть ли в кишках лого какая-либо рабочая программа или память пуста?
    • Мне нужно настраивать мд Квазар Арм там от 7 до 10 кГц.. Посоветуйте как мне поступить лучше?
    • У меня есть осцил  ( Цифровой осциллограф Instrustar ISDS205A 2 канала х 20 МГц) с max чувствительностью 10mV. Но мне нужна чувствительность хотя бы 1 mV. Разъем кабеля BNC. Советуют купить активный щуп, но как он выглядит и где покупать не знаю. Можно купить осцил пр-во СССР. Например с1-68 у него 1mV..но это как кота в мешке.. Посоветуйте как мне поступить , чтобы решить свою проблему?   
×
×
  • Создать...