atmega16串口通信
清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存器与发送缓冲寄存器中没有要传送的数据。发送器禁止后,TxD引脚恢复其通用I/O功能。 • Bit 2 – UCSZ2: 字符长度 UCSZ2与UCSRC寄存器的UCSZ1:0结合在一起可以设置数据帧所包含的数据位数(字符长度)。 • Bit 1 – RXB8: 接收数据位 8 对9 位串行帧进行操作时,RXB8 是第9 个数据位。读取UDR 包含的低位数据之前首先要读取RXB8。 • Bit 0 – TXB8: 发送数据位8 对9 位串行帧进行操作时,TXB8 是第9 个数据位。写UDR 之前首先要对它进行写操作。 USART 控制和状态寄存器C -UCSRC • Bit 7 – URSEL: 寄存器选择 通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UCSRC 时,该位为1 ;当写UCSRC 时, URSEL 为1。 • Bit 6 – UMSEL: USART 模式选择 通过这一位来选择同步或异步工作模式。 • Bit 5:4 – UPM1:0: 奇偶校验模式 这两位设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,那么在发送数据,发送器都会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会产生一奇偶值,并与UPM0 所设置的值进行比较。如果不匹配,那么就将UCSRA 中的PE 置位。 • Bit 3 – USBS: 停止位选择 通过这一位可以设置停止位的位数。接收器忽略这一位的设置。 • Bit 2:1 – UCSZ1:0: 字符长度 UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据位数(字符长度)。 • Bit 0 – UCPOL: 时钟极性 这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL 设置了输出数据的改变和输入数据采样,以及同步时钟XCK 之间的关系。 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 进行初始化。初始化过程通常包括波特率的设定,帧结构的设定,以及根据需要使能接收器或发送器。对于中断驱动的USART 操作,在初始化时首先要清零全局中断标志位( 全局中断被屏蔽) 串口初始化: 使用串口->使能接收 ->使能发送->波特率(本例使用 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
atmega16串口通 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)