您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 上位机PC与单片机通信
8-1串行通信基础知识8-2串行口及控制寄存器8-3串行通信工作方式8-4串行口的应用第8章串行数据通信8-1串行通信基础知识一、串行通信基本原理:并行数据传送同步串行异步(用于单片机中)并行数据传送串行数据传送原理各数据位同时传送数据位按位顺序进行优点传送速度快、效率高最少只需一根传输线即可完成:成本低缺点数据位数→传输线根数:成本高速度慢应用传送距离<30米,用于计算机内部几米~几千公里,用于计算机与外设之间异步通信的双方需要两项约定:1.字符格式:一帧字符位数的规定:数据位,校验位,起始位和停止位。2.波特率(位/秒)和传送速率的规定:例:要求每秒传送120个字符,每帧为10位。解:B=120×10=1200波特每位0.83ms数据位传送输率=120×8=960位/秒(二)同步通信:以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符标识,硬件要求高,通讯双方须严格同步。二、串行通信的基本方式:(一)异步通信:以字符为传送单位用起始位和停止位标识每个字符的开始和结束字符,间隔不固定,只需字符传送时同步即可。异步通讯常用格式:一个字符帧D0D1D2D3D4D5D6D7停止位起始位三、串行接口功能:(1)发送器:并串数据格式转换,添加标识位和校验位,一帧发送结束,设置结束标志,申请中断。(2)接收器:串并数据格式转换,检查错误,去掉标识位,保存有效数据,设置接收结束标志,申请中断。(3)控制器:接收编程命令和控制参数,设置工作方式:同步/异步、字符格式、波特率、校验方式、数据位与同步时钟比例等。四、串行数据传送方向:1、单工通讯:数据单向传送。(1条数据线,单向)2、半双工通讯:数据可分时双向传送。(2条数据线,双向)3、全双工通讯:可同时进行发送和接收。(1条或2条数据线,双向)发送器接收器地线数据线发送接收器接收发送器地线数据线发送接收器接收发送器地线数据线五、异步串行通信的信号形式:1、远距离直接传输数字信号,信号会发生畸变,因此要把数字信号转变为模拟信号再进行传送。可利用光缆、专用通信电缆或电话线。方法:通常使用频率调制法(频带传送方式)。发方收方解调器调制器“0”“1”“0”市话线电平信号频率信号“1”通常:“1”:1270Hz或2225Hz;“0”:1070Hz或2025Hz。2、因通信时(有干扰)信号要衰减,所以常采用RS232电平负逻辑,拉开“0”和“1”的电压档次,以免信息出错:RS232负逻辑(EIA电平):“0”:+3V—+25V;“1”:-3V—-25V。最大传输信息的长度为15米。TTL正逻辑:“0”:0—2.4V;“1”:3.6V—+5V;高阻:2.4V—3.6V。TTL电平直接传输距离一般不超过1.5米。RS232负逻辑:“0”:+5V—+15V;“1”:-5V—-15V。最大传输信息的长度为15米。RS-232C(电平转换芯片为MAX232)RS-422RS-4858-2串行口及控制寄存器串行接口输入/输出引脚:TXD(P3.1)、RXD(P3.0)数据格式:按不同方式,一帧数据位数8/10/11发送/接收时,数据皆低位在前。一帧字符发送/接收结束,置位标志位(TI/RI),并申请串行中断。中断控制:中断允许位ES、总允许EA;中断入口:0023H。D0D1D2D3D4D5D6D7停止位起始位D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D8停止位起始位D71个全双工串行接口,可同时进行发送和接收。8-2-1MCS-51串行接口一、串行接口控制:1.数据缓冲器SBUF:发送SBUF和接收SBUF共用一个地址99H。1)发送SBUF存放待发送的8位数据,写入SBUF将同时启动发送。发送指令:MOVSBUF,A2)接收SBUF存放已接收成功的8位数据,供CPU读取。读取串行口接收数据指令:MOVA,SBUF2.节电控制寄存器PCON:SMOD(PCON.7):波特率加倍控制位。SMOD=1,波特率加倍;SMOD=0,则不加倍。SM0、SM1:选择串行口4种工作方式。SM2:多机控制位,用于多机通讯。REN:允许接收控制位,REN=1,允许接收;REN=0,禁止接收。TB8:发送的第9位数据位,可用作校验位和地址/数据标识位。RB8:接收的第9位数据位或停止位。TI:发送中断标志,发送一帧结束,TI=1,必须软件清零;RI:接收中断标志,接收一帧结束,RI=1,必须软件清零。SM0SM1SM2RENTB8RB8TIRI3.串行口控制/状态寄存器SCON(98H):请见P229!8-3串行通信工作方式(1)方式0:同步移位寄存器方式用于扩展并行I/O接口。1.一帧8位,无起始位和停止位。2.RXD:数据输入/输出端。TXD:同步脉冲输出端,每个脉冲对应一个数据位。3.波特率B=fosc/12如:fosc=12MHz,B=1MHz,每位数据占1s。4.发送过程:写入SBUF,启动发送,一帧发送结束,TI=1。接收过程:REN=1且RI=0,启动接收,一帧接收完毕,RI=1。SM0、SM1选择四种工作方式。发送时序写入SBUFRXD输出TXDTID0D1D2D3D4D5D6D7写REN=1RI=0RXD输入RI接收时序(a)(b)时序图:(2)方式1:8位数据异步通讯方式1.一帧10位:8位数据位,1个起始位(0),1个停止位(1)。2.RXD:接收数据端。TXD:发送数据端。3.波特率:用T1作为波特率发生器,B=(2SMOD/32)×T1溢出率。4.发送:写入SBUF,同时启动发送,一帧发送结束,TI=1。接收:REN=1,允许接收。接收完一帧,若RI=0且停止位为1(或SM2=0),将接收数据装入SBUF,停止位装入RB8,并使RI=1;否则丢弃接收数据,不置位RI。当REN=1,CPU开始采样RXD引脚负跳变信号,若出现负跳变,才进入数据接收状态,先检测起始位,若第一位为0,继续接收其余位;否则,停止接收,重新采样负跳变。数据采样速率为波特率16倍频,在数据位中间,用第7、8、9个脉冲采样3次数据位,并3中取2保留采样值。写入SBUF采样(a)发送时序图TXD数据输出TID0D1D2D3D4D5D6D7停止位起始位RXD输入数据(b)接收时序图D0D1D2D3D4D5D6D7停止位起始位RI检测负跳变时序图:(3)方式2和方式3:9位数据异步通讯方式1.一帧为11位:9位数据位,1个起始位(0),1个停止位(1)。第9位数据位在TB8/RB8中,常用作校验位和多机通讯标识位。2.RXD:接收数据端,TXD:发送数据端。3.波特率:方式2:B=(2SMOD/64)×fosc。方式3:B=(2SMOD/32)×T1溢出率。4.发送:先装入TB8,写入SBUF并启动发送,发送结束,TI=1。接收:REN=1,允许接收。接收完一帧,若RI=0且第9位为1(或SM2=0),将接收数据装入接收SBUF,第9位装入RB8,使RI=1;否则丢弃接收数据,不置位RI。(a)发送时序图写入SBUFTXD输出TIRXD输入(b)接收时序图RID0D1D2D3D4D5D6TB8停止位起始位D7D0D1D2D3D4D5D6RB8停止位起始位D7检测负跳变时序图:(4)计算波特率:方式0为固定波特率:B=fosc/12方式2可选两种波特率:B=(2SMOD/64)×fosc方式1、3为可变波特率,用T1作波特率发生器。B=(2SMOD/32)×T1溢出率T1为方式2的时间常数:X=28-t/T(请见P153)溢出时间:t=(28-X)T=(28-X)×12/foscT1溢出率=1/t=fosc/[12×(2n-X)]波特率B=(2SMOD/32)×fosc/[12×(28-X)]串行口方式1、3,根据波特率选择T1工作方式,计算时间常数。T1选方式2:TH1=X=28-fosc/12×2SMOD/(32×B)T1选方式1用于低波特率,需考虑T1重装时间常数时间。也可选工作方式3(请见P156)。4种方式比较:方式波特率传送位数发送端接收端用途01/12fosc(固定不变)8(数据)RXDRXD接移位寄存器,扩充并口12SMOD/32T1溢出率10(起始位、8位数据位、停止位)TXDRXD单机通讯22SMOD/64fosc11(第9位为1:地址;为0:数据)TXDRXD多机通讯32SMOD/32T1溢出率11位(同方式2)TXDRXD多机通讯8-4串行口的应用串行口初始化编程格式:SIO:MOVSCON,#控制状态字;写方式字且TI=RI=0(MOVPCON,#80H);波特率加倍(MOVTMOD,#20H);T1作波特率发生器(MOVTH1,#X);选定波特率(MOVTL1,#X)(SETBTR1)(SETBEA);开串行口中断(SETBES)发送程序:1、查询方式:TRAM:MOVA,@R0;取数据MOVSBUF,A;发送一个字符WAIT:JBCTI,NEXT;等待发送结束SJMPWAITNEXT:CLRTIINCR0;准备下一次发送SJMPTRAM2、中断方式:ORG0023H;串行口中断入口AJMPSINTMAIN:…;初始化编程TRAM:MOVA,@R0;取数据MOVSBUF,A;发送第一个字符H:SJMPH;其它工作SINT:CLRTI;中断服务程序INCR0MOVA,@R0;取数据MOVSBUF,A;发送下一个字符RETI先发送一个字符,等待TI=1后再发送下一个字符。接收程序:1.查询方式:WAIT:JBCRI,NEXT;查询等待SJMPWAITNEXT:MOVA,SBUF;读取接收数据MOV@R0,A;保存数据CLRRIINCR0;准备下一次接收SJMPWAIT2.中断方式:ORG0023HAJMPRINTMAIN:…;初始化编程H:SJMPH;其它任务RINT:CLRRI;清中断标志MOVA,SBUF;读取接收数据MOV@R0,A;保存数据INCR0RETIREN=1、RI=0等待接收,当RI=1,从SBUF读取数据。(一)串行口方式0:串行口通过接口74LS164实现:串行→并行的数据转换(显示器接口);通过接口74LS165实现:并行→串行的数据转换。SM0SM1SM2RENTB8RB8TIRI80C51RXDTXD74LS164...波特率为fosc/12的同步移位脉冲+5V共阳极Q7Q1Q0D(0)74LS164...Q7Q1Q0D(1)74LS164...Q7Q1Q0D(7)(7)(0)(1).........数据低→高串入并出80C51RXDTXD74LS165...QHS/LCLK(2)数据低→高并入串出P1.0SIN74LS165...QHS/LCLK(1)用于接移位寄存器扩充并口。程序:MOVR7,#20;送入20个字节MOVR0,#20H;送首地址为20HSETBF0;置1,F0=1(设置读入字节奇偶数标志)RCV0:CLRP1.0;P1.0=0(并行置入数据)SETBP1.0;P1.0=1(允许串行移位)RCV1:MOVSCON,#10H;允许方式0接收JNBRI,$;等待RI=1,顺序执行CLRRI;RI=0为下一帧数据的接收准备MOVA,SBUF;取数MOV@R0,AINCR0CPLF0;取反,F0=0JBF0,RCV2;F0=1则转移,F0=0顺序执行DECR7判是否接收完偶数帧,接收完则重新并行置入SJMPRCV1;否则再接收一帧RCV2:DJNZR7,RCV0;R7-1=0?≠0跳(判是否已读入预定字节数)……….;对读入数据进行处理MAINT:MOVSCON,#80H;串行口初始化MOVPCON,#80H;波特率SETBEASETBES;开串行口中断MOVR0,#50H;设数据指针MOVR7,#10H;数据长度LOOP:MOVA,@R0;取一个字符MOVC,P;加奇偶校验MOVTB8,CMOVSBUF,A;启动一次发送HERE:SJMPHERE;CPU执行其它任务(二)异步通讯程序举例:1.发送程序:将片内RAM50H
本文标题:上位机PC与单片机通信
链接地址:https://www.777doc.com/doc-3203366 .html