libricon 0 23 августа, 2007 Опубликовано 23 августа, 2007 · Жалоба Здраствуйте, я делал устройство чтобы оно с уарта брало символы и в дисплей их загоняло на тини2313 и дернул меня черт переделать его на мегу8 написал, включил не работает уарт.... использую винавр от 2007 25 мая вроде и студию тоже вроде последнию... включаю симуляция и вижу что инициализация неверная void USART_init(void) { cli(); UCSRB = (1<<RXEN)|(1<<RXCIE); UCSRC = 0b10000110; UBRRH = 0x00; UBRRL = (unsigned char)47; sei(); } а именно, ккогда в ucsrc а записываю значение, он его же записывае и в ubrrh а когда я обнуляю ubrrh он обнуляет и контрольный регистр Ц..... бред какойто ........ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 23 августа, 2007 Опубликовано 23 августа, 2007 · Жалоба В некоторых аврах кое-какие регистры уарта совмещены. В соответствующем регистре надо выставить или сбросить битик при доступе к нужному регистру. Внимательно сравните описание уарта 2313 и м8. В частности бит URSEL UCSRC. Я так понимаю после его выставления работа идет с UCSRC. У вас он выставляется. Попробуйте инициализировать скорость перед инициализацией контрольного регистра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость =AVR= 23 августа, 2007 Опубликовано 23 августа, 2007 · Жалоба Из-за того, что при проектировании Меги8 не хватило одного адресочка, регистры UBRRH и UCSRC живут по одному и тому же адресу, и в какой из них будет проведена запись - определяется старшим (7) битом в этом адресе - URSEL. Когда он в 0 - запись идет в UCSRC, когда в 1 - в UBRRH. Для чтения UCSRC надо читать этот адрес дважды подряд при выключенных прерываниях. Кури даташыт, все разжевано в разделе USART Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 23 августа, 2007 Опубликовано 23 августа, 2007 · Жалоба Вот примерчик инициализации void USART_Init( unsigned int baudrate ) { unsigned char x; UBRRH = (unsigned char) (baudrate>>8); UBRRL = (unsigned char) baudrate; UCSRA = (1 << U2X); /* Enable UART receiver and transmitter */ UCSRB = ( ( 1 << RXCIE ) | ( 1 << RXEN ) | ( 1 << TXEN ) | ( 1 << TXCIE )); /* Set frame format: 8 data 2stop */ UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0); /* Flush receive buffer */ x = 0; USART_RxTail = x; USART_RxHead = x; USART_TxTail = x; USART_TxHead = x; } зы тоже как-то накололся - писал для m168, m128 - проблем не было. Потом вствил драйвер в код для m16 - перестало работать. Что только не делал - даже макс232 перепаял. Потом, когда уже когда ничего не оставалось, заглянул в даташит. Воистину "Если ты всё перепробовал, и ничего не получается, прочти, наконец, инструкцию. (Вольное переложение закона Мерфи)" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 23 августа, 2007 Опубликовано 23 августа, 2007 · Жалоба спасибо, страница 150 , читал , сюда нписал не сразу , сначала как раз в даташитах и лазил, короче менять пробовал. и и так и сяк и и по 2 раза и по 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 23 августа, 2007 Опубликовано 23 августа, 2007 · Жалоба А в железке? Может я не прав, но имхо в данном случае некорректность отображения в симуляторе студии не показатель. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 23 августа, 2007 Опубликовано 23 августа, 2007 · Жалоба вот и весь программе.... короче студия неверно показывает , я записал программу в камень, включил и заработало , т.е просто в студии неправельно пашет ну и протеус тоже неверно работает, у меня он ии с 2313 неверно работал спасибо за помощь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться