单片机串口中断

来源:互联网 发布:混合视频矩阵 编辑:程序博客网 时间:2024/04/30 12:58
 单片机串口中断
如何进行串口初始化
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;
    }
}


0 0
原创粉丝点击