文档库 最新最全的文档下载
当前位置:文档库 › 第7单 串行通信2

第7单 串行通信2

第7单 串行通信2
第7单 串行通信2

二.方式1: 8位数据异步通讯方式

1. 设定为10位异步通信方式:1个起始位(“0”),8位数据位,1个停止位(“1”)。

2. RXD :接收数据端。 TXD :发送数据端。【注意和方式0不一样,恢复正常】

3.波特率:用T1作为波特率发生器 2

132

SM OD

B T =

?溢出率

4.发送:在TI =0时,当把数据写入SBUF 后,即可启动发送,串行口内自动把发送缓冲器中的数据送入发送移位寄存器。发送移位寄存器先发一位起始位,接着按先低位后高位,再发停止位,从而完成一帧的发送。串行数据均由TXT 端输出,TI 在发送停止位时,由硬件置TI=1。

接收:在RI =0和REN =1的条件下。在接收到第9数据位(即停止位)时,接收电路必须满足以下两个条件:

RI =0且SM2=0;

接收到的停止位为“1”时,

才能把接收到的8位字符存入“SBUF (接收)”中,把停止位送入RB8中,使RI =1并发出串行口中断请求(若中断开放)。若上述条件不满足,则这次收到的数据就被舍去,不装入“SBUF (接收)”中,这是不能允许的,因为这意味着丢失了一组接收数据。

在方式1下,发送时钟、接收时钟和通信波特率都由定时器溢出率脉冲经过32分频得到,并可由SMOD =1倍频。因此,方式1的波特率是可变的。

其实,SM2是用于方式2和方式3的。在方式1下,SM2应设为“0”。

方式1时序图:

三.方式2和方式3

方式2和方式3都是11为异步收发。两者的差异仅在于通信波特率有所不

同:方式2的波特率由fosc经过32或64分频后提供;方式3的波特率由定时器T1(或T2)的溢出率经32分频后提供。

方式2和方式3的发送过程类似于方式1,所不同的是方式2和方式3有9位有效数据位。发送时,CPU除要把发送字符装入“SBUF(发送)”外,还要把第9位数据位预先装入SCON的TB8中。第9数据位可由用户安排,可以是奇偶校验位,也可以是其它控制位。

第9数据位的值装入TB8后,便可用一条以SBUF为目的的传送指令把发送数据装入SBUF来启动发送过程。一帧数据发送完后,TI=1,CPU便可通过查询TI来以同样方法发送下一个字符帧。

方式2和方式3的接收过程也和方式1类似。所不同的是:方式1时RB8中存放的是停止位,方式2和方式3时RB8中存放的是第9数据位。因此,方式2和方式3时必须满足接收有效字符的条件变为:RI=0且SM2=0或收到的第9数据位为“1”,只有上述两个条件同时满足,接收到的字符才能送入SBUF,第9数据位才能装入RB8中,并使RI=1;否则,这次收到的数据无效,RI也不置位。

其实,上述第一个条件(RI=0)是要求SBUF空,即用户应预先读走SBUF 中的信息,以便让接收电路确认它已空。第二个条件(SM2=0)是提供了利用SM2和第9数据位共同对接收加以控制:如果第9数据位是奇偶校验位,则可令SM2=0,以保证串口能可靠接收;如果要求利用第9数据位参与接收控制,则可令SM2=1,然后依靠第9数据位的状态来决定接收是否有效。

方式2、3时序图:

7.3.4 串行口的编程及应用

一.串行口的初始化编程

1.串行口控制寄存器SCON位的确定

根据工作方式确定SM0、SM1位;对于方式2和方式3还要确定SM2位;如果是接收端,则置允许接收位REN 为1;如果方式2和方式3发送数据,则应将发送数据的第9位写入TB8中。

2.设置波特率

串行通信,收、发双方发送或接收的波特率必须一致。 方式0和方式2的波特率是固定的;

方式1和方式3的波特率是可变的,由T1溢出率确定。

定时器的不同工作方式,得到的波特率的范围不一样,这是由T1在不同工作方式下计数位数的不同所决定。

(1)方式0时,波特率固定为晶体振荡频率fosc 的1/12(fosc /12),不受SMOD 位值的影响。若fosc = 12 MHz ,波特率为1Mbit/s 。

(2)方式2时,波特率仅与SMOD 位的值有关。

方式2 波特率 =

2

64

SM OD

OSC f ?

如果SMOD =0,则所选波特率为fosc /64;如果SMOD =1,则所选波特率为fosc /32。

若fosc = 12 MHz : SMOD = 0,波特率 = 187.5 kbit/s ;SMOD = 1,波特率 为375 kbit/s 。

(3)方式1或方式3,常用T1作为波特率发生器,其关系式为 :

SM OD

T1?2

波特率=

定时器的溢出率32

(7-1)

由式(7-1)见,T1溢出率和SMOD 的值共同决定方式1或方式3的波特率。

【注:定时器T1的溢出率定义为定时时间的倒数 定时时间可参见CAP5

T1的定时时间=计数值×机器周期

N

212-?初值晶体振荡频率

T1的溢出率=1/定时时间t =

N

(2-?晶体振荡频率初值)12

所以: 波特率 = (2SM OD /32)×fosc/[12 ×(2n -初值)]

SM O D

N

1(

)12

2O SC f ?

?-2

波特率=

32初值

SM OD

N

112

OSC f ?

?

2

初值=2-

32

波特率

其中:N 为定时器T1的位数,它和定时器T1的设定方式有关。即 如果定时器T1为方式0,则N =13; 如果定时器T1为方式1,则N =16; 如果定时器T1为方式2,则N =8。

在实际设定波特率时,T1常设置为方式2定时(自动装初值),即TL1作为8位计数器,TH1存放定时初值。这种方式操作方便,也避免因软件重装初值带来的定时误差。

实际使用时,经常根据已知波特率和时钟频率fosc 来计算T1的初值X 。为避免繁杂的初值计算,常用的波特率和初值X 间的关系常列成下表的形式,以供查用。

B =9600,初值=252.74=253=FD B =4800,初值=249.48=250=FB

B=2400,初值=242.97=243=128+64+32+16+2+1=F3

B=1200,初值=229.95=230=128+64+32+4+2=11100110=E6 B =

600,初值=203.92=204=128+64+8+4=CC

4种方式比较: 二.串行口的应用 通常用于三种情况:

利用方式0扩展并行I/O 口;

利用方式1实现点对点的双机通信;

利用方式2或方式3实现多机通信。

1.利用方式0扩展并行I/O口

MCS-51单片机的串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口,当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。

AT89S51的串口的方式0是同步串行通信接口。方式0的典型应用是外扩串行输入并行输出的同步移位寄存器74LS164,实现并行I/O的扩展。

【例14-5】图14-2是利用串行口方式0通过74LS164外接8个LED发光二极管的接口电路,编写程序使发光二极管轮流显示。图中CLK端为同步脉冲输入端。STB为控制端,当STB=0时,则8位并行输出端关闭,但是允许串行数据从A和B端输入。当STB=1时,A和B输入端关闭,但允许8位并行数据输出。

H = HIGH(高)电平

h = 先于低-至-高时钟跃变一个建立时间(set-up time) 的HIGH(高)电平

L = LOW(低)电平

l = 先于低-至-高时钟跃变一个建立时间(set-up time) 的LOW(低)电平q = 小写字母代表先于低-至-高时钟跃变一个建立时间的参考输入(referenced input) 的状态↑= 低-至-高时钟跃变

当8位串行数据发送完毕后,引起中断,在中服务程序中,串行发出下一个8位数据。参考程序如下。

图14-2 串行口方式0外接8个LED发光二极管的接口电路【已调试,cap72、CAP72LED、CAP72LED2】

#include

#include

sbit P10 = P1^0;

unsigned char nIndex;

void Delay(unsigned int count);

main()

{

SCON = 0x00;/* 串行口初始化为方式0*/

ES=1;

EA=1;/* 全局中断允许*/

nIndex=1;

SBUF=nIndex;

P10=0;// MR为复位端

while(1)

{;}

}

void Serial_Port() interrupt 4 using 0

{

if(TI= =1)

{

TI=0;// 清除串行发送中断请求

P10=1;//

Delay( 500);

nIndex<<=1;

if(nIndex= =0) nIndex=1;

SBUF=nIndex;

}

}

void Delay(count )

{ unsigned char j;

unsigned int i;

for(i=0;i

for(j=0;j<120;j++);

}

#include

sbit P10=P1^0;

unsigned char nIndex;

void delay(unsigned int count);

void main(void)

{

SCON=0x00;

ES=1;

EA=1;

nIndex=1;

SBUF=nIndex;

P10=0;

while(1);

}

void serial_port() interrupt 4 using 0 {

if(TI==1)

{

TI=0;

P10=1;

delay(1000);

nIndex<<=1;

if(nIndex==0) nIndex=1;

SBUF=nIndex;

}

}

void delay(unsigned int count)

{

unsigned char j;

unsigned int i;

for(i=0;i

for(j=0;j<120;j++);

}

#include

sbit P10=P1^0;

unsigned char nIndex;

unsigned char zixing[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(unsigned int count);

void main(void)

{

SCON=0x00;

P10=0;

P10=1;

SBUF=0x92; // LED 上显示数字“5”,只发送一次,没有用中断

while(1);

}

#include

sbit P10=P1^0;

unsigned char zixing[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void delay(unsigned int count);

void main(void)

{

SCON=0x00;

ES=1;

EA=1;

SBUF=zixing[0];

P10=0;

while(1);

}

void serial_port() interrupt 4 using 0

{

if(TI= =1)

{ TI=0;

P10=1;

delay(1000);

SBUF=zixing[nIndex];

}

}

void delay(unsigned int count)

{

unsigned char j;

unsigned int i;

for(i=0;i

for(j=0;j<120;j++);

}

(2)方式0接收应用举例

图7-8为串行口外接两片8位并行输入串行输出的寄存器74LS165扩展两个

8位并行输入口的电路。

当74LS165的/S L端由高到低负跳变时,并行输入端的数据被置入寄存器;当/S L= 1,且时钟禁止端(第15脚)为低电平时,允许TXD(P3.1)串行移位

脉冲输入,这时在移位脉冲作用下,数据由右向左方向移动,以串行方式进入串行口的接收缓冲器中。

图7-8 扩展74LS165作为并行输入口

在图7-8中:

TXD(P3.1)作为移位脉冲输出与所有75LS165的移位脉冲输入端CLK相连;

RXD(P3.0)作为串行数据输入端与74LS165的串行输出端SO相连;P1.0与/

SH LD相连,用来控制74LS165的串行移位或并行输入;

74LS165的时钟禁止端(第15脚)接地,表示允许时钟输入。

当扩展多个8位输入口时,相邻两芯片的首尾(QH与SIN)相连。

在方式0,SCON中的TB8、RB8位没有用到,发送或接收完8位数据由硬件使TI或RI中断标志位置“1”,CPU响应TI或RI中断,在中断服务程序中向发送SBUF中送入下一个要发送的数据或从接收SBUF中把接收到的1B存入内

部RAM中。

#include

sbit SPL = P2^5;

void delay(unsigned int count)

{

unsigned char k;

while(count--)

{

for(k=0;k<120;k++); // 延时1ms

}

}

void main(void)

{

SCON = 0x10; // 0001 0000;方式0,REN=1 while(1)

{

SPL = 0;

SPL = 1; // S/L端出现正跳变

while(RI = = 0);

RI = 0;

P0 = SBUF;

delay(20);

}

}

7.3.2 单片机双机通信

在很多应用系统中,需要单片机之间进行通信。在串行通信中,如果通信的两个单片机之间距离很短(1m以内),则可以将两个单片机的串口直接相连,用串行方式进行通信,这时一个单片机的发送线(TXD)应与另一个单片机的接收线(RXD)相连。

如果两个需要相互通信的单片机之间距离较远(30m以内),可采用RS232接口延长通信距离,此时必须将单片机的TTL电平与RS232标准电平进行转换。需要在两个单片机接口部分增加RS232电平转换芯片,常用的此类芯片有MAX232等。

如果两个需要相互通信的单片机之间距离很远,可以采用RS485总线方式进行通信,该方式的传输距离一般在1500m以内,通信双方都需要采用MAX485芯片将TTL信号变为差模信号进行传送。

如果需要采用无线通信方式,可以在单片机串口上连接无线数据传输模块来实现。只要通信双方的单片机上都有无线传输模块,模块的通信方式设定一致(波特率、无线信号频率等),且单片机通信程序中的波特率与模块的相同,则基于无线方式的串口通信也非常简单。

通信双方约定发送方为甲机,接收方为乙机。首先甲机发送一个联络数据

(0XAA),乙机接收到后响应应答信号(0XBB),然后接收甲机发送的数据。

如果乙机接收到的数据不正确(检查的累加和),就向甲机发送0XFF,甲机收到0XFF后重传数据。

如果乙机接收到的数据正确(检查的累加和),就向甲机发送0X00,甲机收到0X00后重传数据。

#include

unsigned char data[10],chksum;

void init(void) // 甲机串口初始化程序

{

TMOD=0x20; // 0010 0000, 定时器T1,定时方式2(自动重载方式),Gate(T1)=0

TH1=0xFD; // 设定波特率9600

TL1=0xFD;

//PCON=0x00; // 设为0,可以省略

SCON=0x50; // 0101 0000,串口工作在方式1,允许接收REN=1

TR1=1; // 启动定时器T1

}

void send(void) //甲机发送子程序

{

unsigned char k;

do // 循环与乙机联络,等待乙机的回答信号“0XBB”

{

SBUF=0xAA; // 向乙机发送联络信号“0XAA”

while(TI= =0); // 等待发送“0XAA”结束

TI=0; // 清除TI标志

while(RI= =00); // 等待乙机发送响应信号

RI=0;

} while(SBUF!=0xBB); // 判定回答信号是否是“0XBB”,如果不是,继续联络

do // 接收到乙机的0XBB联络信号后,开始发送data[10]数组中的数据

{ // 或者接收到乙机发来的不是0X00,继续do循环

chksum=0;

for(k=0;k<10;k++) // 循环10次,发送数据,并对所发数据进行累加

{

SBUF=data[k]; // 发送数据

chksun+=data[k]; // 同时累加所发数据的和

while(TI= =0); // 等待数据发送结束

TI=0; // 清除TI标志

}

SBUF=chksun; // 10个数据发送完后,发送累加和结果

while(TI= =0);

TI=0;

while(RI= =0); // 接收乙机发回的累加和数据校验结果

RI=0;

} while(SBUF!=0x00); // 如果接收到的不是0X00,继续do循环,重发数据

}

void main(void) // 甲机主程序

{

init();

send();

while(1);

}

void init(void) // 乙机串口初始化程序

{

TMOD=0x20; // 0010 0000, 定时器T1,定时方式2(自动重载方式),Gate(T1)=0 TH1=0xFD; // 设定波特率9600

TL1=0xFD;

//PCON=0x00; // 设为0,可以省略

SCON=0x50; // 0101 0000,串口工作在方式1,允许接收REN=1

TR1=1; // 启动定时器T1

}

void recv(void) // 乙机接收程序

{

unsigned char k;

while(1)

{

while(RI= =0); // 等待接收甲机的联络信号0XAA

RI=0;

if (SBUF!=0XAA) // 判断接收的数据是否是“0XAA”

{ // 如果不是“0XAA”,则向甲机发送“0XFF”,

SBUF=0XFF; // 向甲机发送0XFF

while(TI= =0); // 等待发送结束

TI=0;

}

else // 接收到的是“0XAA”,则发回应答“0XBB”跳出循环,进入接收数据状态{

SBUF=0XBB; // 发回应答信号“0XBB”【自己加的】

While(TI= =0); 【等待发送“0XBB”结束】

TI=0; 【】

break; // 跳出while(1)循环【如果甲机不能接收0XBB,怎么办?】

}

}

while(1) // 接收到正确的联络信号0XAA后,开始接收数据

{

chksum=0;

for(k=0;k<10;k++) // 循环接收10个数据

{

while(RI= =0); // 等待一个数据的接收完成

RI=0;

data[k]=SBUF; // 接收到的数据放入data数组中

chksum+=data[k]; // 累加接收到的数据

}

while(RI= =0); // 等待接收甲机发送累加和数据

RI=0;

if(SBUF= =chksum) // 如果接收的累加和数据与本机的累加和结果一样

{

SBUF=0X00; // 向甲机发送“0X00”信号,表示数据正确

while(TI= =0); // 等待发送0X00的完成

TI=0;

break; // 退出while(1)循环

}

else // 如果接收的累加和数据与本机的累加和结果不一样

{

SBUF=0XFF; // 则向甲机发送0XFF,表示累加和结果不一样

while(TI= =0); // 等待发送结束【只要非“0X00”,就表示结果不一样】

TI=0;

}

}

}

void main(void) // 乙机主程序

{

init();

recv ();

while(1);

}

××××××××××××××××××××××××××××××××××××××

【例5-4】用8051单片机的串行口外接串入并出的芯片CD4094扩展并行输出口控制一组发光二极管,使发光二极管从左至右延时轮流显示。

CD4094是一块8位的串入并出的芯片,带有一个控制端STB。

当STB=0时,打开串行输入控制门,在时钟信号CLK的控制下,数据从串行输入端DATA一个时钟周期(CLK)一位依次输入;

当STB=1,打开并行输出控制门,CD4094中的8位数据并行输出。使用时,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接DA TA,STB用P1.0控制,8位并行输出端接8个发光二极管。

#include //包含特殊功能寄存器库

sbit P10=P1^0;

void main( )

{

unsigned char i,j;

SCON=0x00; //M1M0=00,方式0;

j=0x01;

//P10=0;

//for (; ;)

While(1)

{

P10=0; //STB=0,打开串行输入控制门

SBUF=j;

while (!TI);//等待发送完,发送完后TI=1

P10=1; //STB=1,打开并行输出控制门

TI=0;

for (i=0; i<=254; i++) {;}

j=j*2;

if (j= =0x00) j=0x01;

}

}

FPGA高速串行收发器,GTP,GTX

第1节高速数据连接功能简介 10.1.1 高速数据传输的背景 由于现代通信以及各类多媒体技术对带宽的需求迅猛增长,促使一系列基于差分、源同步、时钟数据恢复(clock and data recovery,CDR)等先进技术的互连方式应运而生。在传统设计中,单端互连方式易受干扰、噪声的影响,传输速率最高只能达到200~250Mbps/Line;在更高速率的接口设计中,多采用包含有源同步时钟的差分串行传输方式(如LVDS、LVPECL等),但在传输过程中时钟与数据分别发送,传输过程中各信号瞬时抖动不一致,破坏了接收数据与时钟之间的定时关系,因而传输速率很难超越1Gbps/通道。因此迫切需要新的高速数据传输技术。 在目前系统级互连速率已达到Gbps的设计中,先进的高速串行技术迅速取代传统的并行技术,成为业界的主流。高速串行技术不仅能够带来更高的性能、更低的成本和更简化的设计,克服了并行的速度瓶颈,还节省了I/O资源,使印制板的布线更简单。因此,被越来越广泛地应用于各种系统设计中,包括PC、消费电子、海量存储器、服务器、通信网络、工业计算和控制、测试设备等。高速串行传输一般采用差分线,迄今业界已经发展出了多种串行系统接口标准,例如千兆以太网、万兆以太网、PCI-Express、串行RapidIO、串行ATA 等。 10.1.2 Xilinx公司高速连接功能的解决方案 基于高速的需求和传统技术的弊端,Xilinx公司在Virtex 2 Pro以及更高系列的部分FPGA部集成了能实现高速数据收发Rocket I/O模块,采用了CML(CurrentMode Logic)、CDR、线路编码(8B/10B)和预加重等技术的Rocket I/O硬核模块,可极减小时钟扭曲、信号衰减和线路噪声对接收性能的影响,从而使传输速率进一步提高,最高可达10Gbps以上,可用于实现吉比特以太网、PCI-Express 等常用接口。 除了底层的物理层技术,Xilinx还提供带32 bit LocalLink用户接口的Aurora协议引擎参考设计。Aurora 协议是为私有上层协议或标准上层协议提供透明接口的串行互连协议,它允许任何数据分组通过Aurora协议封装,并在芯片间电路板间甚至机箱间传输。Aurora链路层协议在物理层采用千兆位串行技术,每物理通道的传输波特率可从622Mbps扩展到3.125 Gbps。Aurora还可将1至16个物理通道绑定在一起,形成一个16个通道绑定而成的虚拟链路,可提供50Gbps的传输波特率和最大 40Gbps的全双工数据传输速率。Aurora可支持广泛的应用围,如:路由器和交换机、远程接入交换机、HDTV广播系统、分布式服务器和存储子系统。在协议中,每个高速串行被称为“弄”。 协议引擎通过与高速收发器配合,可创建带LocalLink用户接口逻辑的串并、并串收发器。通过这一串行接口方案,用户无须自己设计有关串行接口所涉及的编解码、同步、速率匹配等问题。用户接口部分包含了所有必要的信号,如协议引擎的状态信号等。 Xilinx通过高品质的技术支持材料来支持其先进的芯片产品,这些材料包括广泛的知识产权核、参考设计、模拟电路模块、信号完整性(SI)设计套件、数字仿真的质量行为模型等。此外,Xilinx还提供了众多设计服务、开发平台以及最佳的FPGA实现工具,可确保用户的所有设计需求都能获得最佳产品和技术支持。

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.

高速串行通信技术的发展、设计及应用

随着对信息流量需求的不断增长,传统并行接口技术成为进一步提高数据传输速率的瓶颈。过去主要用于光纤通信的串行通信技术——SERDES正在取代传统并行总线而成为高速接口技术的主流。本文阐述了介绍SERDES收发机的组成和设计,并展望了这种高速串行通信技术的广阔应用前景。 SERDES是英文SERializer(串行器)/DESerializer(解串器)的简称。它是一种时分多路复用(TDM)、点对点的通信技术,即在发送端多路低速并行信号被转换成高速串行信号,经过传输媒体(光缆或铜线),最后在接收端高速串行信号重新转换成低速并行信号。这种点对点的串行通信技术充分利用传输媒体的信道容量,减少所需的传输信道和器件引脚数目,从而大大降低通信成本。 SERDES技术最早应用于广域网(WAN)通信。国际上存在两种广域网标准:一种是SONET,主要通行于北美;另一种是SDH,主要通行于欧洲。这两种广域网标准制订了不同层次的传输速率。目前万兆(OC-192)广域网已在欧美开始实行,中国大陆已升级到2.5千兆(OC-48)水平。SERDES技术支持的广域网构成了国际互联网络的骨干网。 SERDES技术同样应用于局域网(LAN)通信。因为SERDES技术主要用来实现ISO模型的物理层,SERDES通常被称之为物理层(PHY)器件。以太网是世界上最流行的局域网,其数据传输速率不断演变。IEEE在2002年通过的万兆以太网标准,把局域网传输速率提高到了广域网的水平,并特意制订了提供局域网和广域网无缝联接的串行WAN PHY。与此同时,SERDES技术也广泛应用于不断升级的存储区域网(SAN),例如光纤信道。 随着半导体技术的迅速发展,计算机的性能和应用取得了长足进步。可是,传统并行总线技术——PCI 却跟不上处理器和存储器的进步而成为提高数据传输速率的瓶颈。新一代PCI标准PCI Express正是为解决计算机IO瓶颈而提出的(见表1)。PCI Express是一种基于SERDES的串行双向通信技术,数据传输速率为2.5G/通道,可多达32通道,支持芯片与芯片和背板与背板之间的通信。国际互联网络和信息技术的兴起促成了计算机和通信技术的交汇,而SERDES串行通信技术逐步取代传统并行总线正是这一交汇的具体体现。 SERDES系统的组成和设计 基于SERDES的高速串行接口采用以下措施突破了传统并行I/O接口的数据传输瓶颈:一是采用差分信号传输代替单端信号传输,从而增强了抗噪声、抗干扰能力;二是采用时钟和数据恢复技术代替同时传输数据和时钟,从而解决了限制数据传输速率的信号时钟偏移问题。 一个典型SERDES收发机由发送通道和接收通道组成(见图1):编码器、串行器、发送器以及时钟产生电路组成发送通道;解码器、解串器、接收器以及时钟恢复电路组成接收通道。顾名思义,编码器和解码器完成编码和解码功能,其中8B/10B、64B/66B和不规则编码(scrambling)是最常用的编码方案。串行器和解串器负责从并行到串行和从串行到并行的转换。串行器需要时钟产生电路,时钟发生电路通常由锁相环(PLL)来实现。解串器需要时钟和数据恢复电路(CDR),时钟恢复电路通常也由锁相环来实现,但有多种实现形式如相位插植、过剩抽样等。发送器和接收器完成差分信号的发送和接收,其中LVDS和CML是最常用的两种差分信号标准。另外还有一些辅助电路也是必不可少的,例如环路(loopback)测试、内置误码率测试等等。 通信标准制订了严格的性能指标以确保系统的可靠性和互用性。SERDES芯片的主要性能指标包括抖动产生、抖动容忍、抖动转移以及系统误码率(BER)等。抖动产生取决于时钟发生电路特别是压控振荡器(VCO)的相位噪声;抖动容忍取决于时钟恢复电路容忍抖动的能力,而抖动转移是在用作中继器时必须满足的指

高速DSP与PC实现串口通信的方法

咼速DSP 与PC 实现串口通信的万法 数字信号处理器(Digital Signal Processor , DSP )在图形图像处理、高精度测量控制、高性 能仪器仪表等众多领域得到越来越广泛的应用,实际运用中,通常须将 DSP 采集处理后的数 据传送到PC 机,然后进行存储和处理。 T1公司的TMS320VC33微处理器具有性价比高,同时,该芯片的I/O 电平、字长、运行 速 度、串口功能具有大多数 DSP 的共同特点。本文针对TMS320VC33与PC RS-232的通讯, 分析三种具体的接口电路和软件设计方法,实现高速 DSP 与低速设备的通讯:①通过 TMS320VC33的通用I/O 口实现通信;②通过TMS320VC33中可设置为通用I/O 的串行引脚 实现通信;③直接利用TMS320VC33的串口功能实现通信,在硬件和软件设计的基础上,完 成相关试验和调试,并达到预期的效果。 采用通用I/O 口实现 PC 的RS-232接口按照设定的固定波特率传送,RS-232串行口进行通信采用三线式 接 法,即RX (数据接收)、TX (数据发送)、GND (地)三个引脚,PC 机按帧格式发送、接收数据, 一帧通常包括1位起始位("0"电平)、5-8位数据位、1 位(或无)校验位、1位或1位半停止位("1"电平),起始位表示数据传送开始,数据位为低位在 前、高位在后,停止位表示一帧数据结束。 TMS320VC33微处理器的串口帧格式没有起始位和停止位,只有数据位,且数据位 为高 位在前、低位在后。利用 TMS320VC33微处理器的通用I/O 引脚实现串行通信时,须依 据 RS232的通信协议并结合DSP 硬件资源编写相应的DSP 程序。 1 ?硬件设计 TMS320VC33微处理器共有10个引脚可配置为通用I/O 口,其中XFO 、XFl 为专用 的 通用I/O 口,通过软件设计可实现 XFO 、XFl 专用I/O 口与RS232的串行通信,电路结构 如图1所示。 本文选用 MAX3232E 作为RS232C 电平与TTL 电平的转换芯片,R1in 、T1out 为RS232C 电平,R1out 、T1in 为TTL 电平,TMS320VC33微处理器的INT2引脚为外部中断脚,R10ut 同时连接到INT2和XF0,即可利用传输的第一位触发 TMS320VC33微处理器的外部中断。 2.软件设计 假设系统已经完成初始化,数据接收流程如图 2所示,设传输速率为9600bit/s , — 个起始位("0")、8位数据位、一个终止位("1")。数据传输时对起始位定时半位的时间,数据 位第一位以后的定时周期设置为一个位的时间, 保证每一位数据都在中间采样,与传统RS232 串口传输方式不同,有利于降低传输的误码率。 肖 ^ xv> in 门 https://www.wendangku.net/doc/707774502.html, —— Klin -_ ■ # Tlout 地 X F I

微机原理 第11章 串行通信与串行接口8251A 习题及参考

第十一章串行通信与串行接口8251A 1.试从广义角度概括接口有哪些功能? 答:寻址、输入输出、数据转换、联络、中断管理、复位、可编程,及错误检测等八种功能。 2.设异步通信时标准数据格式中的8个字符位为10101110,若采用偶校验设置,则奇偶校验位应为几? 答:应为1。 因为偶校验要保证信息中(包括校验位)1的个数为偶数。 3.什么是覆盖错误?接口部件如何反映这种错误? 答:是指输入缓冲寄存器或输出缓冲寄存器中的数据在被CPU或外设取走之前,又被新到数据所覆盖而产生的错误。 在产生覆盖错误时,接口会通过在状态寄存器中设置相应的状态位来反映。4.从结构上看,可以把一个接口分为几部分?分别具有什么特点? 答:分为两部分。 (1) 第一部分用来与I/O设备相连。这部分的接口结构是和I/O设备的传输要求及数据格式有关的,所以,各接口之间互不相同。 (2) 第二部分用来与系统总线相连。由于各接口都要连在同一总线上,因此,所有接口的这部分结构都非常类似。 5.在实际使用时,为什么对串口中的四个内部寄存器一般使用1位低位地址来寻址?答:因为, 四个内部寄存器中有2个可读寄存器,为一组,另2个可写寄存器为一组。即控制寄存器和数据输出寄存器是只写的,状态寄存器和数据输入寄存器是只读的,所以,可以先用读、写信号来区分两组寄存器,再用1位低位地址就可区分一组中的两个寄存器了。 47

6.异步通信方式的特点是什么?适合应用在什么场合? 答:采用异步通信时,两个字符之间的传输间隔是任意的,所以,每个字符的前后都要用一些数位来作为分隔位。 适于传输在不固定的时间间隔处出现字符所构成的信息流。 7.什么是波特率因子? 答:在用异步方式进行通信时,发送端需要用发送时钟来决定每一位对应的时间长度,接收端需要用接收时钟来测定每一个位的时间长度。发送时钟和接收时钟的频率可以是位传输率(波特率)的16倍、32倍、64倍,这个倍数称为波特率因子。 8.设在异步通信时,每个字符对应1个起始位,7个信息位,1个奇偶校验位,1个停止位,波特率为9600bps,则每秒钟能传输的最大字符数是多少? 答:因为, 1+7+1+1=10(位), 所以, 每秒钟能传输的最大字符数为9600/10=960(个)。 9.在8251A的编程结构中,有几个可读写的端口?给它们分配了几个端口地址?为什么? 答:共有7个可读写端口。 给它们分配了2个端口地址。其中,偶地址对应数据输入寄存器和数据输出寄存器;奇地址对应其他寄存器(模式寄存器,2个同步字符寄存器,控制寄存器,状态寄存器)。在这7个端口中,只读端口有2个(一个状态寄存器,一个数据输入寄存器),只写端口有5个(一个模式寄存器,一个控制寄存器,二个同步字符寄存器,一个数据输出寄存器)。 因为根据读写控制信号,再加上8251A的初始化流程按次序写入的约定是可以做到使用2个端口地址将7个端口区分开。 48

RS_485总线的高速串行远距离数据传输方法

ISSN 100020054CN 1122223 N 清华大学学报(自然科学版)J T singhua U niv (Sci &Tech ),2009年第49卷第5期 2009,V o l .49,N o .5w 16 h ttp : qhxbw .ch inaj ournal .net .cn RS -485总线的高速串行远距离数据传输方法 李 成, 王 鹏, 丁天怀, 陈 恳, 耿立中 (清华大学精密仪器与机械学系,北京100084) 收稿日期:2008206220 作者简介:李成(1977—),男(汉),天津,博士后。通讯联系人:丁天怀,教授,E 2m ail :dlnj @tsinghua .edu .cn 摘 要:为实现工业参数的高速远距离长线传输,应用 FPGA 技术,设计并实现了一种基于R S 2485总线的高速串 行数据传输方法。分析R S 2485数据传输的影响因素,阐述系统总体结构,由时钟脉冲传输测试确定了外围接口。利用串行信号的跳变沿作为高速时钟采样检测的起点以实现位同步,采用8B 10B 的链路编码方案,支持高速时钟恢复和数据帧同步,并以双绞线作为传输介质进行了数据传输实验。结果表明:系统在20M b s 传输速率下实现了串行编码数据流沿220m 双绞线电缆的高速远距离数据传输,误码率可达 10 -11 ,为现场原始数据监测提供了高效的传输方法。 关键词:串行通信;R S 2485总线;高速;远距离数据传输中图分类号:T P 274 文献标识码:A 文章编号:100020054(2009)0520068204 RS -485bus -ba sed h igh -speed ser i a l rem ote da ta tran s m ission m ethod L I C he ng ,W ANG P eng ,D I N G Tia nhua i , CHE N Ke n ,GENG L izhong (D epart men t of Prec ision I n stru men t and M echanology ,Tsi nghua Un iversity ,Be ij i ng 100084,Chi na )Abstract :A h igh 2speed serial data trans m issi on m ethod based on R S 2485bus is developed by using FPGA techno logy to i m p lem ent the high 2speed remo te long w ire trans m issi on fo r industrial param eters .T he effects on R S 2485bus 2based data trans m issi on are analyzed .T he p rinci p le structure of system is illustrated,and then the peri pheral interface circuits are determ ined by pulse trans m issi on experi m ents .T he rising falling edges of serial signals are used as the start sym bo ls fo r h igh 2speed clock samp ling to enable bit synch ronizati ons .T he 8B 10B encoded data stream s m ake ti m e 2clock recovery and data fram e synch ronizati ons feasible .T he data trans m issi on experi m ents using tw isted 2pair cable as trans m issi on m edia are perfo r m ed .T he results show that the developed system can perfo rm the high 2speed remo te data trans m issi on along 2202m tw isted 2pair cable at trans m issi on rate up to 20M b s w ith an erro r rate of 10-11 ,w hich offers an effective trans m issi on m ethod fo r the raw monito ring data co llected in the field . Key words :serial comm unicati on;R S 2485bus;high speed;remo te data trans m issi on R S 2485总线系统具有硬件设计简单、 控制方便、成本低廉、传输距离远等优点,现广泛应用于工业控制、小区监控、水情监测、地震勘探等领域[1-2] 。R S 2485接口标准通信的最大传输距离为1200m ,通信速率限制在93.75kb s ;当通信距离为100m 时,通信速率可达12M b s 。 但现有R S 2485系统一般工作在较低传输速率,传输效率也较低。总之,对工业应用而言,目前通常R S 2485的最大传输距离为1 200m ,最高速率在10M b s 左右[3] ,从而制约了工业环境下高速、远距离通讯的应用。 因此,为实现工业现场参数的高速远距离长线传输的需要,以R S 2485标准为物理层基础,比较选用最新接口器件,应用V HDL 语言,基于FPGA 平台,设计并实现了一种R S 2485高速远距离数据传输方法。 1 RS -485传输性能分析 R S 2485电路具有分布参数特性,其电气特性及 信道响应主要由传输电缆、连接器、终端匹配负载及 连接到总线上的R S 2485器件所组成的物理介质的分布电感及电容决定。因此,R S 485传输性能主要与电缆特性、总线阻抗、信号处理方法,以及节点布局与屏蔽等因素有关。 1)电缆特性。 传输电缆的特性阻抗、长度及架构影响R S 2485 数据传输[3] 。电缆的分布电容和分布电感会降低信号的边沿速度,进而降低噪声裕量,而分布电阻直接导致信号电平的衰减。最大的电缆长度取决于电缆直流环路阻抗与终端阻抗的分压,且电缆长度与传 输速率的关系还与可接受的信号抖动有关[4] 。虽然屏蔽电缆可增强噪声抑制能力,提高传输性能,但平衡特性较差且增加质量,降低安装的灵活性。因此,在野外布线时会选择非屏蔽双绞线。

串行通信技术SERDES正成为高速接口的主流

串行通信技术SERDES正成为高速接口的主流 串行通信技术SERDES正成为高速接口的主流 2009-08-21 13:44随着对信息流量需求的不断增长,传统并行接口技术成为进一步提高数据传输速率的瓶颈。过去主要用于光纤通信的串行通信技术——SERDES正在取代传统并行总线而成为高速接口技术的主流。本文阐述了介绍SERDES 收发机的组成和设计,并展望了这种高速串行通信技术的广阔应用前景。 ? SERDES是英文SERializer(串行器)/DESerializer(解串器)的简称。它是一种时分多路复用(TDM)、点对点的通信技术,即在发送端多路低速并行信号被转换成高速串行信号,经过传输媒体(光缆或铜线),最后在接收端高速串行信号重新转换成低速并行信号。这种点对点的串行通信技术充分利用传输媒体的信道容量,减少所需的传输信道和器件引脚数目,从而大大降低通信成本。 ? SERDES技术最早应用于广域网(WAN)通信。国际上存在两种广域网标准:一种是SONET,主要通行于北美;另一种是SDH,主要通行于欧洲。这两种广域网标准制订了不同层次的传输速率。目前万兆(OC-192)广域网已在欧美开始实行,

中国大陆已升级到2.5千兆(OC-48)水平。SERDES技术支持的广域网构成了国际互联网络的骨干网。 ? SERDES技术同样应用于局域网(LAN)通信。因为SERDES 技术主要用来实现ISO模型的物理层,SERDES通常被称之为物理层(PHY)器件。以太网是世界上最流行的局域网,其数据传输速率不断演变。IEEE在2002年通过的万兆以太网标准,把局域网传输速率提高到了广域网的水平,并特意制订了提供局域网和广域网无缝联接的串行WAN PHY。与此同时,SERDES技术也广泛应用于不断升级的存储区域网(SAN),例如光纤信道。 ? 随着半导体技术的迅速发展,计算机的性能和应用取得了长足进步。可是,传统并行总线技术——PCI却跟不上处理器和存储器的进步而成为提高数据传输速率的瓶颈。新一代PCI标准PCI Express正是为解决计算机IO瓶颈而提出的(见表1)。PCI Express是一种基于SERDES的串行双向通信技术,数据传输速率为2.5G/通道,可多达32通道,支持芯片与芯片和背板与背板之间的通信。国际互联网络和信息技术的兴起促成了计算机和通信技术的交汇,而SERDES串行通信技术逐步取代传统并行总线正是这一交汇的具体体现。

单片机与pc串口通信程序及电路图

单片机与pc串口通信程序及电路图 单片机与pc串口通信程序及电路图 #include #define BUFFERLEGTH 10 //----------------------------------------------------------------- void UART_init(); //串口初始化函数 void COM_send(void); //串口发送函数 char str[20]; char j; //------------------------------------------------------------------- void main(void) { unsigned char i; UART_init(); j=0; //初始化串口 for(i = 0;i }; while(1); } //------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // 函数名称:UART_init()串口初始化函数 // 函数功能:在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s // 串口接收中断允许,发送中断禁止 //-------------------------------------------------------------------------------------------------- void UART_init() { //初始化串行口和波特率发生器

FPGA高速串行通信

FPGA高速串行通信 1 引言 在许多实际运用的场合中,数字信号传输具有数据量大,传输速度高,采用串行传输等特点。这就要求数据收发双方采用合理的编解码方式及高速器件。数字信号传输一般分并行传输、串行传输两种。并行传输具有数据源和数据目的地物理连接方便,误码率低,传输速率高。但是并行传输方式要求各条线路同步,因此需要传输定时和控制信号,而其各路信号在经过转发与放大处理后,将引起不同的延迟与畸变,难以实现并行同步。若采用更复杂的技术、设备与线路,其成本会显著上升。而高速远程数据传输一般采用串行同步传输。传统建立准确的时钟信号的方法是采用锁相环技术。但锁相环有若干个明显缺陷,一是其同步建立时间及调整精度即使采用变阶的方法也很难兼顾;二是锁相环需要一个高精度高频率的本地时钟。本文所讨论的两种串行同步传输方法,无需高频率时钟信号,就可完全数字化。采用Altera公司的ACEXlK系列器件完成电路设计,且外围电路简单,成本低,效果好。 2主要器件介绍 编码和解码采用ACEXlK系列器件EPlK100QC208-2。ACEXlK器件是Altera 公司针对通信、音频处理及类似场合应用而设计的。该系列器件具有如下特性: 高性能。采用查找表(LUT)和嵌入式阵列块(EAB)相结合的结构,适用于实现复杂逻辑功能和存储器功能,例如通信中应用的DSP、多通道数据处理、数据传递和微控制等; 高密度。典型门数为1万到10万门,有多达49 152位的RAM(每个EAB有4 096位RAM)。 系统性能。器件内核采用2.5 V电压,功耗低,其多电压引脚驱动2.5 V、3.3 V、5.0 V的器件,也可被这些电压所驱动,双向I/O引脚执行速度可达250 MHz; 灵活的内部互联。具有快速连续式延时可预测的快速通道互连。

串口通信协议程序

串口通信协议程序 主机程序: /* 主机主要处理 : 主—>从 1.给从机发送命令 2.给从机发送数据 3.命令从机向主机发送数据 从—>主由中断程序处理根据从机发送过来的请求类型 0.请求主机发送命令(包括主到从的1,2命令) 1.请求主机接收数据 2,3保留 */ #include #include #define uchar unsigned char #define uint unsigned int #define slav1_addr 0x01 #define slav2_addr 0x02 #define COMEND 0 #define REC_DATE 1 //主机向从机发送多数据命令高四位为1111,所以其他命令高四位不能为1111 #define cmd_X 0x12 #define cmd_rec_data 0x11 sbit signal=P3^2; uchar temp_addr,num,rec,style,re_addr; uchar buf[20]; uchar rec_data[10];

void delay(unsigned int i) { while(i--); } void init_uart(void) { TMOD=0x20; //定时器方式2--8位reload模式 TH1=0xfd; TL1=0xfd; PCON=0; //波特率不加倍 SCON=0xf0; //方式三 TB8=1; //发送地址时第九位为1 SM2=1; //接收到第九位为1时才能接收数据 TR1=1; //要在设置scon后开定时 ES=1; //开中断 EA=1; } //发送命令 void uart_send_cmd(uchar addr,uchar cmd)//uchar *date) { while(signal==0); //检查总线是否被占 signal=0; //占用总线 EA=0;//关中断 do {

串口通信协议程序

主机程序: /* 主机主要处理: 主—>从 1.给从机发送命令 2.给从机发送数据 3.命令从机向主机发送数据 从—>主由中断程序处理根据从机发送过来的请求类型 0.请求主机发送命令(包括主到从的1,2命令) 1.请求主机接收数据 2,3保留 */ #include #include #define uchar unsigned char #define uint unsigned int #define slav1_addr 0x01 #define slav2_addr 0x02 #define COMEND 0 #define REC_DATE 1 //主机向从机发送多数据命令高四位为1111,所以其他命令高四位不能为1111 #define cmd_X 0x12 #define cmd_rec_data 0x11 sbit signal=P3^2; uchar temp_addr,num,rec,style,re_addr; uchar buf[20]; uchar rec_data[10]; void delay(unsigned int i) { while(i--); } void init_uart(void) { TMOD=0x20; //定时器方式2--8位reload模式 TH1=0xfd; TL1=0xfd; PCON=0; //波特率不加倍 SCON=0xf0; //方式三 TB8=1; //发送地址时第九位为1 SM2=1; //接收到第九位为1时才能接收数据

TR1=1; //要在设置scon后开定时 ES=1; //开中断 EA=1; } //发送命令 void uart_send_cmd(uchar addr,uchar cmd)//uchar *date) { while(signal==0); //检查总线是否被占 signal=0; //占用总线 EA=0;//关中断 do { do { SBUF=addr; //发送从机地址 while(TI!=1); TI=0; } while(RI!=1); //一直等待从机响应 //while循环里可加入出错处理temp_addr=SBUF; RI=0; } while(temp_addr!=addr); //一直等到从机回应的地址相同 //while循环里可加入出错处理 TB8=0; //发送数据第9位为0 // SM2=0; // 接收到第九位为1时才置位RI //每次一个数据 SBUF=cmd; while(TI!=1); TI=0; TB8=1; // SM2=1; RI=0; TI=0; //不处理期间发生的中断 EA=1; signal=1; //释放总线 }

串行通信程序设计

课程设计任务书 学生姓名: xxx 专业班级: xxx 指导教师: xxx 工作单位: xxx 题目: 串行通信程序设计 初始条件: 用汇编语言编写程序,实现两台计算机之间的通信。 要求完成的主要任务: ①制作RS-232C通信线,并用它连接两台计算机; ②在计算机上用不同的颜色设置接收、发送区域; ③能设置发送、接收的数据长度,并能显示接收的数据; ④能选择通信校验方式(奇校验、偶校验或无校验); ⑤可以将接收的数据作为文件保存起来; ⑥撰写设计说明书及调试心得。 时间安排: 第一阶段: 查阅相关资料 第二阶段: 课程设计 第三阶段: 撰写课程设计报告 第四阶段: 课程设计答辩 指导教师签名:年月日系主任(或责任教师)签名:年月日

串行通信程序设计 1方案论证 首先,要能进行串行通信,串口是基础。使用RS-232 DB-9串口,实现基本通信时,只需将其5号线(地线)相连,2、3号线(接收、发送数据线)分别交叉相连即可。 根据要求,此程序可分为界面显示、参数设置、发送数据、接收数据和保存文件五部分。以下将从这五个方面进行方案论证。 1.1 界面显示 一般情况下显示器的屏幕为25行、82列,不妨把整个屏幕看成25*80个存储单元。屏幕坐上角存储单元的坐标为(0,0),即行号为0,列号为0。因此可通过设置不同的行号和列号定位屏幕上的存储单元。 用不同颜色设置发送和接收区域,即用不同颜色的空格填充发送和接收区域。这就需要调用BIOS系统中断,先置光标位置,再写当前字符和属性。这两项功能都可调用BIOS显示输出10H号中断服务程序实现,详见表1-1 10H号中断服务程序部分功能。 表1-1 10H号中断服务程序部分功能 IBM PC的标准显示器适配器,有单色和彩色之分,其中后者能以文本和图形两种工作方式,既可以显示黑白图形又可以显示有16种颜色的彩色图形。彩色文本方式下,设置不同的属性字节即可实现不同前景和不同背景的组合。例如,0111表示灰白,1110表示黄,设置灰白底黄字的属性为01111110,十六进制表示为7EH。 显示发送和接收两个区域的方案大体分两种,一是两个带状区域,一是两个并排的矩形。从美观的角度来讲,后者更胜一筹。显示标题、提示、设置等信息时,只需先将光标定到合

第七章串行接口答案

第七章串行接口答案 7·1 什么是串行异步通信?它有哪些特点?有哪几种帧格式? 答:串行通信是所传送数据的各位按顺序一位一位地发送或接收。串行通信分同步和异步两种方式。 在异步通信中数据或字符是一帧(frame)一帧地传送的。帧定义为一个字符的完整的通信格式,通常也称为帧格式。 它的主要特点:由于异步通信每传送一帧有固定格式,通信双方只需按约定的帧格式来发送和接收数据,所以硬件结构比同步通信方式简单;此外,它还能利用校验位检测错误。 帧格式的一般形式是先用一个起始位"0"表示字符的开始,然后是数据位,其后是奇偶校验位,最后是停止位,用以表示字符的结束。不同的帧格式主要表现在数据位可以不同,例如其位数为5~8位,停止位可以是1、1.5、2位;起始位和奇偶校验位可以有,也可以没有。起始位、数据位、奇偶校验位、停止位的不同组合就形成了多种形式的帧格式。不同的计算机规定适用的帧格式有所不同,例如适用于80C51的帧格式只有三种:8位数据位;一位起始位、8位数据位、一位停止位;一位起始位、8位数据位、一位奇偶校验位、一位停止位。 7·2 某异步通信接口按方式3传送,己知其每分钟传送3600个字符,计算其传送波特率。 答:设每个字符由1个起始位、8个数据位、1个可编程位和1个停止位组成,则其传送波特率为: llb×3600/60s=660b/s

7·3 为什么定时器Tl用做串行口波特率发生器时,常采用工作方式2?若己知系统时钟频率、通信选用的波特率,姑何计算其初值? 答:在串行通信中,收发双方对发送或接收的数据速率(即波特率)要有一定的约定。我们通过软件对80C51串行口编程可约定4种工作方式。其中方式0和方式2波特率是固定的,而方式1和方式3的波特率是可变的,由定时器Tl的溢出率控制。定时器Tl用做串行口波特率发生器时,因为工作方式2是自动重装载方式,因而当定时器Tl作波特率发生器时常采用工作方式2。 在方式2中,TLl作计数用,但自动重装载的值放在THl内。假如已知系统时钟频率、通信选用的波特率,计算初值的方法如下:设计数初值为X,那么每过"256一X"个机器周期定时器1就会产生一次溢出。溢出周期是: 12 T= ×(256-X) f ose 因溢出率为溢出周期之倒数,因此 2SMOD f ose 波特率= × 32 l2×(256-X) 则定时器Tl在方式2 时的初值为: f ose×2SMOD X=256- 384×波特率

高速公路ETC系统DSRC设备串行口通讯协议

高速公路ETC系统DSRC设备串行口通讯协议 1 串行通讯方式 串行口采用半双工的异步串行通讯方式,协议格式为“115200,N,8,1”,即波特率115200bps,无奇偶校验,8位数据,1个停止位。 1.1 串口通讯数据帧格式 RSU和PC通讯的数据帧格式如图1-1: 图1-1 空应答如图1-2: 图1-2 说明见表1-1: 表1-1 RSU和PC通讯的数据帧格式说明

1.2 特殊字节转义处理 数据帧开始标志为FFFFH,帧结束标志为FFH。其他字段不能出现FFH,如果数据确实为FFH,需对其进行转义处理。 发送数据时,如果在待发送字段中出现FFH字节时,将FFH分解为FEH和01H这两个字节来发送;如果在待发送字段出现FEH字节时,需将FEH分解为FEH和00H这两个字节来发送。 接收数据时,如果出现“FE 01”这样连续两个字节时将之合为一个字节FFH;如果出现“FE 00”这样连续两个字节时将之合为一个字节FEH。 RSU送上来的所有整型数据,未特定说明,其字节排序均为高位在前,低位在后。 1.3 命令的应答要求 PC必须对RSU的命令作出应答,可以是携带应答也可以是空应答,RSU不一定对PC 的每个命令都要应答。 应答时,PC将接收到的命令帧的RSCTL的高半字节和低半字节交换,作为应答帧的RSCTL。

图1-3 串口通讯流程 2 RSU/PC通信帧数据结构 2.1 PC发往RSU的指令:

2.1.1初始化指令-C0 2.1.2 继续交易指令-C1

2.1.3 停止交易指令-C2 2.1.4 消费指令-C6

串口通信程序

#include "stdafx.h" #include "Modbus.h" #include "ModbusDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define CT2A (data) ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About static const UCHAR aucCRCHi[] = { 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 }; static const UCHAR aucCRCLo[] = { 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,

相关文档