单片机串口中断
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;
}
}
如何进行串口初始化
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;
}
}
相关文章推荐
- C读取和写入一个二维数组
- 解决Windwos Server 2008缓存耗用大量物理内存
- 一个程序员工作三年的思考
- 心上莲花:见闻两则——杀业的果报
- C51中变量的存储器类型有
- CodeForces 599E Sandy and Nuts 状压DP
- 位操作练习
- IO
- 程序猿之华丽转身:五年 == 100W
- Linux下配置Caffe及其Python接口全过程记录(Ubuntu15.10_amd64+CUDA7.5)及训练mnist数据集
- MIT 6.828 JOS学习笔记1. Lab 1 Part 1: PC Bootstrap
- [模拟炉石]开坑
- 经济--技术分析
- 《健康时报》:请不要随便输液
- 面试
- 二维图形变换
- 关于图像特征提取
- JVM(一)
- chapter7:Linux文件与目录管理之(2)读取非文本文件
- Html设置超链接文字颜色