单片机c语言教程:C51开关分支语句
SM0、SM1 为串行口工作模式设置位,这样两位能对应进行四种模式的设置。看表 8-2 串行口工作模式设置。
SM0 | SM1 | 模 式 | 功 能 | 波特率 |
0 | 0 | 0 | 同步移位寄存器 | fosc/12 |
0 | 1 | 1 | 8 位 UART | 可变 |
1 | 0 | 2 | 9 位 UART | fosc/32 或 fosc/64 |
1 | 1 | 3 | 9 位 UART | 可变 |
表 8-2 串行口工作模式设置
在这里只说明最常用的模式 1,其它的模式也就一一略过,有兴趣的朋友能找相关的 硬件资料查看。表中的 fosc 代表振荡器的频率,也就是晶体震荡器的频率。UART 为(Universal Asynchronous Receiver)的英文缩写。
SM2 在模式 2、模式 3 中为多处理机通信使能位。在模式 0 中要求该位为 0。
REM 为允许接收位,REM 置 1 时串行口允许接收,置 0 时禁止接收。REM 是由软件置位或 清零。如果在一个电路中接收和发送引脚 P3.0,P3.1 都和上位机相连,在软件上有串行口中断 处理程序,当要求在处理某个子程序时不允许串行口被上位机来的控制字符产生中断,那么可 以在这个子程序的开始处加入 REM=0 来禁止接收,在子程序结束处加入 REM=1 再次打开串行口 接收。大家也能用上面的实际源码加入 REM=0 来进行实验。
TB8 发送数据位 8,在模式 2 和 3 是要发送的第 9 位。该位能用软件根据需要置位或 清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是 数据帧。
RB8 接收数据位 8,在模式 2 和 3 是已接收数据的第 9 位。该位可能是奇偶位,地址/ 数据标识位。在模式 0 中,RB8 为保留位没有被使用。在模式 1 中,当 SM2=0,RB8 是已接 收数据的停止位。
TI 发送中断标识位。在模式 0,发送完第 8 位数据时,由硬件置位。其它模式中则是在 发送停止位之初,由硬件置位。TI 置位后,申请中断,CPU 响应中断后,发送下一帧数据。 在任何模式下,TI 都必须由软件来清除,也就是说在数据写入到 SBUF 后,硬件发送数据,
中断响应(如中断打开),这个时候 TI=1,表明发送已完成,TI 不会由硬件清除,所以这个时候必须用软件对其清零。
RI 接收中断标识位。在模式 0,接收第 8 位结束时,由硬件置位。其它模式中则是在接 收停止位的半中间,由硬件置位。RI=1,申请中断,要求 CPU 取走数据。但在模式 1 中,SM2=1 时,当未收到有效的停止位,则不会对 RI 置位。同样 RI 也必须要靠软件清除。
常用的串行口模式 1 是传输 10 个位的,1 位起始位为 0,8 位数据位,低位在先,1 位停止 位为 1。它的波特率是可变的,其速率是取决于定时器 1 或定时器 2 的定时值(溢出速率)。 AT89c51 和 AT89C2051 等 51 系列芯片只有两个定时器,定时器 0 和定时器 1,而定时器 2是 89C52 系列芯片才有的。
评论