[C8051F320]C8051F320的串口工作机…

    问题描述:串口是非常重要的通信方式,特别在程序的调试与测试阶段,可以打印自定义的调试信息以供判断程序的运行情况。C8051F320只有一个串口UART0,是基于标准8051串口的,现在打算利用该串口来传一些数据,因此对其使用做下记录。
    UART0:异步全双工,可工作在标准8051串口的模式1和模式3下。增强型波特率支持。在程序将串口缓冲中的数据读走后可以立即接收下一个字节。UART0有两个SFR,SCON0用于控制,SBUF0为串口缓存。SBUF0是接收和发送两用的,写入SBUF0寄存器时作用于发送寄存器,读SBUF0时作用于接收寄存器。
    开UART0中断时,一次发送完成(此时SCON0中TI0置1)或SBUF0中字节被读取(SCON0中RI0置1)都会跳入中断处理。而且中断标志TI0和RI0都要软件清零。由于发送和接收中断都是跳入同一个中断处理程序中,因此UART0中断处理程序中要软件判别是接收中断发生还是发送中断发生。UART0串口数据的接收是通过RX引脚(P0.5),UART0串口数据的发送是通过TX引脚(P0.4)。
    其实C8051F320还提供串口的CTS和RTS引脚,这是用于串口的握手的,我在硬件电路中没有连接这两个引脚,串口的使用一般需要RX,TX,GND三个引脚即可。
    波特率的产生:UART0使用Timer1来产生波特率的,Timer1工作在8位自动加载模式。TX时钟有Timer1的TL1产生,RX时钟由TL1的拷贝产生(使用者无法直接操作)。
[C8051F320]C8051F320的串口工作机制学习

    TX和RX定时器溢出除以2来产生TX和RX波特率。
    Timer1的时钟源可以是多种:SYSCLK,SYSCLK/4,SYSCLK/12,SYSCLK/48,外部晶振时钟/8,外部输入T1。串口波特率的计算公式如下:
[C8051F320]C8051F320的串口工作机制学习
    其中T1_CLK即Timer1的时钟源。
    工作模式:UART0可以是8位UART和9位UART,我使用的是8位UART,因为MCU模块作为从机与主机进行通信。如果是一个主机多个从机的多机通信,就要选择用9位UART工作模式。

你可能感兴趣的:(Arch-51)