您的位置:首页 > 其它

单片机串口中断

2015-12-22 22:43 239 查看
 单片机串口中断

如何进行串口初始化

1.首先选择工作方式即SCON方式的选择(SCON,PCON)

2.波特率设置。

 ( TMOD TH1 TL1)

3.中断开启(EA)

4.开始(TR)

1)sm0, SM1为方式寄存器

1.串行工作方式0

串行口工作方式0时,串行口作同步移位寄存器使用。以RXD(P3.0)端作为数据的输入和输出端,而TXD(P3.1)提供移位的时钟脉冲。外接移位寄存器,实现数据并行输入或输出。工作方式0时,波特率为fosc/12,即一个机器周期移位一次。

2.方式1 波特率可变

在实际使用中,波特率是已知的,因此需要根据波特率的计算公式求定时初值X。用户只需要把定时初值设置到定时器1,就能得到所要求的波特率。

方式1为10位为一帧的异步串行通信方式。其帧格式为1个起始位、8个数据位和1个停止位。工作在方式1时,其波特率是可变的,波特率的计算方式为:

 波特率=2^(SMOD)/32*(定时器1的溢出率)

其中,SMOD为PCON寄存器最高位的值,其值为1或0.

当定时器1作为波特率发生器时,选用工作方式2(即自动加载定时初值方式)。选择方式2可以避免通过程序反复装入定时初值所引起的定时误差,使波特率更加稳定。假定计数初值为X,则计数溢出周期为:

溢出周期=12/fosc*(256-x)

溢出率为溢出周期的倒数。则波特率的计算公式为:

波特率=2^(SMOD)/32*(fosc)/(12*(256-x))

3. 串行工作方式2

方式2为11位为一帧的异步串行通信方式。其帧格式为1个起始位、9个数据位和1个停止位。在方式2下,字符还是8个数据位,只不过增加了一个第9个数据位(D8),而且其功能由用户确定,是一个可编程位。方式2的接收过程也与方式1基本类似,所不同的只在第9数据位上,串行口把接收到的前8个数据位送入SBUF,而把第九数据位送入RB8。

方式2的波特率是固定的,而且有两种,即fosc/32和fosc/64。当SMOD为0时,波特率为fosc/64,当SMOD为1的时候,波特率为fosc/32。

2)REN若要接受数据,REN要置位。

3)SM2——允许方式2、3的多机通信控制位

在方式2和3中,

若SM2=1 且接收到的第九位数据(RB8)为1,才将接收到的前八位数据送入接收SBUF中,并置位RI产生中断请求:否则丢弃前8位数据。

若SM2=0,则不论第九位数据(RB8)为1 还是为0, 都将前八位 送入接收SBUF中,并产生中断请求。

方式0时, SM2必须置为0。

波特率

方式0和方式2 的波特率是固定的,而方式1和方式3 的波特率是可变的,有TI溢出率决定。

4)TB8 RB8 

 

SBUF=数据。可以把数据看做是单片机寄存器的数据,所以是单片机里数据要发送。

代码

void serial(void) interrupt 4

{

char i;

if(RI)

  {

    RI=0;    //继续收

    i=SBUF;

    P1=i;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: