ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
113109
Vladimir Ljaschko (13.02.2008 14:45, просмотров: 3982)
В ATmege32 не устанавливается UCSRC=0x86; (остается 0) и формат посылки неправильный. Кристалл заменить? Иль чудеса какие? Заменил бы с ходу, но есть доработки на ножках. Полный текст инициализации: void UsartInit ( void ) { volatile char my_byte; UCSRA = 0 ; UCSRB = 0 ; // UCSRC = 0 | (1<<URSEL) ; //--------------------------------- set synchronous mode //-------------------------------- set double speed mode UCSRA |= ( 1 << U2X ) ; //-------------------------------- set baud rate // UBRRH=1; UBRRH = ( Fzq / 8 / USART0_BAUD_RATE - 1 ) >> 8 ; UBRRL = ( unsigned char ) ( Fzq / 8 / USART0_BAUD_RATE - 1 ) ; my_byte=(1<<URSEL); #if USART0_PARITY == EVEN my_byte |= ( 3 << UPM0 ) ; #elif USART0_PARITY == ODD my_byte |= ( 1 << UPM0 ) ; #elif USART0_PARITY != NO #error "Invalid USART0 parity check mode !!!" #endif //----------------------------- set data length #if USART0_DATA_LENGTH == 8 my_byte |= ( 3 << UCSZ0 ) ; #elif USART0_DATA_LENGTH == 7 my_byte |= ( 2 << UCSZ0 ) ; #elif USART0_DATA_LENGTH == 6 my_byte |= ( 1 << UCSZ0 ) ; #elif USART0_DATA_LENGTH != 5 #error "Invalid USART0 data length !!!" #endif //------------------------------- set stop bits #if USART0_STOP_LENGTH == 2 my_byte |= ( 1 << USBS0 ) ; #elif USART0_STOP_LENGTH != 1 #error "Invalid USART0 stop bits !!!" #endif UCSRC=my_byte; //0x86 UCSRC=my_byte; my_byte=UCSRC; my_byte=UCSRC; }