Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USART на ATMega8
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Wolfenstein
Всем привет! Господа, такой вопрос. Решил поработать с 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!!!

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

Сергей Борщ
QUOTE (Wolfenstein @ Apr 23 2013, 18:17) *
По крайней мере так я вижу при симуляции в окошке регистров
Это особенность симулятора. Если вы почитаете описание, то там явно написано, что никакая периферия не симулируется.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.