atmega16串口通信
USART 波特率寄存器- UBRRL和UBRRH
UCSRC寄存器與UBRRH寄存器共用相同的I/O地址。
• Bit 15 – URSEL: 寄存器選擇
通過該位選擇訪問UCSRC 寄存器或UBRRH 寄存器。當(dāng)讀UBRRH 時(shí),該位為0 ;當(dāng)寫UBRRH 時(shí), URSEL 為0。
• Bit 14:12 – 保留位
這些位是為以后的使用而保留的。為了與以后的器件兼容,寫UBRRH 時(shí)將這些位清零。
• Bit 11:0 – UBRR11:0: USART 波特率寄存器
這個(gè)12 位的寄存器包含了USART 的波特率信息。其中UBRRH 包含了USART 波特率高4 位,UBRRL 包含了低8 位。波特率的改變將造成正在進(jìn)行的數(shù)據(jù)傳輸受到破壞。寫UBRRL 將立即更新波特率分頻器。
進(jìn)行通信之前首先要對USART 進(jìn)行初始化。初始化過程通常包括波特率的設(shè)定,幀結(jié)構(gòu)的設(shè)定,以及根據(jù)需要使能接收器或發(fā)送器。對于中斷驅(qū)動(dòng)的USART 操作,在初始化時(shí)首先要清零全局中斷標(biāo)志位( 全局中斷被屏蔽)
串口初始化:
使用串口->使能接收 ->使能發(fā)送->波特率(本例使用 9600)->奇偶校驗(yàn)(disable)->數(shù)據(jù)位數(shù)(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(); //注意這句 調(diào)用串口初始化
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialised
評論