как связать два устройства по UART
как связать два устройства по UART
Есть Wav плеер http://www.getchip.net/posts/087-attiny ... #more-3139 и к нему надо подключить еще один МК, к которому будет подключено 10 кнопок, выбора трека. Так чтобы при нажатии на кнопку №1 МК передал sd-card-talking-device по UART A, №2-B,...№10-J ВАЖНО чтобы передаваемые Буквы Были ЗАГЛАВНЫЕ. Можно и больше кнопок желательно столько сколько можно подключить к МК на прямую. МК к стати будет ATMega8.
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
-
Alkul
- Держит паяльник хвостом
- Сообщения: 933
- Зарегистрирован: Ср апр 13, 2011 11:09:20
- Откуда: Екатеринбург
Re: как связать два устройства по UART
В чем проблема?
Соединяете вывод TxD МК №1 с выводом RxD МК №2, вывод RxD МК №1 с выводом TxD МК №2.
В программе вначале настраиваете на обоих МК модули USART на одну скорость, разрешаете приемники и передатчики. Как это сделать, подробно описано в даташите на ATmega8 в разделе USART.
А далее все просто - на МК №1 записываете в регистр UDR ASCII-код нужного символа, на МК №2 сработает прерывание по приему байта. В прерывании прочитать принятый байт из UDR, выйти из прерывания и выполнить нужное действие.
Ничего сложного.
Соединяете вывод TxD МК №1 с выводом RxD МК №2, вывод RxD МК №1 с выводом TxD МК №2.
В программе вначале настраиваете на обоих МК модули USART на одну скорость, разрешаете приемники и передатчики. Как это сделать, подробно описано в даташите на ATmega8 в разделе USART.
А далее все просто - на МК №1 записываете в регистр UDR ASCII-код нужного символа, на МК №2 сработает прерывание по приему байта. В прерывании прочитать принятый байт из UDR, выйти из прерывания и выполнить нужное действие.
Ничего сложного.
Re: как связать два устройства по UART
Все бы не чего, но я только начал изучать программирование, могу написать пока только какую ни будь маргалку, пишу на Si++, куда уж мне до настройки UART и разборок в DataShite, можно мне пример настроенного UART и команды для отправки символов по UART, НА Si++. И к стати, UART на плеере уже настроен, но частоту я не знаю, не чего не могу понять в исходнике.
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
-
Alkul
- Держит паяльник хвостом
- Сообщения: 933
- Зарегистрирован: Ср апр 13, 2011 11:09:20
- Откуда: Екатеринбург
Re: как связать два устройства по UART
Масяня писал(а):пишу на Si++
Это что за язык такой?
Масяня писал(а):куда уж мне до настройки UART и разборок в DataShite,
Если Вы возьмете на себя труд открыть даташит, то увидите там примеры настройки USART (и не только USART) на двух языках - на ассемблере и на Си.
Масяня писал(а):И к стати, UART на плеере уже настроен, но частоту я не знаю, не чего не могу понять в исходнике.
Для того, чтобы настраивать USART, нужно знать, на какую скорость это делать. Так что разбирайтесь в исходнике.
Re: как связать два устройства по UART
А зачем тогда за Wav-плеер хвататься?Масяня писал(а):я только начал изучать программирование, могу написать пока только какую ни будь маргалку
Re: как связать два устройства по UART
Где с английским плохо дружу http://www.atmel.com/Images/Atmel-8159- ... asheet.pdf
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Re: как связать два устройства по UART
Alkul писал(а):Масяня писал(а):пишу на Si++
Это что за язык такой?
Стыдно - не знать : кремний с двумя крестами
-
Alkul
- Держит паяльник хвостом
- Сообщения: 933
- Зарегистрирован: Ср апр 13, 2011 11:09:20
- Откуда: Екатеринбург
Re: как связать два устройства по UART
Jack_A писал(а):Стыдно - не знать : кремний с двумя крестами
Масяня писал(а):Где с английским плохо дружу
Как Вы думаете, в каком разделе находится описание USART в целом и методов его настройки в частности? Ну уж, конечно, не в разделе Interrupts.
И да, если хотите быть разработчиком электроники, то с английским придется начать "хорошо дружить". Хотя бы на уровне чтения со словарем. Иначе переквалифицируйтесь на что-нибудь другое. Макраме, например, попробуйте, или кулинарию...
Re: как связать два устройства по UART
ну вот нашел на 130 стр, почитал, почесал за ухом, не чего не понял и опять к вам вернулся, так сказать втираться в доверие. перевод с помощью гугла.
может кто на примере покажет там понятнее будет.
USART должен быть инициализирована долюбое сообщение может иметь место. Процесс инициализации Обычно кон -
состоит из установки скорости передачи , установив формат кадра и позволяет передатчик или приемник в зависимости от
использования. Для прерывания Driven работы USART , Глобальный
Флаг прерывания не должна быть очищена ( и прерывает глобально
отключена ) , когда делать инициализацию .
Прежде чем делать повторно инициализации с измененным скорости передачи или формат кадра , убедитесь, что нет никаких текущих пропускания -
Sion в течение периода регистры будут изменены. Техас
С флаг может быть использован для проверки передатчик , который имеет
Завершено все передачи , и RXC флаг может быть использован для проверки , что нет непрочитанных данных в буфере приема .
Обратите внимание, что TXC Флаг должен быть очищен до каждой передачи
выражение ( до UDR написано)
если он используется для этого
Цель .
Следующий простой USART initializat
примеры ионных кода показывают одну сборку и один C функцию , которые равны по
по функциональности. примеры
Предположим асинхронных Oper
видообразование с помощью опроса ( не interst
включен УПЦ ) и фиксированное
формат кадра . Скорость передачи данных задается в качестве параметра функции . Для кода сборки , параметр скорости передачи
1
0 2 3 4 [5] [6] [ 7] [8 ] [P]
Санкт- Sp1 [ SP2]
( St / в режиме ожидания)
( В режиме ожидания)
КАДР
Р
даже
г
н
1
-
г
3
г
2
г
1
г
0
0
Р
странный
г
н
1
-
г
3
г
2
г
1
г
0
1
=
=
131
ATmega8 [ техническое ]
8159E-AVR-02/2013
Предполагается, что хранится в R17 : R16 регистрирует . Когда функция написать UCSRC регистр, посадил укус
(MSB) должен быть установлен в связи с обмена месте ввода / вывода по UBRRH и UCSRC .
Примечание: 1 См. " О примерах кода " на стр. 6
Более продвинутые инициализации процедура может быть сделано, что включают в себя формат кадра в качестве параметров , запрещать прерывания и
так далее. Тем не менее, многие приложения используют фиксированную настройку на бод и контроля регистров , а для типов кристаллов в продаже
приложения в инициализации коде может сразу поместить в
главная программа , или быть со
mbined инициализации с кодом
для других модулей ввода / вывода .
20.6 Передача данных -USART передатчика
USART передатчика включается установкой
Передача Включить
( TXEN ) бит в UCSRB регистре . Когда
Передатчик включен, нормальная работа порта
TXD контактный переопределяется USART и с учетом функции
как последовательный выход передатчика. Скорость передачи данных , режим
эксплуатация и рамка формат должен быть установлен один раз перед
делать любые передачи . Если синхронная работа используется ,
часы на XCK пи
н будут переписаны и используется
как часы передачи.
Пример кода Ассамблея
(1)
USART_Init :
;
Установите скорость передачи данных
из
UBRRH , R17
из
UBRRL , R16
;
Включить приемник и передатчик
число
R16 , (1 << RXEN ) | (1 << TXEN )
из
UCSRB , R16
;
Установить формат кадра : 8data , 2stop немного
число
R16 , (1 << посадили ) | ( 1 << USBs ) | (3 << UCSZ0 )
из
UCSRC , R16
в отставке
C Код Пример
(1)
# Определяем FOSC 1843200 / / Тактовая частота
# Определяем BAUD 9600
# Определяем MYUBRR FOSC/16/BAUD-1
пустота
основной (
пустота
)
{
.
USART_Init ( MYUBRR ) ;
.
}
пустота
USART_Init (
неподписанных Int
УБРиР )
{
/ *
Установите скорость передачи данных
* /
UBRRH = (
неподписанные символ
) ( UBRR >>
;
UBRRL = (
неподписанные символ
) UBRR ;
/ *
Включить приемник и передатчик
* /
UCSRB = (1 << RXEN ) | (1 << TXEN ) ;
/ *
Установить формат кадра : 8data , 2stop немного
* /
UCSRC = (1 << посадили ) | ( 1 << USBs ) | (3 << UCSZ0 ) ;
}
132
ATmega8 [ техническое ]
8159E-AVR-02/2013
20.6.1 Отправка Рамки с 5 до 8 битов данных
Передача данных инициируется загрузка буфер передачи с данными для передачи. Загрузка процессора Может ли
Передача буфер WR
iting к месту UDR ввода / вывода. Чт
э данных буфера в го
э буфера передачи будут перемещены в сдвига
Регистрация Когда регистр сдвига готова направить новое место
э . Регистр сдвига загружен
с новыми данными , если он находится в
неактивное состояние ( не текущей передачи ) или сразу же после последнего стоп-бит предыдущего кадра передается . когда
Сдвиговый регистр загружается с новой да
та , он будет передавать один комп
Lete с частотой смены кадров
даетсябод Реджис -
тер, U2X немного или XCK в зависимости от режима работы.
Пример Следующий код
в показать простой USART передачи
функция, основанная на опрос
Регистрация данных Пустой
( UDRE ) Флаг . При использовании кадров с менее восьми битов , тыс.
э наиболее значимые биты , записанные в UDR игнорируются.
USART должен быть инициализирован перед функцией Может
использоваться . Для кода сборки , данные для передачи,
Предполагается, что запомненное в регистре R16
Примечание: 1 См. " О примерах кода " на стр. 6
Функция просто Ожидает буфер передачи , чтобы быть пустым , проверив Удре флаг, перед загрузкой его новым
данные, подлежащие передаче . Если Re данных
Gistel Пустой прерывания используется , то в
terrupt рутинной записи данных в
буфера .
Пример кода Ассамблея
(1)
USART_Transmit :
;
Подождите пустой буфер передачи
СБИС
UCSRA , UDRE
RJMP
USART_Transmit
;
Положите данные (R16) в буфер , посылает данные
из
UDR , R16
в отставке
C Код Пример
(1)
пустота
USART_Transmit (
неподписанные символ
данных)
{
/ *
Подождите пустой буфер передачи
* /
в то время как
(! ( UCSRA & (1 << UDRE )))
;
/ *
Поместить данные в буфер , посылает данные
* /
UDR = данные ;
}
133
ATmega8 [ техническое ]
8159E-AVR-02/2013
20.6.2 Отправка Рамки с 9 Биты данных
Если 9 -битные символы используются ( UCSZ = 7) девятый бит должен
записать в бит в TXB8 UCSRB перед Младший байт
характера записывается в UDR . Чт
э Следующие примеры кода показывают функцию передачи, который обрабатывает 9 -битный харак-
Ослабляет . Для кода сборки , данные должны быть отправлены предполагается, должны быть сохранены в регистрах R17 : R16 .
Примечание: 1 Эти функции передают написаны, чтобы быть вообще функц
TIONS . Они могут быть оптимизированы , если
содержимое UCSRB является
статическим. То есть TXB8 единственный бит UCS
РБ Зарегистрироваться используется после инициализации .
Девятый бит Может использоваться для индикации адресную фр
AME При использовании режима многопроцессорной связи или для
Другое обращение протокол как, например, синхронизации.
20.6.3 передатчика Флаги и прерывания
USART передатчика имеет два флага Это свидетельствуют о его
состояние: USART данных Зарегистрироваться Пустой ( UDRE ) и передачи
Полный ( ТХС ) . Оба флага Может использоваться для генерации прерываний.
Регистрация данных Пустой ( UDRE ) Флаг указывает whethercivil буфер передачи готов к приему новых данных . Этот бит
Когда устанавливается буфер передачи пуст , и очистили Когда
Содержит буферные Передача данных , которые должны передаваться Это
до сих пор не переехал в сдвиговый регистр . Для совместимости с будущими устройствами , всегда пишу этот бит в ноль
WhenWriting на UCSRA Регистрация .
Когда регистр данных Пустой разрешения прерываний ( UDRIE ) в UCSRB бит записывается в одном , в USART регистра данных
Пустой прерывания будет выполняться до тех пор, пока UDRE является
набор ( при условии, что глобальная ин
rrupts разрешены) . UDRE является
Написание очищается UDR . когда
прерываниям тр данных
ansmission используется , повторное Информация
Gistel пустой обработчика прерываний
должен либо написать новые данные в UDR для того, чтобы очистить Удре
или отключить Регистрация данных
Пустой Стажер
УПТ , в противном случае
новый прерывания произойдет только й
э прерывания разгром
НИС неизлечимо Атеш .
Пример кода Ассамблея
(1)
USART_Transmit :
;
Подождите пустой буфер передачи
СБИС
UCSRA , UDRE
RJMP
USART_Transmit
;
Скопируйте девятый бит от R17 с TXB8
CBI
UCSRB , TXB8
sbrc
R17, 0
ВОО
UCSRB , TXB8
;
Положите данные LSB (R16) в буфер , посылает данные
из
UDR , R16
в отставке
C Код Пример
(1)
пустота
USART_Transmit (
неподписанных Int
данных)
{
/ *
Подождите пустой буфер передачи
* /
в то время как
(! ( UCSRA & (1 << UDRE )))
;
/ *
Скопируйте девятый немного, чтобы TXB8
* /
UCSRB & = ~ (1 << TXB8 ) ;
если (данные & 0x0100 )
UCSRB | = (1 << TXB8 ) ;
/ *
Поместить данные в буфер , посылает данные
* /
UDR = данные ;
}
134
ATmega8 [ техническое ]
8159E-AVR-02/2013
Передача Полный ( ТХС ) Флаг бит установлен один , когда весь кадр в Transmit Shift, Регистрация была
сдвигаются и нет никаких новых данных в настоящее время в
буфер передачи . Бит TXC Флаг автоматически
Когда рассеялся завершение передачи выполняется прерывание , или он может быть очищен Дать один его разрядного месте.
TXC флаг полезен в полудуплекс
коммуникационные интерфейсы (например, стандарта RS485 ), гдеПередайте- ка ее применения
катионов необходимо ввести режим приема и освободить коммуникационную Сразу после завершения передачи .
Когда competetion передачи прерываний ( TXCIE ) немного
в UCSRB установлен, USART завершение передачи Интер -
Rupt будет выполняться Когда Флаг ТХС Стать набор
(Это при условии, что глобальные прерывания разрешены ) . Когда
Передача Полный прерывания используется , процедура обработки прерываний не должны очистить TXC Отметить это делается
автоматически Когда выполняется прерывание .
20.6.4 Паритет Генератор
Генератор Паритет Вычислить бит четности длясерийно
фрейма данных Al. Когда бит четности включена ( UPM1 = 1) ,
Логика управления передатчик вставляет бит четности междула
бит данных -й и первый стоп-бит кадра , который посылается .
20.6.5 Диса Bling передатчика
DISA шику из передатчика (настройка по TXEN к нулю ) не вступит в силу до тех пор, продолжающийся и в ожидании
Передачи будут завершены (т.е. Когда передачи регистр сдвига и буфер передачи Регистрация не содержат
данные, подлежащие передаче ) . При отключении ,
Передатчик больше не будет
Перекрыть штифт TXD .
20.6.6 Прием данных -USART приемник
USART приемник включен в письменной форме получать электронную
Nable ( RXEN ) бит в UC
SRB Регистрация одному . когда
Приемник включен, нормальная работа штифт
RxD контактный переопределяется USART и учитывая функц -
ния как серийный вход ресивера . Скорость передачи данных , режим работы и формат кадра должен быть установлен один раз перед
Любой серийный прием может быть сделано. Если си
nchronous операция нам
ред , часы на XCK
контактный будет использоваться в качестве транс-
В зависимости часы.
20.6.7 Получение Рамки с 5 до 8 битов данных
Приемник начинает Rece данных
автомеханик При обнаружении
действительный стартовый бит . Каждый укус Это FO
Llow начальную би
т сэмплируется
на скорости передачи данных или XCK часы , и сдвигается в сдвиговый регистр приема до первого стоп-бит кадра не является
Поступило . Вторая остановка бит будет игнорировать
д Получателем . Когда первый ул
оп прикус получена (т.е. полное
кадр последовательных присутствует в сдвиговый регистр приема )
содержание сдвига Re
Gistel будут перемещены в
Получите буфер . Приемного буфера может быть прочитан , читая расположение UDR ввода / вывода.
В следующем примере кода показан простой USART Rece
ив функция, основанная на опросполучение полной
( RXC ) Флаг . При использовании кадров с менее восьми битов
наиболее значимые биты т
он данные, считанные из UDR будет
быть замаскированы нулю. USART должен быть в
itialized , прежде чем функция может использоваться.
135
ATmega8 [ техническое ]
8159E-AVR-02/2013
Примечание: 1 См. " О примерах кода " на стр. 6
Функция просто ждет данных присутствовать в буфере приема , проверяя RxC флаг, прежде чем читать
буфер и возвращения значения .
20.6.8 Получение Рамки с 9 Биты данных
Если 9 -битные символы используются ( UCSZ = 7) девятый бит должен быть прочитан из RXB8 бита в UCSRB
до
Чтение
низкие биты из UDR . Это правило курсирует к ИП , DO
R и PE Флаги состояния , а
. Считать состояние от UCSRA ,
Затем данные из UDR . Чтение расположение UDR ввода / вывода будет
изменить состояние приема FIFO буфера и, следователь -
СледовательноTXB8 , ИП , ДОР , и PE бит , whicn
ч все хранится в
FIFO , изменится.
Пример кода Ассамблея
(1)
USART_Receive :
;
Подождите , пока данные будут Поступила
СБИС
UCSRA , RXC
RJMP
USART_Receive
;
Получить и вернуть полученных данных из буфера
в
R16 , UDR
в отставке
C Код Пример
(1)
неподписанные символ
USART_Receive (
пустота
)
{
/ *
Подождите , пока данные будут Поступила
* /
в то время как
(! ( UCSRA & (1 << RXC )))
;
/ *
Получить и вернуть полученных данных из буфера
* /
возвращение
UDR ;
}
136
ATmega8 [ техническое ]
8159E-AVR-02/2013
В следующем примере кода показан простой USART Rece
Эта функция ив ручки бота
ч 9 - битовых символов и
биты состояния .
Примечание: 1 См. " О примерах кода " на стр. 6
Получайте пример функция читает все регистры ввода / вывода в
в Регистрация на файл перед любой вычислительно делается.
Это дает оптимальную приемного буфера видов использования с бу
ffer расположение чтения будет бесплатным
принять новые данные уже
как небо .
Пример кода Ассамблея
(1)
USART_Receive :
;
Подождите , пока данные будут Поступила
СБИС
UCSRA , RXC
RJMP
USART_Receive
;
Получить статус и девятый бит , то данные из буфера
в
R18 , UCSRA
в
R17 , UCSRB
в
R16 , UDR
;
Если ошибка , возвращает -1
дух
R18 , (1 << FE) | (1 << ДОР ) | (1 << ПЭ)
BREQ
USART_ReceiveNoError
число
R17 , HIGH (-1)
число
R16 , низкий (-1)
USART_ReceiveNoError :
;
Фильтр девятый бит , а затем вернуться
ЛСР
R17
дух
R17 , 0x01
в отставке
C Код Пример
(1)
неподписанных Int
USART_Receive (
пустота
)
{
неподписанные символ
статус, реш , смола;
/ *
Подождите , пока данные будут Поступила
* /
в то время как
(! ( UCSRA & (1 << RXC )))
;
/ *
Получить статус и девятый бит , то данные
* /
/ *
из буфера
* /
статус = UCSRA ;
реш = UCSRB ;
смола = UDR ;
/ *
Если ошибка , возвращает -1
* /
если
( Статус & (1 << FE) | (1 << ДОР ) | (1 << PE) )
возвращение
-1;
/ *
Фильтр девятый бит , а затем вернуться
* /
реш = ( реш >> 1) & 0x01;
возвращение
( ( Реш <<
| смола) ;
}
137
ATmega8 [ техническое ]
8159E-AVR-02/2013
20.6.9 Прием competetion флаг и прерывание
USART приемник имеет один флаг, который указывает состояние приемника .
Получайте Полный ( RXC ) Флаг показывает, имеются ли непрочитанные данные , присутствующие в буфере приема . Этот флаг является одним
При наличии непрочитанных данных в буфере приема , и нулю , когда буфер приемника пуст (то есть , не содержит комментарий
непрочитанных данных ) . Если приемник DISA
Блед ( RXEN = 0), то буфер ж Получите
плохо промыть и RXC Следовательно
немного willbecome нулю.
Когда получение полной прерываний ( RXCIE ) в
UCSRB установлен, USART получать всю прерывание
будет выполняться до тех пор, пока го
э RXC Флаг устанавливается ( при условии, что в глобальной
terrupts разрешены) .
Когда прерываниям
прием данных используется ,вы получите полную процедуру должны прочитать полученным данным из UDR для того , чтобы очистить
RXC Флаг , иначе новая ин
rrupt произойдет после того, как ин
rrupt рутина
неизлечимо Атеш .
20.06.10 Флаги приемник ошибках
USART приемник имеет три ошибках флаги : Ошибка кадра ( FE ) , перерасход данных ( ДОР ) и Ошибка четности (ПЭ) . Все они могут
обращаться, читая UCSRA . Общие для флагов ошибок в thatthey расположены в буфере приема вместе
с рамой , для которых они указать статус ошибки . В связи с буферизации флагов ошибок ,UCSRA должны быть
прочитайте передПолучайте buffé
г ( UDR) , начиная с чтения расположение UDR I / O
изменяет буфера чтения
расположение . другой
равенство для флагов ошибок является то, что они не могут быть изменены с помощью программного обеспечения делает запись в папку флага . Тем не менее, все
флаги должны быть установлены в ноль
Когда UCSRA написано FO
г совместимость снизу вверх будущих USART реализуемых ных .
Ни один из флагов ошибок не можете generatevalue прерывания.
Ошибка кадра (FE ) Флаг указывает состояние первого стоповый бит следующего кадра , сохраненного в ReadableПолучение
буфера . FE Флаг равен нулю
Когда стоп-бит правильно читать (как
один ) , и флаг ЧП
Когда будет тот,
стоп-бит был неправильным (ноль) . Этот флаг может быть использован для
Обнаружение из собственного синхронизации условия , Обнаружение условия разрыва
и обращение протокол . FE Флаг не зависит от установки бита USBS в UCSRC поскольку приемник
Игнорировать все , за исключением
для первого, стоп-битов . Для Compatib
СОСТОЯНИЯ с будущими устройствами , всегда таковой
т этот бит нулю Когда предписание -
ING в UCSRA .
Перерасход данных ( ДОР ) Флаг указывает на потерю данных из-за буферной приемник полном состоянии . Перерасход данных происходит
Когда Получите буфер заполнен ( два ч
aracters ) , это новый жду характер
г в сдвиговый регистр приема и
Новый стартовый бит обнаружен . Если ДОР Флаг установлен был один или более кадр последовательных потеряли между рамой последнего чтения
от UDR и следующий кадр
читать UDR . Для Compatib
СОСТОЯНИЯ с будущими устройствами , Alwa
ASL написать этот бит в ноль
WhenWriting чтобы UCSRA . ДОР Флаг
очищается Поступила Когда кадр был успешно перемещен из сдвига
Регистрация в буфер приемника .
Ошибка четности (ПЭ ) Флаг указывает, что следующий кадр в буфере приема был паритет errorwhen получил. если
Контроль четности не включен РЕ немного ж
я всегда буду показывать ноль . Для compatibilit
у с будущей деви
к.э.н., всегда установить это
немного нулю WhenWriting к
UCSRA . Для получения дополнительной информации см.
" Бит четности Расчет " на стр. 130
и
"Паритет Checker"
на стр. 137
.
20.06.11 Паритет Checker
Паритет Проверка активен Когда режим высокой USART четности ( UPM1 ) бит. Тип контроля четности быть за -
формируется ( четным или нечетным ) выбирается UPM0 укуса. Если эта функция включена , Соотношение проверки Рассчитайте соотношение
биты данных в входящих кадров и сравнить результат с битом четности от последовательного кадра . Результат
Проверка хранится в буфере приема вместе с полученными данными и более стоп-битов. Ошибка четности (ПЭ) флаг может
затем прочитать с помощью программного обеспечения , чтобы проверить , если кадр был Ошибка четности .
ЧП бит устанавливается, если следующий символ , который можно прочитать из буфера приема был паритет errorwhen полученных и
проверку четности в этой точке ( UPM1 = 1) был включен. Этот бит действителен до приемного буфера ( UDR ) читается .
20/06/12 Диса Blingприемник
В отличие от передатчика , DISAB
лин приемника будет
немедленно. Данные из на
Going Реджеп TIONS будет там -
Передние быть потеряны. когда
инвалидов (то есть, RXEN является таковой
т к нулю ) приемник
больше не будет переопределить нормальную функцию
138
ATmega8 [ техническое ]
8159E-AVR-02/2013
из вывода порта RxD . Rece
Буфер FIFO взаимодействия будут очищены Когда Re
воспринимаем отключена . ре
остальные же данные в
буфера будут потеряны.
20/06/13 Промывка приемного буфера
Приемник буфера FIFO будет гриппов
Hed Когда приемник выключен (т.е.
буфер будет очищен от его кон -
палатки ) . непрочитанная да
та , будут потеряны. Если любитель
это должно быть FL
ushed во норме
операция др. , за счет
например
ошибка
состояние, читать расположение UDR I / O , пока RXC Флаг не очищается. В следующем примере кода показано, как избавиться
Приемный буфер .
Спойлер
20.5 USART инициализацииUSART должен быть инициализирована долюбое сообщение может иметь место. Процесс инициализации Обычно кон -
состоит из установки скорости передачи , установив формат кадра и позволяет передатчик или приемник в зависимости от
использования. Для прерывания Driven работы USART , Глобальный
Флаг прерывания не должна быть очищена ( и прерывает глобально
отключена ) , когда делать инициализацию .
Прежде чем делать повторно инициализации с измененным скорости передачи или формат кадра , убедитесь, что нет никаких текущих пропускания -
Sion в течение периода регистры будут изменены. Техас
С флаг может быть использован для проверки передатчик , который имеет
Завершено все передачи , и RXC флаг может быть использован для проверки , что нет непрочитанных данных в буфере приема .
Обратите внимание, что TXC Флаг должен быть очищен до каждой передачи
выражение ( до UDR написано)
если он используется для этого
Цель .
Следующий простой USART initializat
примеры ионных кода показывают одну сборку и один C функцию , которые равны по
по функциональности. примеры
Предположим асинхронных Oper
видообразование с помощью опроса ( не interst
включен УПЦ ) и фиксированное
формат кадра . Скорость передачи данных задается в качестве параметра функции . Для кода сборки , параметр скорости передачи
1
0 2 3 4 [5] [6] [ 7] [8 ] [P]
Санкт- Sp1 [ SP2]
( St / в режиме ожидания)
( В режиме ожидания)
КАДР
Р
даже
г
н
1
-
г
3
г
2
г
1
г
0
0
Р
странный
г
н
1
-
г
3
г
2
г
1
г
0
1
=
=
131
ATmega8 [ техническое ]
8159E-AVR-02/2013
Предполагается, что хранится в R17 : R16 регистрирует . Когда функция написать UCSRC регистр, посадил укус
(MSB) должен быть установлен в связи с обмена месте ввода / вывода по UBRRH и UCSRC .
Примечание: 1 См. " О примерах кода " на стр. 6
Более продвинутые инициализации процедура может быть сделано, что включают в себя формат кадра в качестве параметров , запрещать прерывания и
так далее. Тем не менее, многие приложения используют фиксированную настройку на бод и контроля регистров , а для типов кристаллов в продаже
приложения в инициализации коде может сразу поместить в
главная программа , или быть со
mbined инициализации с кодом
для других модулей ввода / вывода .
20.6 Передача данных -USART передатчика
USART передатчика включается установкой
Передача Включить
( TXEN ) бит в UCSRB регистре . Когда
Передатчик включен, нормальная работа порта
TXD контактный переопределяется USART и с учетом функции
как последовательный выход передатчика. Скорость передачи данных , режим
эксплуатация и рамка формат должен быть установлен один раз перед
делать любые передачи . Если синхронная работа используется ,
часы на XCK пи
н будут переписаны и используется
как часы передачи.
Пример кода Ассамблея
(1)
USART_Init :
;
Установите скорость передачи данных
из
UBRRH , R17
из
UBRRL , R16
;
Включить приемник и передатчик
число
R16 , (1 << RXEN ) | (1 << TXEN )
из
UCSRB , R16
;
Установить формат кадра : 8data , 2stop немного
число
R16 , (1 << посадили ) | ( 1 << USBs ) | (3 << UCSZ0 )
из
UCSRC , R16
в отставке
C Код Пример
(1)
# Определяем FOSC 1843200 / / Тактовая частота
# Определяем BAUD 9600
# Определяем MYUBRR FOSC/16/BAUD-1
пустота
основной (
пустота
)
{
.
USART_Init ( MYUBRR ) ;
.
}
пустота
USART_Init (
неподписанных Int
УБРиР )
{
/ *
Установите скорость передачи данных
* /
UBRRH = (
неподписанные символ
) ( UBRR >>
UBRRL = (
неподписанные символ
) UBRR ;
/ *
Включить приемник и передатчик
* /
UCSRB = (1 << RXEN ) | (1 << TXEN ) ;
/ *
Установить формат кадра : 8data , 2stop немного
* /
UCSRC = (1 << посадили ) | ( 1 << USBs ) | (3 << UCSZ0 ) ;
}
132
ATmega8 [ техническое ]
8159E-AVR-02/2013
20.6.1 Отправка Рамки с 5 до 8 битов данных
Передача данных инициируется загрузка буфер передачи с данными для передачи. Загрузка процессора Может ли
Передача буфер WR
iting к месту UDR ввода / вывода. Чт
э данных буфера в го
э буфера передачи будут перемещены в сдвига
Регистрация Когда регистр сдвига готова направить новое место
э . Регистр сдвига загружен
с новыми данными , если он находится в
неактивное состояние ( не текущей передачи ) или сразу же после последнего стоп-бит предыдущего кадра передается . когда
Сдвиговый регистр загружается с новой да
та , он будет передавать один комп
Lete с частотой смены кадров
даетсябод Реджис -
тер, U2X немного или XCK в зависимости от режима работы.
Пример Следующий код
в показать простой USART передачи
функция, основанная на опрос
Регистрация данных Пустой
( UDRE ) Флаг . При использовании кадров с менее восьми битов , тыс.
э наиболее значимые биты , записанные в UDR игнорируются.
USART должен быть инициализирован перед функцией Может
использоваться . Для кода сборки , данные для передачи,
Предполагается, что запомненное в регистре R16
Примечание: 1 См. " О примерах кода " на стр. 6
Функция просто Ожидает буфер передачи , чтобы быть пустым , проверив Удре флаг, перед загрузкой его новым
данные, подлежащие передаче . Если Re данных
Gistel Пустой прерывания используется , то в
terrupt рутинной записи данных в
буфера .
Пример кода Ассамблея
(1)
USART_Transmit :
;
Подождите пустой буфер передачи
СБИС
UCSRA , UDRE
RJMP
USART_Transmit
;
Положите данные (R16) в буфер , посылает данные
из
UDR , R16
в отставке
C Код Пример
(1)
пустота
USART_Transmit (
неподписанные символ
данных)
{
/ *
Подождите пустой буфер передачи
* /
в то время как
(! ( UCSRA & (1 << UDRE )))
;
/ *
Поместить данные в буфер , посылает данные
* /
UDR = данные ;
}
133
ATmega8 [ техническое ]
8159E-AVR-02/2013
20.6.2 Отправка Рамки с 9 Биты данных
Если 9 -битные символы используются ( UCSZ = 7) девятый бит должен
записать в бит в TXB8 UCSRB перед Младший байт
характера записывается в UDR . Чт
э Следующие примеры кода показывают функцию передачи, который обрабатывает 9 -битный харак-
Ослабляет . Для кода сборки , данные должны быть отправлены предполагается, должны быть сохранены в регистрах R17 : R16 .
Примечание: 1 Эти функции передают написаны, чтобы быть вообще функц
TIONS . Они могут быть оптимизированы , если
содержимое UCSRB является
статическим. То есть TXB8 единственный бит UCS
РБ Зарегистрироваться используется после инициализации .
Девятый бит Может использоваться для индикации адресную фр
AME При использовании режима многопроцессорной связи или для
Другое обращение протокол как, например, синхронизации.
20.6.3 передатчика Флаги и прерывания
USART передатчика имеет два флага Это свидетельствуют о его
состояние: USART данных Зарегистрироваться Пустой ( UDRE ) и передачи
Полный ( ТХС ) . Оба флага Может использоваться для генерации прерываний.
Регистрация данных Пустой ( UDRE ) Флаг указывает whethercivil буфер передачи готов к приему новых данных . Этот бит
Когда устанавливается буфер передачи пуст , и очистили Когда
Содержит буферные Передача данных , которые должны передаваться Это
до сих пор не переехал в сдвиговый регистр . Для совместимости с будущими устройствами , всегда пишу этот бит в ноль
WhenWriting на UCSRA Регистрация .
Когда регистр данных Пустой разрешения прерываний ( UDRIE ) в UCSRB бит записывается в одном , в USART регистра данных
Пустой прерывания будет выполняться до тех пор, пока UDRE является
набор ( при условии, что глобальная ин
rrupts разрешены) . UDRE является
Написание очищается UDR . когда
прерываниям тр данных
ansmission используется , повторное Информация
Gistel пустой обработчика прерываний
должен либо написать новые данные в UDR для того, чтобы очистить Удре
или отключить Регистрация данных
Пустой Стажер
УПТ , в противном случае
новый прерывания произойдет только й
э прерывания разгром
НИС неизлечимо Атеш .
Пример кода Ассамблея
(1)
USART_Transmit :
;
Подождите пустой буфер передачи
СБИС
UCSRA , UDRE
RJMP
USART_Transmit
;
Скопируйте девятый бит от R17 с TXB8
CBI
UCSRB , TXB8
sbrc
R17, 0
ВОО
UCSRB , TXB8
;
Положите данные LSB (R16) в буфер , посылает данные
из
UDR , R16
в отставке
C Код Пример
(1)
пустота
USART_Transmit (
неподписанных Int
данных)
{
/ *
Подождите пустой буфер передачи
* /
в то время как
(! ( UCSRA & (1 << UDRE )))
;
/ *
Скопируйте девятый немного, чтобы TXB8
* /
UCSRB & = ~ (1 << TXB8 ) ;
если (данные & 0x0100 )
UCSRB | = (1 << TXB8 ) ;
/ *
Поместить данные в буфер , посылает данные
* /
UDR = данные ;
}
134
ATmega8 [ техническое ]
8159E-AVR-02/2013
Передача Полный ( ТХС ) Флаг бит установлен один , когда весь кадр в Transmit Shift, Регистрация была
сдвигаются и нет никаких новых данных в настоящее время в
буфер передачи . Бит TXC Флаг автоматически
Когда рассеялся завершение передачи выполняется прерывание , или он может быть очищен Дать один его разрядного месте.
TXC флаг полезен в полудуплекс
коммуникационные интерфейсы (например, стандарта RS485 ), гдеПередайте- ка ее применения
катионов необходимо ввести режим приема и освободить коммуникационную Сразу после завершения передачи .
Когда competetion передачи прерываний ( TXCIE ) немного
в UCSRB установлен, USART завершение передачи Интер -
Rupt будет выполняться Когда Флаг ТХС Стать набор
(Это при условии, что глобальные прерывания разрешены ) . Когда
Передача Полный прерывания используется , процедура обработки прерываний не должны очистить TXC Отметить это делается
автоматически Когда выполняется прерывание .
20.6.4 Паритет Генератор
Генератор Паритет Вычислить бит четности длясерийно
фрейма данных Al. Когда бит четности включена ( UPM1 = 1) ,
Логика управления передатчик вставляет бит четности междула
бит данных -й и первый стоп-бит кадра , который посылается .
20.6.5 Диса Bling передатчика
DISA шику из передатчика (настройка по TXEN к нулю ) не вступит в силу до тех пор, продолжающийся и в ожидании
Передачи будут завершены (т.е. Когда передачи регистр сдвига и буфер передачи Регистрация не содержат
данные, подлежащие передаче ) . При отключении ,
Передатчик больше не будет
Перекрыть штифт TXD .
20.6.6 Прием данных -USART приемник
USART приемник включен в письменной форме получать электронную
Nable ( RXEN ) бит в UC
SRB Регистрация одному . когда
Приемник включен, нормальная работа штифт
RxD контактный переопределяется USART и учитывая функц -
ния как серийный вход ресивера . Скорость передачи данных , режим работы и формат кадра должен быть установлен один раз перед
Любой серийный прием может быть сделано. Если си
nchronous операция нам
ред , часы на XCK
контактный будет использоваться в качестве транс-
В зависимости часы.
20.6.7 Получение Рамки с 5 до 8 битов данных
Приемник начинает Rece данных
автомеханик При обнаружении
действительный стартовый бит . Каждый укус Это FO
Llow начальную би
т сэмплируется
на скорости передачи данных или XCK часы , и сдвигается в сдвиговый регистр приема до первого стоп-бит кадра не является
Поступило . Вторая остановка бит будет игнорировать
д Получателем . Когда первый ул
оп прикус получена (т.е. полное
кадр последовательных присутствует в сдвиговый регистр приема )
содержание сдвига Re
Gistel будут перемещены в
Получите буфер . Приемного буфера может быть прочитан , читая расположение UDR ввода / вывода.
В следующем примере кода показан простой USART Rece
ив функция, основанная на опросполучение полной
( RXC ) Флаг . При использовании кадров с менее восьми битов
наиболее значимые биты т
он данные, считанные из UDR будет
быть замаскированы нулю. USART должен быть в
itialized , прежде чем функция может использоваться.
135
ATmega8 [ техническое ]
8159E-AVR-02/2013
Примечание: 1 См. " О примерах кода " на стр. 6
Функция просто ждет данных присутствовать в буфере приема , проверяя RxC флаг, прежде чем читать
буфер и возвращения значения .
20.6.8 Получение Рамки с 9 Биты данных
Если 9 -битные символы используются ( UCSZ = 7) девятый бит должен быть прочитан из RXB8 бита в UCSRB
до
Чтение
низкие биты из UDR . Это правило курсирует к ИП , DO
R и PE Флаги состояния , а
. Считать состояние от UCSRA ,
Затем данные из UDR . Чтение расположение UDR ввода / вывода будет
изменить состояние приема FIFO буфера и, следователь -
СледовательноTXB8 , ИП , ДОР , и PE бит , whicn
ч все хранится в
FIFO , изменится.
Пример кода Ассамблея
(1)
USART_Receive :
;
Подождите , пока данные будут Поступила
СБИС
UCSRA , RXC
RJMP
USART_Receive
;
Получить и вернуть полученных данных из буфера
в
R16 , UDR
в отставке
C Код Пример
(1)
неподписанные символ
USART_Receive (
пустота
)
{
/ *
Подождите , пока данные будут Поступила
* /
в то время как
(! ( UCSRA & (1 << RXC )))
;
/ *
Получить и вернуть полученных данных из буфера
* /
возвращение
UDR ;
}
136
ATmega8 [ техническое ]
8159E-AVR-02/2013
В следующем примере кода показан простой USART Rece
Эта функция ив ручки бота
ч 9 - битовых символов и
биты состояния .
Примечание: 1 См. " О примерах кода " на стр. 6
Получайте пример функция читает все регистры ввода / вывода в
в Регистрация на файл перед любой вычислительно делается.
Это дает оптимальную приемного буфера видов использования с бу
ffer расположение чтения будет бесплатным
принять новые данные уже
как небо .
Пример кода Ассамблея
(1)
USART_Receive :
;
Подождите , пока данные будут Поступила
СБИС
UCSRA , RXC
RJMP
USART_Receive
;
Получить статус и девятый бит , то данные из буфера
в
R18 , UCSRA
в
R17 , UCSRB
в
R16 , UDR
;
Если ошибка , возвращает -1
дух
R18 , (1 << FE) | (1 << ДОР ) | (1 << ПЭ)
BREQ
USART_ReceiveNoError
число
R17 , HIGH (-1)
число
R16 , низкий (-1)
USART_ReceiveNoError :
;
Фильтр девятый бит , а затем вернуться
ЛСР
R17
дух
R17 , 0x01
в отставке
C Код Пример
(1)
неподписанных Int
USART_Receive (
пустота
)
{
неподписанные символ
статус, реш , смола;
/ *
Подождите , пока данные будут Поступила
* /
в то время как
(! ( UCSRA & (1 << RXC )))
;
/ *
Получить статус и девятый бит , то данные
* /
/ *
из буфера
* /
статус = UCSRA ;
реш = UCSRB ;
смола = UDR ;
/ *
Если ошибка , возвращает -1
* /
если
( Статус & (1 << FE) | (1 << ДОР ) | (1 << PE) )
возвращение
-1;
/ *
Фильтр девятый бит , а затем вернуться
* /
реш = ( реш >> 1) & 0x01;
возвращение
( ( Реш <<
}
137
ATmega8 [ техническое ]
8159E-AVR-02/2013
20.6.9 Прием competetion флаг и прерывание
USART приемник имеет один флаг, который указывает состояние приемника .
Получайте Полный ( RXC ) Флаг показывает, имеются ли непрочитанные данные , присутствующие в буфере приема . Этот флаг является одним
При наличии непрочитанных данных в буфере приема , и нулю , когда буфер приемника пуст (то есть , не содержит комментарий
непрочитанных данных ) . Если приемник DISA
Блед ( RXEN = 0), то буфер ж Получите
плохо промыть и RXC Следовательно
немного willbecome нулю.
Когда получение полной прерываний ( RXCIE ) в
UCSRB установлен, USART получать всю прерывание
будет выполняться до тех пор, пока го
э RXC Флаг устанавливается ( при условии, что в глобальной
terrupts разрешены) .
Когда прерываниям
прием данных используется ,вы получите полную процедуру должны прочитать полученным данным из UDR для того , чтобы очистить
RXC Флаг , иначе новая ин
rrupt произойдет после того, как ин
rrupt рутина
неизлечимо Атеш .
20.06.10 Флаги приемник ошибках
USART приемник имеет три ошибках флаги : Ошибка кадра ( FE ) , перерасход данных ( ДОР ) и Ошибка четности (ПЭ) . Все они могут
обращаться, читая UCSRA . Общие для флагов ошибок в thatthey расположены в буфере приема вместе
с рамой , для которых они указать статус ошибки . В связи с буферизации флагов ошибок ,UCSRA должны быть
прочитайте передПолучайте buffé
г ( UDR) , начиная с чтения расположение UDR I / O
изменяет буфера чтения
расположение . другой
равенство для флагов ошибок является то, что они не могут быть изменены с помощью программного обеспечения делает запись в папку флага . Тем не менее, все
флаги должны быть установлены в ноль
Когда UCSRA написано FO
г совместимость снизу вверх будущих USART реализуемых ных .
Ни один из флагов ошибок не можете generatevalue прерывания.
Ошибка кадра (FE ) Флаг указывает состояние первого стоповый бит следующего кадра , сохраненного в ReadableПолучение
буфера . FE Флаг равен нулю
Когда стоп-бит правильно читать (как
один ) , и флаг ЧП
Когда будет тот,
стоп-бит был неправильным (ноль) . Этот флаг может быть использован для
Обнаружение из собственного синхронизации условия , Обнаружение условия разрыва
и обращение протокол . FE Флаг не зависит от установки бита USBS в UCSRC поскольку приемник
Игнорировать все , за исключением
для первого, стоп-битов . Для Compatib
СОСТОЯНИЯ с будущими устройствами , всегда таковой
т этот бит нулю Когда предписание -
ING в UCSRA .
Перерасход данных ( ДОР ) Флаг указывает на потерю данных из-за буферной приемник полном состоянии . Перерасход данных происходит
Когда Получите буфер заполнен ( два ч
aracters ) , это новый жду характер
г в сдвиговый регистр приема и
Новый стартовый бит обнаружен . Если ДОР Флаг установлен был один или более кадр последовательных потеряли между рамой последнего чтения
от UDR и следующий кадр
читать UDR . Для Compatib
СОСТОЯНИЯ с будущими устройствами , Alwa
ASL написать этот бит в ноль
WhenWriting чтобы UCSRA . ДОР Флаг
очищается Поступила Когда кадр был успешно перемещен из сдвига
Регистрация в буфер приемника .
Ошибка четности (ПЭ ) Флаг указывает, что следующий кадр в буфере приема был паритет errorwhen получил. если
Контроль четности не включен РЕ немного ж
я всегда буду показывать ноль . Для compatibilit
у с будущей деви
к.э.н., всегда установить это
немного нулю WhenWriting к
UCSRA . Для получения дополнительной информации см.
" Бит четности Расчет " на стр. 130
и
"Паритет Checker"
на стр. 137
.
20.06.11 Паритет Checker
Паритет Проверка активен Когда режим высокой USART четности ( UPM1 ) бит. Тип контроля четности быть за -
формируется ( четным или нечетным ) выбирается UPM0 укуса. Если эта функция включена , Соотношение проверки Рассчитайте соотношение
биты данных в входящих кадров и сравнить результат с битом четности от последовательного кадра . Результат
Проверка хранится в буфере приема вместе с полученными данными и более стоп-битов. Ошибка четности (ПЭ) флаг может
затем прочитать с помощью программного обеспечения , чтобы проверить , если кадр был Ошибка четности .
ЧП бит устанавливается, если следующий символ , который можно прочитать из буфера приема был паритет errorwhen полученных и
проверку четности в этой точке ( UPM1 = 1) был включен. Этот бит действителен до приемного буфера ( UDR ) читается .
20/06/12 Диса Blingприемник
В отличие от передатчика , DISAB
лин приемника будет
немедленно. Данные из на
Going Реджеп TIONS будет там -
Передние быть потеряны. когда
инвалидов (то есть, RXEN является таковой
т к нулю ) приемник
больше не будет переопределить нормальную функцию
138
ATmega8 [ техническое ]
8159E-AVR-02/2013
из вывода порта RxD . Rece
Буфер FIFO взаимодействия будут очищены Когда Re
воспринимаем отключена . ре
остальные же данные в
буфера будут потеряны.
20/06/13 Промывка приемного буфера
Приемник буфера FIFO будет гриппов
Hed Когда приемник выключен (т.е.
буфер будет очищен от его кон -
палатки ) . непрочитанная да
та , будут потеряны. Если любитель
это должно быть FL
ushed во норме
операция др. , за счет
например
ошибка
состояние, читать расположение UDR I / O , пока RXC Флаг не очищается. В следующем примере кода показано, как избавиться
Приемный буфер .
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
-
Alkul
- Держит паяльник хвостом
- Сообщения: 933
- Зарегистрирован: Ср апр 13, 2011 11:09:20
- Откуда: Екатеринбург
Re: как связать два устройства по UART
Масяня писал(а):ну вот нашел на 130 стр, перевод с помощью гугла.
Ну, и что Вы предлагаете? Переводить Вам даташит и "набивать" сюда?
А в поисковых системах Вас "забанили", что-ли?
Вот на известном портале gaw.ru есть описание USART контроллера ATmega128. Отличий между USART меги8 и USART меги128 минимальны. Читайте и спрашивайте, что конкретно непонятно. Никто не станет отвечать Вам на вопрос "мне непонятно все" - очень уж это неблагодарное занятие. А переводить Вам даташит на мегу8 - это тема, скорее, для форума "Есть работа". Сколько готовы заплатить за перевод даташита?
Re: как связать два устройства по UART
не понятно то как будет выглядеть команда отправки заглавных букв Например при нажатии кнопки 1 без разницы на каком порту и пине будет отправлена А. Например как присвоить порту B1 единицу мне понятно а как при (!PINB.0)или тоже самое(PINB.0==0) отправить по UART A не понятно
пример с присвоением единицы PORTB.1
while (1)
{
if (!PINB.0) {
PORTB.1=1;
};
}
пример с присвоением единицы PORTB.1
while (1)
{
if (!PINB.0) {
PORTB.1=1;
};
}
Последний раз редактировалось Масяня Пн июн 02, 2014 21:12:37, всего редактировалось 1 раз.
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: как связать два устройства по UART
Спойлер
Код: Выделить всё
UDR = 'A';-
Alkul
- Держит паяльник хвостом
- Сообщения: 933
- Зарегистрирован: Ср апр 13, 2011 11:09:20
- Откуда: Екатеринбург
Re: как связать два устройства по UART
Масяня писал(а):не понятно то как будет выглядеть команда отправки заглавных букв
Вы знаете, что такое ASCII-коды? В регистр UDR заносится передаваемый байт. Если принимающая сторона интерпретирует получаемые данные как ASCII- коды, то просто находите в таблице код нужного символа и записываете его в UDR.
ИС-пытатель писал(а):UDR = 'A';
Мне привычней запись UDR=0x41
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: как связать два устройства по UART
Alkul писал(а):Мне привычней запись UDR=0x41
Вы, наверное, тоже мазохист, как и я..
... Мы с тобой одной крови, брат!.. (Маугли)

Re: как связать два устройства по UART
не получается может я не правильно настроил чего.
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 03.06.2014
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega8.h>
// Standard Input/Output functions
#include <stdio.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// 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=0b00000001;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// 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
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 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: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=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
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{if (!PINB.0);
UDR='A';
}
}
Спойлер
/*****************************************************This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 03.06.2014
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega8.h>
// Standard Input/Output functions
#include <stdio.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// 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=0b00000001;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// 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
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 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: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=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
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{if (!PINB.0);
UDR='A';
}
}
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
-
Alkul
- Держит паяльник хвостом
- Сообщения: 933
- Зарегистрирован: Ср апр 13, 2011 11:09:20
- Откуда: Екатеринбург
Re: как связать два устройства по UART
ИС-пытатель писал(а):Вы, наверное, тоже мазохист, как и я..![]()
Масяня писал(а):не получается может я не правильно настроил чего.
Что именно "не получается"?
Re: как связать два устройства по UART
отправляет не то что надо а не понятные символы. можно пример с настроенным и работающем USART
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
-
Alkul
- Держит паяльник хвостом
- Сообщения: 933
- Зарегистрирован: Ср апр 13, 2011 11:09:20
- Откуда: Екатеринбург
Re: как связать два устройства по UART
Масяня писал(а):отправляет не то что надо а не понятные символы
Можно уже схему увидеть? Я на Си не пишу, но в принципе его знаю. Код инициализации USART вроде верный.
Как определили, что отправляет "непонятные символы"?
Осциллографом пробовали смотреть? Самое милое дело - можно точно увидеть, что отправляется по USART.
- Pavel_1978
- Опытный кот
- Сообщения: 830
- Зарегистрирован: Пт ноя 16, 2007 11:21:37
Re: как связать два устройства по UART
Alkul писал(а):Масяня писал(а):отправляет не то что надо а не понятные символы
Осциллографом пробовали смотреть? Самое милое дело - можно точно увидеть, что отправляется по USART.
А еще милее - отрабатывать обмен по USART смотря в терминале (виндовый гипертерминал или что то более заточенное) что МК шлет, и из терминала же ему ответы давать... тогда сразу будет видно например что скорость разная, а осцил - во первых не у всех есть, а во вторых на аналоговом (тот что с зеленым лучом) даже отследить передачу единичного символа, если он не посылается постоянно в цикле, нетривиальная задача...
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: как связать два устройства по UART
while (1)
{if (!PINB.0);
UDR='A';
Проблема в том, что вы не должны посылать в UDR данные до тех пор, пока не выйдет предыдущая инфа.
В данном случае - затираете.
Дальше - самостоятельно.
{if (!PINB.0);
UDR='A';
Проблема в том, что вы не должны посылать в UDR данные до тех пор, пока не выйдет предыдущая инфа.
В данном случае - затираете.
Дальше - самостоятельно.