头像-72063

cloudou

  • 广东省广州市
  • 单片机 嵌入式 EMC/EMI EDA/PCB RF/无线
  • 工控电子

个人成就

获得 0 次赞

帮助过0人

ATmega32A串口通信奇怪问题

测试ATmega32A串口通信,使用内部1M振荡, 熔丝设置  通信发送ASCII码0~2,返回十六进制均为两个字节,3e 00, 4c 00, 66 00,如此简单的东西都无**常工作,令人费解。请大家帮帮忙,谢谢啦! //ICC-AVR application builder : 2015-09-05 10:23:35 // Target : M32 // Crystal: 1.0000Mhz #include #include void USART_Transmit( unsigned char data ); void port_init(void) { PORTA = 0x00; DDRA  = 0x00; PORTB = 0x00; DDRB  = 0x00; PORTC = 0x00;  DDRC  = 0x00; PORTD = 0x00; DDRD  = 0x00; } //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9615 (0.2%) void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x02; UCSRC = BIT(URSEL) | 0x06; UBRRL = 0x0C; //set baud rate lo UBRRH = 0x00; //set baud rate hi UCSRB = 0x98; } #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC void uart0_rx_isr(void) { //uart has received a character in UDR unsigned char i=0; i=UDR; USART_Transmit(i); } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); uart0_init(); MCUCR = 0x00; GICR  = 0x00; TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void USART_Transmit( unsigned char data ) { /* 等待发送缓冲器为空 */ while ( !( UCSRA & (1