搜档网
当前位置:搜档网 › 51串口控制寄存器SCON

51串口控制寄存器SCON

51串口控制寄存器SCON
51串口控制寄存器SCON

串行口控制寄存器(SCON)

SCON就是MCS-51单片机得一个可位寻址得专用寄存器,用于串行数据通信得控制。单元地址为98H,位地址为98H~9FH。寄存器得内容及位地址表示如下:

各位得说明如下:

1) SM0 、SM1——串行口工作方式选择位

其状态组合与对应工作方式为:

SM0 SM1工作方式

0 0 方式0

0 1 方式1

1 0 方式2

1 1 方式3

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

在方式2与3中,若SM2=1且接收到得第九位数据(RB8)为1,才将接收到得前8

位数据送入接收SBUF中,并置位RI产生中断请求;否则丢弃前8位数据。若SM2

=0,则不论第九位数据(RB8)为1还就是为0,都将前8位送入接收SBUF中,并

产生中断请求。

方式0时,SM2必须置0。

3) REN——允许接收位

REN=0 禁止接收数据

REN=1 允许接收数据

4) TB8——发送数据位8

在方式2、3时,TB8得内容就是要发送得第9位数据,其值由用户通过软件来设置。5) RB8——接收数据位8

在方式2、3时,RB8就是接收得第9位数据。

在方式1时,RB8就是接收得停止位

在方式0时,不使用RB8

6) TI——发送中断标志位

在方式0时,发送完第8位数据后,该位由硬件置位

在其它方式下,于发送停止位之后,由硬件置位。

因此,TI=1表示帧发送结束,其状态既可供软件查询使用,也可请求中断。

TI由软件清“0”。

7) RI——接收中断标志位

在方式0时,接收完第8位数据后,该位由硬件置位。

在其它方式下,于接收到停止位之时,该位由硬件置位。

因此,RI=1表示帧接收结束,其状态既可供软件查询使用,也可请求中断。

RI由软件清“0”。

SCON:串行口控制寄存器

寄存器地址98H,位寻址9FH~98H。

位地址9F9E9D9C9B9A9998

位符号SM0SM1SM2REN TB8RB8TI RI

SM0、SM1:串行口工作方式选择位

SM2:多机通信控制位

REN:允许/禁止串行口接收得控制位

TB8:在方式2与方式3中,就是被发送得第9位数据,可根据需要由软件置1或清零,也可以作为奇偶校验位,在方式1中就是停止位。

RB8:在方式2与方式3中,就是被接收得第9位数据(来自第TB8位);在方式1中,RB8收到得就是停止位,在方式0中不用。

TI——串行口发送中断请求标志位: 当发送完一帧串行数据后,由硬件置1;在转向中断服务程序后,用软件清0。

RI——串行口接收中断请求标志位: 当接收完一帧串行数据后,由硬件置1;在转向中断服务程序后,用软件清0。

51单片机得简介——串行口、SCON

51单片机有一个全双工串行通讯口,它即可作为UART(Universal Asynchronous Receiver/Transmitter),也可作为一个同步移位寄存器。而且作为UART时,其具有多机通讯能力。

51单片机得串行口由发送控制、接收控制、波特率输入管理与发送/接收缓冲区SBUF(地址为99H)组成。SBUF作为发送与接收缓冲区其实际就是分开得两个器件,数据不会相互覆盖,但在对其寻址时都就是99H,51单片机会根据读或者写指令操作相应得器件。

站在汇编角度来瞧,51单片机得串行口通讯操作体现为累加器Acc(地址E0H)与发送/接收缓冲区SBUF之间得数据传递。当我们要发送数据时,对串行口完成初始化设置后,数据由累加器A传入SBUF,然后在发送控制器得控制下组成帧结构,并自动从TXD端口发出,发送结束后置位TI(TI就是特殊功能寄存器SCON得可独立寻址位,参见SCON介绍),如果要继续发送就在指令中将TI清0。接收数据时,相当于对串口完成初始化设置后,数据由SBUF传入累加器Acc,在置位允许位(即设置SCON得独立寻址位REN为1)后才开始进行串行接收操作,在接收控制器控制下,通过移位寄存器将串行数据输入SBUF,接收结束后将RI(SCON中可独立寻址位)置位,最后将数据送累加器Acc。

特殊功能寄存器SCON就是串行口控制寄存器,用于存放串行口得控制与状态信息,其地址为98H,具有位寻址功能,其各位得结构如下图所示:

其中各个位得功能及含义如下:

SM0、SM1:串行口工作方式选择位,其组合含义如下图所示:

SM2:多机通讯控制位。在方式2与方式3中用于多机通讯控制,在方式2、方式3得接收状态中,若SM2=1,当接收到得第9位(同时系统将第9位值赋予RB8)为0时,舍弃接收到得数据,RI置0;若第9位为1时,将接收到得数据送入接收SBUF中,并将RI 置1;而对于方式1,接收到有效得停止位时,将RI置1。对于方式0,SM2应该置0。

REN:允许接收位。REN置1时允许接收数据,REN由指令置位或者复位。

TB8:第9位发送得数据。多机通讯时(即方式2、方式3)TB8表示主机发送得就是地址还就是数据,TB8=0表示发送得就是数据,TB8=1表示发送得就是地址。TB8由指令置位或者复位。

RB8:第9位接收得数据。用来存储接收到得第9位数据,用于标明接收到得数据特征或者用于校验。对于方式0,不使用RB8。

TI:发送中断标志,由硬件设置,由软件清0。方式0串行发送完8位数据后置位,其它方式串行发送停止位后置位。

RI:接收中断标志,由硬件设置,由软件清0。方式0接收完8位数据后置位,其它方式接收到停止位时置位。

51单片机借用了PCON得D7位作为串行波特率系数SMOD控制位,PCON不可位寻址,其地址为87H,当SMOD=1时,波特率加倍。SMOD在PCON中得位置如下图所示:

用Visual Basic 实现串口通信的三种方法

网络用V isual Basic实现 串口通信的三种方法 ●赵海燕 目前,V isual Basic(简称V B)已成为WINDOWS系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。V B支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。在V B应用程序中可以方便地调用WINDOWS API 函数,使得编程效率提高,应用功能增强。 利用V B提供的这些功能,我们可以有三种方法完成串口通信。一种是用V B提供的具有强大功能的通信控件;另一种方法是调用WINDOWS API函数,使用WINDOWS提供的通信函数编写移植性强的应用程序;第三是利用文件的输入/输出完成,该方法简便易行,但有一定的局限性。 一、利用通信控件(MSCOMM)完成串口通信 V B提供了通信控件M SCOM M,文件名为M SCOM M.V BX。该控件可设置串行通信的数据发送和接收,对串口状态及串行通信的信息格式和协议进行设置。在通信过程中可以触发OnC omm事件,在该事件过程进行数据检验处理及检错,还可以通过编程访问C ommE vent属性来了解通信的情况,进行收发数据的处理。每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。 1.通信控件的事件及基本属性 (1)事件 OnC omm:通信控件只提供了一个事件,该事件的触发可以对串口的通信事件及错误进行处理。通过对C ommE vent属性的判断可知当前的通信错误和事件,分别对每个C om2 mE vent值进行编程就完成了对各个错误和事件的处理。如: C ommE vent=M SCOM M—EV—SEND表示发送事件。这些信息可从V B提供的常量文件CONST ANT.T XT中查出。 (2)属性 C ommP ort:设置通信控件与哪个串口相连接,设置并返回通信口号。 S ettin g:设置通信的信息格式,为字符型。顺序为:波特率、校验、数据位、停止位。 P ortO p en:布尔型、开关通信口。 In p utLen:从接收缓冲区读取字符个数。 In p ut,Out p ut:读取接收缓冲区或写入发送缓冲区字符。 以上五种属性对串口完成基本的设置和操作,下面的三种属性是描述如何利用V B提供的事件驱动机制来实现通信。 C ommE vent:返回通信过程中产生的错误信息及事件,了解通信状况。 ST hresh old:设置并返回不触发OnC omm事件时发送缓冲区被允许的最少字符数。当缓冲区的字符少于设置的值时,则触发OnC omm事件,并把C ommE vent设为M SCOM M M—EV—SEND。当ST hresh old=0则禁止发送触发OnC omm事件,当ST hresh old=1则发送缓冲区为空时就触发OnC omm事件。利用这一属性,就可完成发送数据后的一系列操作。如:对刚发送的数据进行处理,当串口是和M ODEM通信时,发送完数据后可进行拆除线路联接、挂机等操作。 RT hresh old:设置并返回不触发OnC omm事件时接收缓冲区被允许的最多字符数。当缓冲区的字符多于设置的值时,则触发OnC omm事件,并把C ommE vent设为M SCOM M—EV—RECEIVE,当RT hresh old=0则禁止接收触发OnC omm事件,当RT hresh old=1则接收缓冲区有一个或更多字符时就触发OnC omm事件。利用这一属性,就可完成对串口接收数据的处理。 2.利用通信控件的实例 Sub F orm1—load() form1.sh ow ′设置COM1 https://www.sodocs.net/doc/7811177993.html,m p ort=1 comm1.S ettin g="9600,o,8,1"′波特率:9600奇校验,8位数据,1位停止位 comm1.In p utlen=0′读取接收缓冲区的所有字符comm1.OutBufferS ize=512′设置发送缓冲区为512字节comm1.InBufferS ize=512′设置接收缓冲区为512字节comm1.ST hresh old=0′禁止发送事件 comm1.RT hresh old=1′每一个字符到接收缓冲区都触发接收事件 ′设置COM2 https://www.sodocs.net/doc/7811177993.html,m p ort=2 comm2.S ettin g="2400,e,8 ,1"

汇编教程控制寄存器和系统地址寄存器

80386控制寄存器和系统地址寄存器如下表所示。它们用于控制工作方式,控制分段管理机制及分页管理机制的实施。 控制寄存器CRx BIT31 BIT30—BIT12 BIT11—BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 CR0 PG 0000000000000000 ET TS EM MP PE CR1 保留 CR2 页故障线性地址 CR3 页目录表物理页码000000000000 BIT47—BIT16 BIT15—BIT 全局描述符表寄存器GDTR 基地址界限中断描述符表寄存器IDTR 基地址界限 BIT15—BIT0 局部描述符表寄存器LDTR 选择子任务状态段寄存器TR 选择子BIT31—BIT0 BIT31—BIT0 BIT11—BIT0 基地址界限属性 基地址界限属性 <一>控制寄存器 从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。但CR1被保留,供今后开发的处理器使用,在80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位3 0及CR3中的位0至位11是保留位,这些位不能是随意值,必须为0。 控制寄存器CR0的低16位等同于80286的机器状态字MSW。 1.保护控制位 控制寄存器CR0中的位0用PE标记,位31用PG标记,这两个位控制分段和分页管理机制的操作,所以把它们称为保护控制位。PE控制分段管理机制。PE=0,处理器运行于实模式;PE=1,处理器运行于保护方式。PG控制分页管理机制。PG=0,禁用分页管理机制,此时分段管理机制产生的线性地址直接作为物理地址使用;PG=1,启用分页管理机制,此时线性地址经分页管理机制转换位物理地址。关于分页管理机制的具体介绍在后面的文章中进行。 下表列出了通过使用PE和PG位选择的处理器工作方式。由于只有在保护方式下才可启用分页机制,所以尽管两个位分别为0和1共可以有四种组合,但只有三种组合方式有效。

51单片机与PC串口通讯

目录 第1章需求分析 ............................................................................................................................ - 1 - 1.1课题名称 (1) 1.2任务 (1) 1.3要求 (1) 1.4设计思想 (1) 1.5课程设计环境 (1) 1.6设备运行环境 (2) 1.7我在本实验中完成的任务 (2) 第2章概要设计 ............................................................................................................................ - 2 - 2.1程序流程图 (2) 2.2设计方法及原理 (3) 第3章详细设计 ............................................................................................................................ - 3 - 3.1电路原理 (3) 3.1.1STC89C52芯片 ............................................................................................................. - 3 -3.2串口通信协议 (4) 3.3程序设计 (5) 3.3.1主程序模块 .................................................................................................................... - 5 - 3.3.2串口通讯模块 ................................................................................................................ - 6 - 3.3.3控制部分文件 ................................................................................................................ - 8 - 3.3.4公共部分模块 .............................................................................................................. - 11 -3.4电路搭建 (12) 3.4.1电路原理图 .................................................................................................................. - 12 -第4章上位机关键代码分析 ...................................................................................................... - 12 - 4.1打开串口操作 (12) 4.2后台线程处理串口程序 (15) 4.3程序运行界面 (18) 第5章课程设计总结与体会 ...................................................................................................... - 19 -第6章致谢 .................................................................................................................................. - 19 -参考文献........................................................................................................................................... - 19 -

51单片机串口通信及波特率设置

51单片机串口通信及波特率设置 MCS-51单片机具有一个全双工的串行通信接口,能同时进行发送和接收。它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。 1. 数据缓冲寄存器SBUF SBUF是可以直接寻址的专用寄存器。物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU写SBUF就是修改发送寄存器;读SBUF就是读接收寄存器。接收器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生重叠问题。 2. 状态控制寄存器SCON SCON是一个逐位定义的8位寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态,SCON即可以字节寻址也可以位寻址,字节地址98H,地址位为98H~9FH。它的各个位定义如下: MSB LSB SM0 SM1 SM2 REN TB8 RB8 TI RI SM0和SM1是串口的工作方式选择位,2个选择位对应4种工作方式,如下表,其中Fosc是振荡器的频率。 SM0 SM1 工作方式功能波特率 0 0 0 8位同步移位寄存器Fosc/12 0 1 1 10位UART 可变 1 0 2 11位UART Fosc/64或Fosc/32 1 1 3 11位UART 可变 SM2在工作方式2和3中是多机通信的使能位。在工作方式0中,SM2必须为0。在工作方式1中,若SM2=1且没有接收到有效的停止位,则接收中断标志位RI不会被激活。在工作方式2和3中若SM2=1且接收到的第9位数据(RB8)为0,则接收中断标志RB8不会被激活,若接收到的第9位数据(RB8)为1,则RI置位。此功能可用于多处理机通信。 REN为允许串行接收位,由软件置位或清除。置位时允许串行接收,清除时禁止串行接收。 TB8是工作方式2和3要发送的第9位数据。在许多通信协议中该位是奇偶位,可以按需要由软件置位或清除。在多处理机通信中,该位用于表示是地址帧还是数据帧。 RB8是工作方式2和3中接收到的第9位数据(例如是奇偶位或者地址/数据标识位),在工作方式1中若SM2=0,则RB8是已接收的停止位。在工作方式0中RB8不使用。 TI 为发送中断标志位,由硬件置位,软件清除。工作方式0中在发送第8位末尾由硬件置位;在其他工作方式时,在发送停止位开始时由硬件置位。TI=1时,申请中断。CPU 响应中断后,发送下一帧数据。在任何工作方式中都必须由软件清除TI。 RI为接收中断标志位,由硬件置位,软件清除。工作方式0中在接收第8位末尾由硬件置位;在其他工作方式时,在接收停止位的中间由硬件置位。RI=1时,申请中断,要求CPU取走数据。但在工作方式1中,SM2=1且未接收到有效的停止位时,不会对RI置位。在任何工作方式中都必须由软件清除RI。 系统复位时,SCON的所有位都被清除。 控制寄存器PCON也是一个逐位定义的8位寄存器,目前仅仅有几位有定义,如下所示:MSB LSB

智能仪器与PC串口通信的实现

福建电脑2010年第2期 图1SCPI 工作流程图 智能仪器与PC 串口通信的实现 管 平1,杨 丹2,胡新荣1 (1.武汉科技学院湖北武汉430073 2.长沙信息职业技术学校湖南长沙410610) 【摘要】:本文简要介绍了IEEE488.2标准,讨论了如何使用该协议进行智能仪器设备控制系统的编写.详细地介绍了SCPI 命令及其使用方法。利用Agilent 公司的IO suite 套件中的VISA 库实现对Agilent34401A 数字万用表的远程控制。 【关键词】:IEEE488.2,Agilent34401A ,SCPI 1、引言 1.1串口通信原理 在Windows 环境下,串行接口是系统资源的一部分。它本质功能是作为CPU 和串行设备间的编码转换器。当数据从CPU 经 过串行接口发送出去时,字节数据转换为串行的位。在接受数据时,串行的位被转换为字节数据。RS-232C 标准的全称是EIA-RS-232C 标准,其中EIA 代表美国电子工业协会,RS 代表推荐标准,232是标识号,C 代表RS232的最新一次修改。1.2SCPI 命令 Agilent34401A 数字多用表采用串口与IEEE488进行通信的技术,它能够得到精准、快速和可重复的测量结果。为了保证前向和后向兼容性,34401A 包括三种命令语言(SCPI 、Agi -lent3478A 和Fluke8840A/42A ),因此无需重写已有的测试软件。 SCPI (Standard Commands for Programmable Instruments )是可编程仪器标准命令,是一种建立在现有标准IEEE488.1和IEEE 488.2基础上,遵循了IEEE754标准中浮点运算规则、ISO646信息交换7位编码符号(相当于ASCll 编程)等多种标准的标准化仪器编程语言。它采用一套树状分层结构的命令集,提出了一个具有普遍性的通用仪器模型,采用面向信号的测量;它的助记符产生规则简单、明确,且易于记忆。SCPI 是以ASCII 字符组成的标准仪器命令语言,可以用于任何一种标准接口,如GPIB ,VXI ,RS232,USB ,LAN 。 SCPI 命令采用层次结构,系"树结构"语言。相关的命令集合到一起构成一个子系统,各组成命令称为"关键字",各关键字间用冒号":"分隔,如: SEN Se :FREQuency : VOLTage :RAN Ge ?[M INimum|MAXimum ] 方括弧([])表示选择性的关键字或参数。大括弧({})中为命令字串的参数。三角括弧(<>)表示必须用一数值来取代括号中的参数。(|)隔开多重参数的选择。 MEASure :VOLTage:DC?{|MIN|MAX|DEF},{|MIN|MAX|DEF} :VOLTage:AC?{|MIN|MAX|DEF},{|MIN|MAX|DEF} :CURRent:DC?{|MIN|MAX|DEF},{|MIN|MAX|DEF} :CURRent:AC?{|MIN|MAX|DEF},{|MIN|MAX|DEF} 从以上可以看出,SPCI 命令可以望文生意,简单明了,实际 SCPI 语言等于把各仪器的各种功能命令罗列起来完成某项测 量任务。 MEASure ?命令是设定仪器进行测量的最简单方法,在执 行这个命令的时候仪器必须先设置好所要求的状态,并立即执行测量。CONFigure 命令在执行的时候,仪器必须先将所要的配置预设成最好的设定,并且立即执行测量。 READ ?命令会将触发系统的状态,从"闲置"状态改为"等待触发"状态。在收到R EAD ?命令之后,且指定的触发条件满足时,测量便会开始,读数立即送到输出缓冲器上(读数资料必须输入到总线控制器上,否则输出缓冲器满了之后,测量就会停止)。INITiate 和FETCh?命令提供测量触发和读数取回最低限的控制。在配置好多用电表之后,使用INITiate 命令,它将使触发系统的状态,从"闲置"状态改为"等待触发"状态。在收到INITiate 命令之后,而指定的触发条件满足时,测量便会开始。读数将会存入多用电表的内部记忆体中。 .RST 重设多用电表电源开启时的配置。 .TST ? 执行多用电表的完整自我测试,传回值为"0"表示自我测试成功。它使用INITiate 将多用电表设至成"等待触发"状态,且在ExtTrig 端有脉冲进来的时候,量取一个读数,并将读数送到电表的内部记忆体上。2、硬件平台安装与配置 测试系统的建立,一般采用独立的测试或测量仪器,使用SCPI 命令或用软件驱动程序经GPIB ,USB ,LAN 接口发送ASCII 命令。 Agilent 34401A 数字多用表提供了一个GPIB 接口,在PC 和DMM 之间实现了简便稳定的连接能力。GPIB 接口满足IEEE-488.2标准,可以通过SCPI 命令进行远程控制。 我们选择NI 的AT-GPIB/TNT 卡与Agilent 34401A 进行通信.NI MAX 能发现所有NI 接口上的装置,但不能直接控制Ag -ilent 接口.如:VXI 的FireWire 接口,USB/GPIB 转换器,或PCL-GPIB 卡. Agilent 的Intuilink,VEE 和IO Libraries 能过NI -VISA 和NI488.2来连接GPIB-32.dll,如果应用程序使用VISA 编程,在对板卡基址配置完成后,先安装NI-VISA 软件包,再安装Agilent IO Libraries . 硬件安装与配置: 1)先安装NI-VISA IEEE488.2的板卡驱动程序.配置好GPIB 卡 2)设置万用表的通信方式:把agilent34401A 的通信方式设置为GPIB 通信方式,编程语言选择SCPI 。 3)安装Agilent 公司的IO 套件(iolibs_suite_14_2_8931_1_multimedia ),随IO 套件一起安装的还有的.net framework ,.net framework sp1,VISA 库,IO 套件必须要有VISA 库才能正常运行.在桌面任务栏的右下角会有一个IO 标志,打开Agilent connec -tion expert(安捷伦连接专家),它会自动检测到安装的硬件,使用GPIB0连接到万用表,这里也可测试计算机与(下转第137页 ) 168

51单片机串口通信,232通信,485通信,程序

51单片机串口通信,232通信,485通信,程序代码1:232通信 #include #define uchar unsigned char #define uint unsigned int uchar flag,a,i; uchar code table[]="i get"; void init() { TMOD=0X20; TH1=0XFD; TH0=0XFD; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; } void main() { init();

while(1) { if(flag==1) { ES=0; for(i=0;i<6;i++) { SBUF=table[i]; while(!TI); TI=0; } SBUF=a; while(!TI); TI=0; ES=1; flag=0; } } } void ser() interrupt 4 {

RI=0; a=SBUF; flag=1; } 代码2:485通信 #include #include"1602.h" #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i; uchar code table[]="i get "; void init() { TMOD=0X20; TH1=0Xfd; TL1=0Xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1;

} void main() { init_1602(); init(); while(1) { if(flag==1) { display(0,a); } } } void ser() interrupt 4 { RI=0; a=SBUF; flag=1; } Love is not a maybe thing. You know when you love someone.

51串口控制寄存器

SCON是MCS-51单片机的一个可位寻址的专用寄存器,用于串行数据通信的控制。单元地址为98H,位地址为98H~9FH。寄存器的内容及位地址表示如下: 各位的说明如下: 1) SM0 、SM1——串行口工作方式选择位 其状态组合和对应工作方式为: SM0 SM1工作方式 0 0 方式0 0 1 方式1 1 0 方式2 1 1 方式3 2) SM2——允许方式2、3的多机通信控制位 在方式2和3中,若SM2=1且接收到的第九位数据(RB8)为1,才将接收到的前8 位数据送入接收SBUF中,并置位RI产生中断请求;否则丢弃前8位数据。若SM2 =0,则不论第九位数据(RB8)为1还是为0,都将前8位送入接收SBUF中,并产 生中断请求。 方式0时,SM2必须置0。

3) REN——允许接收位 REN=0 禁止接收数据 REN=1 允许接收数据 4) TB8——发送数据位8 在方式2、3时,TB8的内容是要发送的第9位数据,其值由用户通过软件来设置。5) RB8——接收数据位8 在方式2、3时,RB8是接收的第9位数据。 在方式1时,RB8是接收的停止位 在方式0时,不使用RB8 6) TI——发送中断标志位 在方式0时,发送完第8位数据后,该位由硬件置位 在其它方式下,于发送停止位之后,由硬件置位。 因此,TI=1表示帧发送结束,其状态既可供软件查询使用,也可请求中断。 TI由软件清“0”。 7) RI——接收中断标志位 在方式0时,接收完第8位数据后,该位由硬件置位。 在其它方式下,于接收到停止位之时,该位由硬件置位。 因此,RI=1表示帧接收结束,其状态既可供软件查询使用,也可请求中断。 RI由软件清“0”。

实验单片机与PC机串口通信

实验单片机与PC机串口通信(C51编程)实验 要求: 1、掌握串行口的控制与状态寄存器SCON 2、掌握特殊功能寄存器PCON 3、掌握串行口的工作方式及其设置 4、掌握串行口的波特率(bondrate)选择 任务: 1、实现PC机发送一个字符给单片机,单片机接收到后即在个位、十位数码管上进行显示,同时将其回发给PC机。要求:单片机收到PC机发来的信号后用串口中断方式处理,而单片机回发给PC机时用查询方式。 采用软件仿真的方式完成,用串口调试助手和KEIL C,或串口调试助手和PROTEUS分别仿真。 需要用到以下软件:KEIL,VSPDXP5(虚拟串口软件),串口调试助手,Proteus。 (1)虚拟串口软件、串口调试助手和KEIL C的联调 首先在KEIL里编译写好的程序。

打开VSPD,界面如下图所示:(注明:这个软件用来进行串口的虚拟实现。在其网站上可以下载,但使用期为2周)。 左边栏最上面的是电脑自带的物理串口。点右边的addpair,可以添加成对的串口。一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。 接下来的一步很关键。把KEIL和虚拟出来的串口绑定。现在把COM3和KEIL绑定。在KEIL中进入DEBUG模式。在最下面的COMMAND命令行,输入 modecom39600,0,8,1 %分别设置com3的波特率、奇偶校验 位、数据位、停止位 assigncom3sout %把单片机的串口和COM3绑定到一 起。因为所用的单片机是

(以上参数设置注意要和所编程序中设置一致!) 打开串口调试助手 可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率9600,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。打开COM4。 现在就可以开始调试串口发送接收程序了。可以通过KEIL发送数据,在串口调试助手中就可以显示出来。也可以通过串口调试助手发送数据,在KEIL中接收。 实验实现PC机发送一个字符给单片机,单片机接收到后将其回发给PC机。在调试助手上(模拟PC)发送数据,单片机收到后将收到的结果回送到调试助手上。 2、以下在Proteus和串口调试助手实现的结果: 将编译好的HEX程序加载到Proteus中,注意这里需要加上串口模块,用来进行串行通信参数的设置。 点击串口,可以对串口进行设置: 用串口调试助手发送数据,即可看到仿真结果。 实验参考程序源文件在exp2-comm文件夹中。

51单片机usart通信程序(有CRC校验)

#include #include #include #define uchar unsigned char #define uint unsigned int //uchar const table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar p[]={0x01,0x03,0x25,0x23,0x00,0x01}; /* CRC 高位字节值表*/ uchar const crchi[] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0/**/, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 } ; /* CRC低位字节值表*/ uchar const crclo[] = { 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06/**/, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,

51单片机串口 (1)

一.基础 ●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,则禁止接收。 ●TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。 ●RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。

波特率的计算 在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。 串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。

方式0的波特率= fosc/12 方式2的波特率=(2SMOD /64)·fosc 方式1的波特率=(2SMOD /32)·(T1溢出率) 方式3的波特率=(2SMOD /32)·(T1溢出率) 当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=1,以启动定时器)。这时溢出率取决于TH1中的计数值。 T1 溢出率= fosc /{12×[256 -(TH1)]} 根据上面的等式计算出TH1 写串口程序的步骤 1.串行口工作之前,应对其进行初始化,主要是设置产生波特率的定 时器1、串行口控制和中断控制。具体步骤如下: ?确定T1的工作方式(编程TMOD寄存器)(方式2 0x20); ?计算T1的初值,装载TH1、TL1;(有波特率计算) ?启动T1(编程TCON中的TR1位); ?确定串行口控制(编程SCON寄存器);{SM0,SM1,REN} 串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。

单片机各寄存器汇总

符号 地址功能介绍 B F0H B寄存器 ACC E0H 累加器 PSW D0H 程序状态字 IP B8H 中断优先级控制寄存器 P3 B0H P3口锁存器 IE A8H 中断允许控制寄存器 P2 A0H P2口锁存器 SBUF 99H 串行口锁存器 SCON 98H 串行口控制寄存器 P1 90H P1口锁存器 TH1 8DH 定时器/计数器1(高8位)TH0 8CH 定时器/计数器1(低8位)TL1 8BH 定时器/计数器0(高8位)TL0 8AH 定时器/计数器0(低8位) TMOD 89H 定时器/计数器方式控制寄存器 TCON 88H 定时器/计数器控制寄存器 DPTR 82H 83H 83H数据地址指针(高8位) PC SP 81H 堆栈指针 P0 80H P0口锁存器 PCON 87H 电源控制寄存器 、PSW-----程序状态字。 D7D6D5D4D3D2D1D0 CY AC F0 RS1 RS0 OV P 下面我们逐一介绍各位的用途 CY:进位标志。 AC:辅助进、借位(高半字节与低半字节间的进、借位)。 F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。 RS1、RS0:工作寄存器组选择位。这个我们已知了。 0V:溢出标志位。运算结果按补码运算理解。有溢出,OV=1;无溢出,OV=0。什么是溢出我们后面的章节会讲到。

P :奇偶校验位:它用来表示ALU 运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,否则为0。 运算结果有奇数个1,P =1;运算结果有偶数个1,P =0。 例:某运算结果是78H (01111000),显然1的个数为偶数,所以P=0。 定时/计数器寄存器 1.工作方式寄存器TMOD(P134) TMOD 为T0.T1的工作方式寄存器,其各位的格式如下:TMOD D7 D6 D 5 D4 D3 D2 D1 D0 GATE C/-T M1 M0 GATE C/-T M1 M0 定时器1 定时器0 位7 GATE ——T1的门控位。 当GATE=0时,只要控制TR1置1,即可启动定时器T1开始工作; 当GATE=1时,除需要将TR1置1外,还要使INT1引脚为高电平,才能启动相应的定时器开始工作。 位6 C/—T ——T1的功能选择位。 当C/—T=0时,T1为定时器方式; 当C/—T=0时,T1为计数器方式; 位5和位4 M1和M0——T1的方式选择位。 由这两位的组合可以定义T1的3种工作方式 定时器T1工作方式选择表 如右表: 位3 GATE ——T0的门控位。 当GATE=0时,只要控制TR0置1,即可启动定时器T0开始工作; 当GATE=1时,除需要将TR0置1外,还要使INT0引脚为高电平,才能启动相应的定时器开始工作。 位2 C/T ——T1的功能选择位。 当C/—T=0时,T0为定时器方式; 当C/—T=0时,T0为计数器方式; 位1和位0 M1和M0—T0的方式选择位。 由这两位的组合可以定义T1的3种工作方式 定时器T0工作方式选择表 TMOD 不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半节定义定时器0,高半字节定义定时器1。复位时,TMOD 所有位均为0,定时器处于停止工作状态。 定时/计数器控制寄存器中断请求标志寄存器TCON(P183) TCON 的作用是控制定时器的启/停,标志定时器的溢出和中断情况。定时器控制寄存器TCON 各位格式如下:TCON(88H) 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 当有中断源发出请求时,有硬件将相应的中断标志位置 1.在中断请求被响应前,相应中断标志位被锁存在特殊功能寄存器TCON 或SCON 中。 TCON 为定时器T0和T1的控制寄存器,同时也锁住T0和T1的溢出中断标志及外部中断——INT0和— M1 M0 工作方式 功能描述 0 0 方式0 13位计数器 0 1 方式1 16位计数器 1 0 方式 2 自动再装入8位计数器 1 1 方式3 定时器1:停止计数 M1 M0 工作方式 功能描述 0 0 方式0 13位计数器 0 1 方式1 16位计数器 1 0 方式 2 自动再装入8位计数器 1 1 方式3 定时器0:分成2个8位计数器

控制寄存器和系统地址寄存器

二.控制寄存器和系统地址寄存器 80386控制寄存器和系统地址寄存器如下表所示。它们用于控制工作方式,控制分段管理机制及分页管理机制的实施。 控制寄存器CRx BIT31 BIT30—BIT12 BIT11—BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 CR0 PG 0000000000000000 ET TS EM MP PE CR1 保留 CR2 页故障线性地址 CR3 页目录表物理页码000000000000 BIT47—BIT16 BIT15—BIT0 全局描述符表寄存器GDTR 基地址界限中断描述符表寄存器IDTR 基地址界限 BIT15—BIT0 局部描述符表寄存器LDTR 选择子 任务状态段寄存器TR 选择子BIT31—BIT0 BIT31—BIT0 BIT11—BIT0 基地址界限属性 基地址界限属性 <一>控制寄存器 从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3。但CR1被保留,供今后开发的处理器使用,在80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位30及CR3中的位0至位11是保留位,这些位不能是随意值,必须为0。 控制寄存器CR0的低16位等同于80286的机器状态字MSW。 1.保护控制位 控制寄存器CR0中的位0用PE标记,位31用PG标记,这两个位控制分段和分页管理机制的操作,所以把它们称为保护控制位。PE控制分段管理机制。PE=0,处理器运行于实模式;PE=1,处理器运行于保护方式。PG控制分页管理机制。PG=0,禁用分页管理机制,此时分段管理机制产生的线性地址直接作为物理地址使用;PG=1,启用分页管理机制,此时线性地址经分页管理机制转换位物理地址。关于分页管理机制的具体介绍在后面的文章中进行。 下表列出了通过使用PE和PG位选择的处理器工作方式。由于只有在保护方式下才可启用分页机制,所以尽管两个位分别为0和1共可以有四种组合,但只有三种组合方式有效。PE=0且PG=1是无效组合,因此,用PG为1且PE为0的值装入CR0寄存器将引起通用保护异常。 需要注意的是,PG位的改变将使系统启用或禁用分页机制,因而只有当所执行的程序的代码和至少有一部分数据在线性地址空间和物理地址空间具有相同的地址的情况下,才能改变PG位。

MCS-51单片机串行接口

第七章MCS-51单片机串行接口 第一节串行通信的基本概念 (一)学习要求 1.掌握串行通信的基本概念。 2. 掌握异步通信和同步通信的区别。 (二)内容提要 一:基本概念及分类 串行通信是将数据的各位一位一位地依次传送。适合于计算机之间、计算机与外部设备之间的远距离通信。 串行通信从传输方式分为: 单工方式、半双工方式、全双工方式。 从接收方式来说,串行通信有两种方式: 异步通信方式、同步通信方式。 二:串行口的功能 MCS-51单片机中的异步通信串行接口能方便地与其他计算机或传送信息的外围设备(如串行打印机、CPU终端等)实现双机、多机通信。 串行口有4种工作方式,见表7-1。方式0并不用于通信,而是通过外接移位寄存器芯片实现扩展并行I/O接口的功能。该方式又称为移位寄存器方式。方式1、方式2、方式3都是异步通信方式。方式1是8位异步通信接口。一帧信息由10位组成,其格式见图7-2a。方式1用于双机串行通信。方式2、方式3都是9位异步通信接口、一帧信息中包括9位数据,1位起始位,1位停止位,其格式见图7-2b。方式2、方式3的区别在于波特率不同,方式2、方式3主要用于多机通信,也可用于双机通信。 表7-1 (三)习题与思考题 1、什么是并行通信?什么是串行通信?各有何优缺点? 答:并行通信指数据的各位同时传输的通信方式,串行通信是指各位数据逐位顺序传输的通信方式。 2、什么是异步通信?什么是同步通信?各有何优缺点? 3、什么是波特率?某异步串行通信接口每分钟传送1800个字符,每个字符由11位组成,请计算出传送波特率。 第二节MCS-51串行接口的组成 (一)学习要求

相关主题