测试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 <iom32v.h> 
#include <macros.h> 
 
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<<UDRE)) ) 
; 
/* 将数据放入缓冲器,发送数据 */ 
UDR = data; 
} 
 
void main(void) 
{ 
        init_devices(); 
        while(1) 
        { 
        } 
} 
 
 
 |   
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册 
 
 
 
×
 
     
  
 |