atmega16串口通信
USART 波特率寄存器- UBRRL和UBRRH
UCSRC寄存器與UBRRH寄存器共用相同的I/O地址。
• Bit 15 – URSEL: 寄存器選擇
通過該位選擇訪問UCSRC 寄存器或UBRRH 寄存器。當讀UBRRH 時,該位為0 ;當寫UBRRH 時, URSEL 為0。
• Bit 14:12 – 保留位
這些位是為以后的使用而保留的。為了與以后的器件兼容,寫UBRRH 時將這些位清零。
• Bit 11:0 – UBRR11:0: USART 波特率寄存器
這個12 位的寄存器包含了USART 的波特率信息。其中UBRRH 包含了USART 波特率高4 位,UBRRL 包含了低8 位。波特率的改變將造成正在進行的數據傳輸受到破壞。寫UBRRL 將立即更新波特率分頻器。
進行通信之前首先要對USART 進行初始化。初始化過程通常包括波特率的設定,幀結構的設定,以及根據需要使能接收器或發(fā)送器。對于中斷驅動的USART 操作,在初始化時首先要清零全局中斷標志位( 全局中斷被屏蔽)
串口初始化:
使用串口->使能接收 ->使能發(fā)送->波特率(本例使用 9600)->奇偶校驗(disable)->數據位數(8bit)->中斷(RX Complete interrupt)
//ICC-AVR application builder : 2007-5-10 下午 08:51:56
// Target : M16
// Crystal: 11.059Mhz
//UART0 initialisation
// desired baud rate: 9600
// actual: baud rate:9600 (0.0%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = 0x86;
UBRRL = 0x47; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98;
}
//省略了端口初始化
//call this routine to initialise 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 initialised
評論