标题: 51单片计算机串口开发详解 [打印本页]
作者: dagu 时间: 2014-12-26 00:00
标题: 51单片计算机串口开发详解
一.51单片计算机串口结构图如下:
二. SCON 是一个特殊功能寄存器说明:
用以设定串行口的工作方式、接收/发送控制以及设置状态标志
各位功能如下:
SM0和SM1 为工作方式选择位
SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。
在方式0时,SM2必须是0。在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。
REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。
在方式0和方式1中,该位未用。
RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。
TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。
RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。
三.串口开发例程,下面程式实现向单片机发关信息后,它收完后再返回送回来。
#include<reg52.h>
unsigned char flag,a;
void main()
{
TMOD=0x20; //设置定时器1为工作方式2,串口是靠在、定时器工作的
TH1=0xfd;
TL1 =0xfd; //装串口初值,设置串口波特率9600,计算出来的
TR1=1;//打开定时器
REN=1; // 打开串口允许位
SM0=0;
SM1=1;//设置串口工作方式1
EA=1; //打开总中断
ES=1; //打开串口中断
while(1)
{
if (RI==1) //这个是用来读取到P1口
{
RI=0;
P1=SBUF:
}
if(flag==1) //表明串口收到的数据可以用来发送
{
ES=0; //防止TI进入串口中断关串口中断
flag=0;
SBUF=a; //向发送SBUF送a
while(!TI); //等待 发送结束。未发送结束之前T1一直是0
TI=0; // 通过软件将TI置0防止中断后进入中断服务程序
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}
附:max232芯片接线图
max 232 内部合并了MC1488和MC1489能够实现TTL电平和232电平的双向转换
除了232接口外还有其它的接口,都有自己不同的特性
RS-485是一点对多点的通信接口,一般采用双绞线的结构。普通的PC机一般不带RS485接口,因此要使用RS-232C/RS-485转换器。对于单片机可以通过芯片MAX485来完成TTL/RS-485的电平转换。在计算机和单片机组成的RS-485通信系统中,下位机由单片机系统组成,上位机为普通的PC机,负责监视下位机的运行状态,并对其状态信息进行集中处理,以图文方式显示下位机的工作状态以及工业现场被控设备的工作状况。系统中各节点(包括上位机)的识别是通过设置不同的站地址来实现的。
作者: zllarry 时间: 2014-12-27 22:21
值得拥有
作者: machinnneee 时间: 2014-12-30 11:45
很详细的资料,谢谢分享
作者: machinnneee 时间: 2014-12-30 11:51
经过验证,程序可用
作者: lxl2255 时间: 2015-1-7 13:14
详细的资料,谢谢
作者: yyxtj 时间: 2015-4-16 20:28
好东西,学习一下,谢谢!
作者: 众生作废 时间: 2015-5-15 10:22
SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。
在方式0时,SM2必须是0。在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。
REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。
在方式0和方式1中,该位未用。
RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。
TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。
RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。
作者: 51hei电控04261 时间: 2015-12-24 11:45
很好的帖子
作者: 迷恋520冬天 时间: 2016-3-17 23:11
很好的帖子 帮助很大
作者: qq529593957 时间: 2016-3-18 00:34
很好的帖子 帮助很大很好的帖子 帮助很大
作者: 浅水初探 时间: 2016-9-1 15:11
我用这个程序在我的实验板上调试,可以通过,但烧入单片机运行,串口无显示,为何?
作者: qzyhlf 时间: 2019-1-25 10:52
值得拥有
作者: wengjiamin 时间: 2021-1-9 21:07
RS-485还要在终端接120欧姆电阻,防止信号反射
作者: zhangweiyu 时间: 2021-2-17 15:50
真是个好贴,我正好在学习,谢谢!
作者: lsh04 时间: 2021-2-20 23:20
很详细的资料,谢谢分享
作者: robter 时间: 2021-2-22 10:44
感谢楼主,很好的学习资料
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |