串口I/O口共有四种工作方式,它的工作方式的控制主要靠串口控制寄存器SCON中的第七位SM0和第优尔位SM1来控制。SCON寄存器的结构如表4.1所示
表4.1 SCON存储器结构表
Mnemonic Add 7 6 5 4 3 2 1 0
SCON 98H SM0 SM1 SM2 REN TB8 RB8 TI RI
四种方式如下表4.2所示SM0.SM1:工作方式控制位(其中fosc为晶振频率)
表4.2 串口工作方式表
SM0 SM1 工作方式 说 明 波特率
0 0 0 同步移位寄存器 fosc/12
0 1 1 10位异歩收发 由定时器1控制
1 0 2 11位异步收发 fosc/32或fosc/64
1 1 3 11位异步收发 由定时器1控制
方式0 用同步的方式串行出入或输出数据,但并非真正的同步通信。在该方式下,由TXD引脚发送出同步位移脉冲,由RXD引脚送出或接受串行数据。串行数据的形式是8位数据,同步脉冲的宽度也是固定的为该单片机时钟频率的1/12(相当于一个机器周期)。
方式1 10位异步接收发送方式,此方式为经常使用的工作方式,串行数据位由TXD引脚传出,由RXD引脚将对方发来的串行数据接收进来。该方式下的波特率由定时控制器1所控制,通信双方因约定所使用的波特率。
方式2 11位异步接收发送方式,与方式1不同的是该方式可以在字符格式的最后长如第九位数据用于一些指令或奇偶校验等。
方式3 也是11为异步接收发送模式,字符格式与方式二相同,不同的是其波特率受定时器控制,并借用电源控制寄存器(PCON)的SMOD(表4.3)位来设置波特率的倍数。
表4.3 SMOD串行口波特率加倍位
Mnemonic Add 7 6 5 4 3 2 1 0
PCON 87H SMOD SMOD0
串行口波特率的配置是串行接口应用中最为关键的一步,它直接影响到串行口能否正常通信。表4.2中方式2存在2种选择,以下给出其波特率计算公式(4-1)。
4-1
对于方式1和方式3,波特率都是由定时器1的溢出率来决定的,而在实际的串行通信时定时器经常要采用定时器方式2(与上文串口方式2不同,这是定时器的工作方式,下面定时器中会提到如何设置)。也就是8位重装计数方式,采用对应的公式(4-2):
4-2
本系统中用串口完成数据通信,可以通过串口将接收到的数据显示。
(3) 内部定时/计数器
从串口波特率设定中可以看出,当串口工作为1或3时,定时器1的溢出率是一个本质的参数,下面说明如何控制该溢出率。
c51中有两个计数/定时器T1 和T0;每个计数器都有两个八位寄存器,即是十优尔位的寄存器。TH1、TL1分别是计数器T1的高八位和低八位存储区,TH0、TL0分别是计数器0的高八位和低八位存储区。在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON。TMOD(表4.4)和TCON(表4.6)是寄存器的名称,在写程序时就可以直接用这个名称来指定它们。 基于NRF905的无线呼叫系统设计与实现(11):http://www.youerw.com/jisuanji/lunwen_1185.html