реклама на сайте
подробности

 
 
> USART на ATMega8
Wolfenstein
сообщение Apr 23 2013, 15:17
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 23-03-13
Из: Планета Земля
Пользователь №: 76 167



Всем привет! Господа, такой вопрос. Решил поработать с USARTом на ATMega8, код пишу на C++ в IARe 6.11. Сложность возникла в самом начале, в регистре управления UCSRC. Сложность в том, что этот регистр и регистр управления скоростью обмена UBRRH имеют один и тот же адрес. То, к какому из них обращается программа при записи данных определяет старший бит URSEL записываемого значения. Если он сброшен - данные записываются в UBRRH (например 0b01101101) и определяют скорость обмена, если установлен - данные пишутся в UCSRC (например 0b11101101) и конфигурируют другие параметры USART.
Проблема в том, что я не могу изменить один регистр независимо от другого. По крайней мере так я вижу при симуляции в окошке регистров - изменение UBRRH ведёт к такому же изменению UCSRC и наоборот, независимо от бита URSEL. Вот кусочек кода:

#include <iom8.h>
#include <intrinsics.h>
#define ENABLE_BIT_DEFINITIONS


void main() {

UCSRA |= (1<<1); //Удвоение скорости обмена

UCSRB |= (1<<7)|(1<<4); //Разреш. приёма и прерываний от приёмника

UBRRH = 0x12; //URSEL = 0, но UCSRC принимает тоже значение 0x02!!!

UCSRC |= (1<<7)|(1<<5); //URSEL = 1, но UBRRH принимает тоже значение 0xA0!!!

Может, это глюк компилятора при симуляции? Подскажите, кто знает. Заранее благодарен!

Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 19:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01323 секунд с 7
ELECTRONIX ©2004-2016