串行通信UARTICSPI原理与简单应用_第1页
串行通信UARTICSPI原理与简单应用_第2页
串行通信UARTICSPI原理与简单应用_第3页
串行通信UARTICSPI原理与简单应用_第4页
串行通信UARTICSPI原理与简单应用_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、串行通信基本原理:一、串行通信基本原理: 并行并行数据传送数据传送 同步同步 串行串行 异步(用于单片机中)异步(用于单片机中)并并 行行 数数 据据 传传 送送串串 行行 数数 据据 传传 送送原原 理理各数据位同时传送各数据位同时传送数据位按位顺序进行数据位按位顺序进行优优 点点传送速度快、效率高传送速度快、效率高最少只需一根传输线即可完成:成本低最少只需一根传输线即可完成:成本低缺缺 点点数据位数数据位数传输线根数:成本高传输线根数:成本高速度慢速度慢应应 用用传送距离传送距离30米,用于计算机内部米,用于计算机内部几米几千公里,用于计算机与外设之间几米几千公里,用于计算机与外设之间

2、异步通信的双方需要两项约定:异步通信的双方需要两项约定:1.1.字符格式:字符格式:一帧字符位数的规定:数据位,校验位,起始位和停止位。一帧字符位数的规定:数据位,校验位,起始位和停止位。2.2.波特率波特率( (位位/ /秒秒) )和传送速率的规定:和传送速率的规定:帧间隔不固定,帧间隔不固定,但是每一帧内的位间隔固定。但是每一帧内的位间隔固定。例:例:要求每秒传送要求每秒传送120120个字符,每帧为个字符,每帧为1010位。位。解:解: B=120B=12010=120010=1200波特波特 每位每位0.83ms0.83ms 数据位数据位传送输率传送输率=120=1208=9608=9

3、60位位/ /秒秒( (二二) )同步通信同步通信(IICIIC、SPISPI) 以一串字符为一个传送单位,字符间不加标识位,在一串字符开始以一串字符为一个传送单位,字符间不加标识位,在一串字符开始 用用同步字符同步字符标识,硬件要求高,通讯双方须标识,硬件要求高,通讯双方须严格同步严格同步。( (一一) )异步通信(异步通信(UARTUART):是指通信的发送和接收设备使用各自的时钟控制):是指通信的发送和接收设备使用各自的时钟控制 数据的发送和接收过程。可以实现全双工通信。数据的发送和接收过程。可以实现全双工通信。 D0D1D2D3D4D5D6D7停止位停止位起始位起始位二、串行通信的基本

4、方式:二、串行通信的基本方式:三、串行接口功能:三、串行接口功能:(1 1)发送器:并)发送器:并串数据格式转换,添加标识位和校验位,一帧发送结串数据格式转换,添加标识位和校验位,一帧发送结束,设置结束标志,申请中断。束,设置结束标志,申请中断。(2 2)接收器:串)接收器:串并数据格式转换,检查错误,去掉标识位,保存有效并数据格式转换,检查错误,去掉标识位,保存有效数据,设置接收结束标志,申请中断。数据,设置接收结束标志,申请中断。(3 3)控制器:接收编程命令和控制参数,设置工作方式:同步)控制器:接收编程命令和控制参数,设置工作方式:同步/ /异步、异步、字符格式、波特率、校验方式、数据

5、位与同步时钟比例等。字符格式、波特率、校验方式、数据位与同步时钟比例等。四、串行数据传送方向:四、串行数据传送方向:1 1、单工通讯:单工通讯:数据单向传送。(数据单向传送。(1 1条数据线,单向)条数据线,单向)2 2、半双工通讯:半双工通讯:数据可数据可分时分时双向传送。(双向传送。(2 2条数据线,双向)条数据线,双向)3 3、全双工通讯:全双工通讯:可可同时同时进行发送和接收。进行发送和接收。 (1 1条或条或2 2条数据线,双向)条数据线,双向)发送器发送器接收器接收器地线地线数据线数据线发送接发送接收器收器接收发接收发送器送器地线地线数据线数据线发送接发送接收器收器接收发接收发送器

6、送器地线地线数据线数据线串行接口输入串行接口输入/ /输出引脚:输出引脚:TXD(PTXD(P3.13.1) )、RXD(PRXD(P3.03.0) )数据格式:按不同方式,一帧数据位数数据格式:按不同方式,一帧数据位数 8/10/118/10/11 发送发送/ /接收时,数据皆接收时,数据皆低位在前低位在前。一帧字符发送一帧字符发送/ /接收结束,接收结束,置位标志位置位标志位(TI/RI)(TI/RI),并申请串行中断。并申请串行中断。中断控制:中断允许位中断控制:中断允许位ESES、总允许、总允许EAEA;中断入口:中断入口:0023H0023H。D0D1D2D3D4D5D6D7停止位停

7、止位起始位起始位D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D8停止位停止位起始位起始位D71 1个全双工串行接口,可同时进行发送和接收。个全双工串行接口,可同时进行发送和接收。 MCS-51串行接口串行接口(UART)(UART)串行接口的结构(1)数据缓冲寄存器SBUF两个SBUF,一个用于发送(只写);一个用于接收(只读)。映象地址均为99H(2)数据发送与接收控制发送控制器在波特率作用下,将发送SBUF中的数据由并到串,一位位地传输到发送端口;接收控制器在波特率作用下,将接收接收端口的数据由串到并,存入接收SBUF中。串行接口的结构电平转换电路电平转换电路PC机的串口是

8、RS232电平标准(+15V0,-15V1),而显然MCS51的UART是5V-TTL电平标准,因此需要加上电平转换电路,方可实现与PC机串口的通讯。一、串行接口控制:一、串行接口控制:1.1.数据缓冲器数据缓冲器SBUF:发送发送SBUFSBUF和接收和接收SBUFSBUF共用一个地址共用一个地址99H99H。 1 1)发送)发送SBUFSBUF存放待发送的存放待发送的8 8位数据,写入位数据,写入SBUFSBUF将同时将同时 启动发送。发送指令:启动发送。发送指令:M MOV VSBUFSBUF,A A2 2)接收)接收SBUFSBUF存放已接收成功的存放已接收成功的8 8位数据,供位数据

9、,供CPUCPU读取。读取。读取串行口读取串行口接收数据指令:接收数据指令:M MOV AV A,SBUFSBUF2.2.节电控制寄存器节电控制寄存器PCON: SMOD(PCON.7):波特率加倍控制位。):波特率加倍控制位。 SMOD=1,波特率加倍;,波特率加倍; SMOD=0,则不加倍。,则不加倍。SM0SM0、SM1SM1:选择串行口选择串行口4 4种工作方式。种工作方式。SM2SM2:多机控制位,用于多机通讯。多机控制位,用于多机通讯。RENREN:允许接收控制位,允许接收控制位,REN=1REN=1,允许接收;,允许接收; REN=0REN=0,禁止接收。,禁止接收。TB8TB8

10、:发送的第发送的第9 9位数据位,可用作校验位和地址位数据位,可用作校验位和地址/ /数据标识位。数据标识位。RB8RB8:接收的第接收的第9 9位数据位或停止位。位数据位或停止位。TI TI :发送中断标志,发送一帧结束,发送中断标志,发送一帧结束,TI=1TI=1,必须,必须软件清零软件清零;RI RI :接收中断标志,接收一帧结束,接收中断标志,接收一帧结束,RI=1RI=1,必须,必须软件清零软件清零。3.3.串行口控制串行口控制/ /状态寄存器状态寄存器SCON(98H)(98H): 方式方式1 1:8 8位位数据异步通讯方式数据异步通讯方式1. 1. 一帧一帧1010位:位:8 8

11、位数据位,位数据位,1 1个起始位个起始位(0)(0),1 1个停止位个停止位(1)(1)。 2. RXD2. RXD:接收数据端。接收数据端。 TXDTXD:发送数据端。发送数据端。3.3.波特率:波特率:用用T T1 1作为波特率发生器,作为波特率发生器, B=(2B=(2SMOD/32)/32)T T1 1溢出率。溢出率。4.4.发送:发送:写入写入SBUFSBUF,同时启动发送,一帧发送结束,同时启动发送,一帧发送结束,TI=1TI=1。 接收:接收:REN=1REN=1,允许接收。,允许接收。 接收完一帧,若接收完一帧,若RI=0RI=0且停止位为且停止位为1 (1 (或或SM2=0

12、)SM2=0),将接,将接 收数据装入收数据装入SBUFSBUF,停止位装入,停止位装入RB8RB8,并使,并使RI=1RI=1; 否则丢弃接收数据,不置位否则丢弃接收数据,不置位RIRI。 当当REN=1REN=1,CPUCPU开始采样开始采样RXDRXD引脚引脚负跳变负跳变信号,若出现负跳变,才进入数信号,若出现负跳变,才进入数据接收状态,先检测起始位,若第一位为据接收状态,先检测起始位,若第一位为0 0,继续接收其余位;否则,停止,继续接收其余位;否则,停止接收,重新采样负跳变。接收,重新采样负跳变。 数据采样速率为波特率数据采样速率为波特率1616倍频,在数据位中间,用第倍频,在数据位

13、中间,用第7 7、8 8、9 9个脉冲采个脉冲采样样3 3次数据位,并次数据位,并3 3中取中取2 2保留采样值。保留采样值。写入写入SBUF采样采样(a) 发送时序图发送时序图TXD数据输出数据输出TID0D1D2D3D4D5D6D7停止位停止位起始位起始位RXD输入数据输入数据(b) 接收时序图接收时序图D0D1D2D3D4D5D6D7停止位停止位起始位起始位RI检测检测负跳变负跳变计算波特率计算波特率:方式方式0 0为固定波特率:为固定波特率:B=fosc/12B=fosc/12方式方式2 2可选两种波特率:可选两种波特率: B=(2B=(2SMOD /64)/64)fosc fosc

14、方式方式1 1、3 3为可变波特率,用为可变波特率,用T T1 1作波特率发生器。作波特率发生器。B=(2B=(2SMOD/32)/32)T T1 1溢出率溢出率T T1 1为方式为方式2 2的时间常数:的时间常数: X = 2X = 28 8 - t/T - t/T 溢出时间:溢出时间: t= (2t= (28 8 -X)T = (2-X)T = (28 8 -X)-X)12/ fosc12/ foscT T1 1溢出率溢出率=1/t= fosc /12=1/t= fosc /12(2(2n n -X)-X) 波特率波特率B=(2B=(2SMOD /32)/32)fosc/12fosc/12

15、(2(28 8-X)-X)串行口方式串行口方式1 1、3 3,根据波特率选择,根据波特率选择T T1 1工作方式,计算时间常数工作方式,计算时间常数。T T1 1选方式选方式2 2: THTH1 1= X = 2= X = 28 8 - fosc/12- fosc/122 2SMOD/(32/(32B)B)T T1 1选方式选方式1 1用于低波特率,需考虑用于低波特率,需考虑T T1 1重装时间常数时间。重装时间常数时间。也可选工作方式也可选工作方式3 3。设置串口工作模式。SCON的SM0=0,SM1=1使其工作于模式1,REN=1使能接收。根据波特率计算公式设置波特率。注意,需要使定时器工

16、作于自动重装模式。使用定时器2可以达到较高的波特率。波特率是否需要倍速。如果使用定时器1做波特率发生器且倍速后方能满足波特率要求,则需要PCON=0 x80。PCON不影响定时器2产生的波特率。串口中断。一般来讲串口发送均会采用查询模式,串口接收较多采用中断模式。ES=1可以打开串口中断,随后要EA=1打开全局中断。注意,要写好中断服务函数,而且MCS51的串口收发中断共用,因此中断服务函数中需要判断TI与RI的值。中断向量标号是4。向SBUF写入数据启动串口发送,读SBUF可以取出接收到的数据UART使用的步骤:题目:在上位机上用串口调试助手发送一个字符X,单片机收到字符后返回给上位机“IG

17、ETX”,串口波特率设为9600bps。初始化:初始化:1.确定确定T1的工作方式(编程的工作方式(编程TMOD 寄存器);寄存器);2.计算计算T1的初值,装载的初值,装载TH1、TL1;3.启动启动T1(编程(编程TCON中得中得TR1位);位);4.确定串口工作方式(确定串口工作方式(SCON寄存器);寄存器);5.串口在中断方式时,要进行中断(串口在中断方式时,要进行中断(IE 、IP的设置);的设置);程序代码如下:#include#defineucharunsignedchar#defineunitunsignedintunsignedcharflag,a,I;ucharcodet

18、able=“Iget”;voidinit()TMOD=0 x20;/T1工作在方式1TH1=0 xfd;/装入初值TL1=0 xfd;TR1=1;/开始计数SCON=0 x50;/工作在串口方式1,允许接收EA=1;ES=1;voidmain()init();while(1)if(flag=1)ES=0;for(i=0;i6;i+)SBUF=tablei;while(!TI);/等待是否发送完毕TI=0;SBUF=a;while(!TI);TI=0;ES=1;flag=0;voidser()interrupt4RI=0;a=SBUF;flag=1;I2C串行总线概述串行总线概述 I2C总线是总

19、线是PHLIPS公司推出的一种串行总线,是具备多主机系统所公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。需的包括总线裁决和高低速器件同步功能的高性能串行总线。 I2C总线只有两根双向信号线。一根是数据线总线只有两根双向信号线。一根是数据线SDA,另一根是时钟,另一根是时钟线线SCL。 I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的的SDA及及

20、SCL都是线都是线“与与”关系。关系。每个接到每个接到I2C总线上的器件都有唯一的地址。主机与其它器件间的数总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器总线上接收数据的器件则为接收器。在多主机系统中,可能同时有几个主机企图启动总线传送数据。为在多主机系统中,可能同时有几个主机企图启动总线传送数据。为了避免混乱,了避免混乱, I2C总线要通过总线仲裁,以决定由哪一台主机控制总总线要通过总线仲裁,以决定由哪一台主机控制总线。线。 在在80C51单

21、片机应用系统的串行总线扩展中,我们经常遇到的是以单片机应用系统的串行总线扩展中,我们经常遇到的是以80C51单片机为主机,其它接口器件为从机的单主机情况。单片机为主机,其它接口器件为从机的单主机情况。一、数据位的有效性规定一、数据位的有效性规定 I2C总线进行数据传送时,总线进行数据传送时,时钟信号为高电平期间时钟信号为高电平期间,数据线上的数据,数据线上的数据必须保持稳定,只有在必须保持稳定,只有在时钟线上的信号为低电平期间时钟线上的信号为低电平期间,数据线上的高电,数据线上的高电平或低电平状态才允许变化。平或低电平状态才允许变化。I2C总线的数据传送总线的数据传送二、起始和终止信号二、起始

22、和终止信号 SCL线为高电平期间,线为高电平期间,SDA线由高电平向低电平的变化表示起始信线由高电平向低电平的变化表示起始信号;号;SCL线为高电平期间,线为高电平期间,SDA线由低电平向高电平的变化表示终止线由低电平向高电平的变化表示终止信号。信号。起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。被占用的状态;在终止信号产生后,总线就处于空闲状态。连接到连接到I2C总线上的器件,若具有总线上的器件,若具有I2C总线的硬件接口,则很容易检测到总线的硬件接口,则很容易检测到

23、起始和终止信号。起始和终止信号。接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将可以将SCL线拉成低电平,从而使主机处于等待状态。直到接收器件准线拉成低电平,从而使主机处于等待状态。直到接收器件准备好接收下一个字节时,再释放备好接收下一个字节时,再释放SCL线使之为高电平,从而使数据传送线使之为高电平,从而使数据传送可以继续进行。可以继续进行。(1)字节传送与应答)字节传送与应答 每一个字节

24、必须保证是每一个字节必须保证是8位长度。数据传送时,先传送最高位位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有帧共有9位)位)。 三、数据传送格式三、数据传送格式 由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。平,而由主机产生一个终止信号以结束总线的数据传

25、送。 如果从机对主机进行了应答,但在数据传送一段时间后无法继续接如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非非应答应答”通知主机,主机则应发出终止信号以结束数据的继续传送。通知主机,主机则应发出终止信号以结束数据的继续传送。 当主机接收数据时,它收到最后一个数据字节后,必须向从机发出当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的一个结束传送的信号。这个信号是由对从机的“非应答非应答”来实现的。来实现的。然后,从机释

26、放然后,从机释放SDA线,以允许主机产生终止信号。线,以允许主机产生终止信号。I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。据信号。 在总线的一次数据传送过程中,可以有以下几种组合方式:在总线的一次数据传送过程中,可以有以下几种组合方式: 在起始信号后必须传送一个从机的地址(在起始信号后必须传送一个从机的地址(7位),位),第8位是数据的传送方向位(R/T),用用“0”表示主机发送数据(表示主机发送数据(T),),“1”表示主机接收数据表示主机接收数据(R)。每次数据传送总是由主机产生的终止信号结束。但是,

27、若主机希)。每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。出起始信号对另一从机进行寻址。(2)数据帧格式)数据帧格式a、主机向从机发送数据,数据传送方向在整个传送过程中不变:、主机向从机发送数据,数据传送方向在整个传送过程中不变:注:有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从注:有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。机向主机传送。 A表示应答,表示应答, A表示非应答(高电平

28、)。表示非应答(高电平)。S表示起始信号,表示起始信号,P表示终止信表示终止信号。号。b、主机在第一个字节后,立即从从机读数据、主机在第一个字节后,立即从从机读数据c、在传送过程中,当需要改变传送方向时,、在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读但两次读/写方向位正好反相。写方向位正好反相。四、总线的寻址四、总线的寻址 I2C总线协议有明确的规定:采用总线协议有明确的规定:采用7位的寻址字节(寻址字节是起始位的寻址字节(寻址字节是起始信号后的第一个字节)。信号后的第一个字节)。 (1)寻址字节的位定义)寻址字节的位定义 D7D1位组成从机的地址。位组成从

29、机的地址。D0位是数据传送方向位,为位是数据传送方向位,为“0”时表示时表示主机向从机写数据,为主机向从机写数据,为“1”时表示主机由从机读数据。时表示主机由从机读数据。 I2C总线器件的扩展总线器件的扩展一、扩展电路一、扩展电路 二、串行二、串行E2PROM的扩展的扩展 (1)串行)串行E2PROM典型产品典型产品 AT24C01:128字节(1288位); AT24C02:256字节(2568位); AT24C04:512字节(5128位); AT24C08:1K字节(1K8位); AT24C16:2K字节(2K8位); ATMEL公司的公司的AT24C系列:系列: (2)写入过程)写入过

30、程 单片机进行写操作时,首先发送该器件的单片机进行写操作时,首先发送该器件的7位地址码和写方向位位地址码和写方向位“0”(共(共8位,即一个字节),发送完后释放位,即一个字节),发送完后释放SDA线并在线并在SCL线上产生第线上产生第9个个时钟信号。被选中的存储器器件在确认是自己的地址后,在时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产线上产生一个应答信号作为相应,单片机收到应答后就可以传送数据了。生一个应答信号作为相应,单片机收到应答后就可以传送数据了。 传送数据时,单片机首先发送一个字节的被写入器件的存储区的首地传送数据时,单片机首先发送一个字节的被写入器件的存储区的首地

31、址,收到存储器器件的应答后,单片机就逐个发送各数据字节,但每发址,收到存储器器件的应答后,单片机就逐个发送各数据字节,但每发送一个字节后都要等待应答。送一个字节后都要等待应答。 AT24C系列器件片内地址在接收到每一个数据字节地址后自动加系列器件片内地址在接收到每一个数据字节地址后自动加1,在,在芯片的芯片的“一次装载字节数一次装载字节数”(不同芯片字节数不同)限度内,只需输入首(不同芯片字节数不同)限度内,只需输入首地址。装载字节数超过芯片的地址。装载字节数超过芯片的“一次装载字节数一次装载字节数”时,数据地址将时,数据地址将“上上卷卷”,前面的数据将被覆盖。,前面的数据将被覆盖。 当要写入

32、的数据传送完后,单片机应发出终止信号以结束写入操作。当要写入的数据传送完后,单片机应发出终止信号以结束写入操作。写入写入n个字节的数据格式个字节的数据格式: 单片机先发送该器件的单片机先发送该器件的7位地址码和写方向位位地址码和写方向位“0”(“伪写伪写”),发送完),发送完后释放后释放SDA线并在线并在SCL线上产生第线上产生第9个时钟信号。被选中的存储器器件在个时钟信号。被选中的存储器器件在确认是自己的地址后,在确认是自己的地址后,在SDA线上产生一个应答信号作为回应。线上产生一个应答信号作为回应。 然后,再发一个字节的要读出器件的存储区的首地址,收到应答后,单然后,再发一个字节的要读出器

33、件的存储区的首地址,收到应答后,单片机要重复一次起始信号并发出器件地址和读方向位(片机要重复一次起始信号并发出器件地址和读方向位(“1”),收到器件),收到器件应答后就可以读出数据字节,每读出一个字节,单片机都要回复应答信号。应答后就可以读出数据字节,每读出一个字节,单片机都要回复应答信号。当最后一个字节数据读完后,单片机应返回以当最后一个字节数据读完后,单片机应返回以“非应答非应答”(高电平),并(高电平),并发出终止信号以结束读出操作。发出终止信号以结束读出操作。(3)读出过程)读出过程80C51单片机单片机I2C串行总线器件的接口串行总线器件的接口一、典型信号模拟一、典型信号模拟 为了保

34、证数据传送的可靠性,标准的为了保证数据传送的可靠性,标准的I2C总线的数据传送有严格总线的数据传送有严格的时序要求。的时序要求。I2C总线的起始信号、终止信号、发送总线的起始信号、终止信号、发送“0”及发送及发送“1”的模拟时序的模拟时序:总线数据传送的模拟总线数据传送的模拟 主机可以采用不带主机可以采用不带I2C总线接口的单片机,如总线接口的单片机,如80C51、AT89C2051等等单片机,利用软件实现单片机,利用软件实现I2C总线的数据传送,即软件与硬件结合的信号总线的数据传送,即软件与硬件结合的信号模拟。模拟。二、典型信号模拟子程序二、典型信号模拟子程序(2)起始信号)起始信号Void

35、 Start() SDA = 1;SomeNop( );SCL = 1;SomeNop( );SDA = 0;SomeNop( );(1)总线初始化)总线初始化Void init() SDA = 1; SomeNop( );/us级延时函数,4至5微秒 SCL = 1; SomeNop( );(3)应答信号)应答信号voidrespons()uchari=0;SCL=1;SomeNop();while(SDA=1)&(i255)i+;SCL=1;SomeNop();(4)终止信号)终止信号voidStop()SDA=0;SomeNop();SCL=1;SomeNop();SDA=1;S

36、omeNop();写一个字节写一个字节:voidwritebyte(uchardate)uchari,temp;temp=date;for(i=0;i8;i+)temp=temp1;SCL=0;SomeNop();SDA=CY;SomeNop();SCL=1;SomeNop();SCL=0;SomeNop();SDA=1;SomeNop();读一个字节读一个字节:voidreadbyte()uchari,k;SCL=0;SomeNop();SDA=1;SomeNop();for(i=0;i8;i+)SCL=1;SomeNop();k=(k1)|SDA;SomeNop();SCL=0;SomeN

37、op();SomeNop();returnk;主机发送地址主机发送地址时,总线上的每个从机都将这时,总线上的每个从机都将这7位地址码与自己的地址进行位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据比较,如果相同,则认为自己正被主机寻址,根据R/T位将自己确定为发位将自己确定为发送器或接收器。送器或接收器。从机的地址从机的地址由固定部分和可编程部分组成。在一个系统中可能希望接入由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的大

38、数目。如一个从机的7位寻址位有位寻址位有4位是固定位,位是固定位,3位是可编程位,这时位是可编程位,这时仅能寻址仅能寻址8个同样的器件,即可以有个同样的器件,即可以有8个同样的器件接入到该个同样的器件接入到该I2C总线系统总线系统中。中。SPI是SerialPeripheralinterface的缩写,顾名思义就是串行外围设备接口。SPI是一种高速的、全双工、同步的串行总线接口,主要应用在EEPROM、FLASH、实时时钟、AD转换器和D/A转换器等芯片中。SPI接口在芯片的管脚上只占用四根线,减少了芯片的管脚数,同时为PCB的布局节省了空间,简化了设计过程。SPI以主从方式工作,即有一个主设

39、备和一个或多个从设备。SPI主设备与从设备通过SPI总线连接时,时钟线SCK、数据线MOSI和MISO都是同名端相连,从机选择线SS则一般由控制逻辑来产生。在实际应用中,MCU一般作为主SPI设备,带SPI接口的外围器件作为从设备。SPI:SPI总线双向传输数据时至少需要4根线,单向传输数据时至少需要3根线各信号定义及功能如下:MOSI:主设备数据输出,从设备数据输入;MISO:主设备数据输入,从设备数据输出;SCK:时钟信号,由主设备产生;SS:从设备使能信号,由主设备控制。当从设备使能信号有效时,所选中的从设备才能与主设备进行通信。这就允许在同一总线上连接多个SPI从设备。SPI内部结构:

40、传输时序:SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变,上升沿一位数据被存入移位寄存器。缺点:SPI接口没有指定的流控制,没有应答机制确认是否接收到数据。SPI的数据通信是在SCK时钟脉冲信号控制下一位一位传输的。主设备数据输出通过MOSI线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取,完成一位数据传输;主设备数据输入通过MISO线,也使用同样原理。这样,8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。从设备发送数据是通过

41、MISO线,接收数据是通过MOSI线,从设备数据发送和接收的原理与主设备的原理完全一致。SPI 主要特点主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。要注意的是,SCK信号线只由主设备控制,从设备不能控制该信号,因此,在一个基于SPI的系统至少要有一个主设备。SPI的传输方式与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控

42、制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。同时还要注意SPI传送数据时规定高位在前,低位在后。SPI总线有四种工作方式(SP0,SP1,SP2,SP3),其中使用的最为广泛的是SPI0和SPI3方式。SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性其输出串行同步时钟极性和相位可以进行配置,和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进

43、行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设时钟相位和极性应该一致。SPI总线的软件模拟:对于没有SPI接口的单片机来说,可使用软件来模拟SPI的操作,包括串行时钟、数据的输入/输出。单片机与SPI芯片接口电路原理图,在该图中,P1.0模拟MCU的数据输出端,P1.1模拟SPI的SCK输出端,P1.2模拟SPI的从机选择端,P1.3模拟SPI的数据输入端。将数据传送到芯片的SPISI中,同时从SPISO接收1字节数据返回。sbitss=P12;/sbit是

44、位变量,定义eeprom的SPI总线sbitspisi=P10;sbitspiso=P13;sbitspick=P11;voiddelay(uchardelay_time)/延时函数uchari;for(i=0;idelay_time;i+);voidclk(void)/产生一个时钟信号spick=1;delay(2);/延时匹配时序spick=0;delay(2);/延时匹配时序ucharspi_in_out(uchardata_out)uchardata_in;spiss=0;for(i=0;i8;i+)clk();/匹配时序if(data_out&0 x80)=0 x80)spi

45、si=1;/发送数据elsespisi=0;data_out=(data_out1);datain=(datain1)|spiso;/读取数据spiss=1;returndata_in;第一:SPI(Serial Peripheral Interface:串行外设接口);I2C(INTER IC BUS)UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)第二,区别在电气信号线上:SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供 SPI串

46、行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多 个从设备时,还可以增加一条从设备选择线。如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。边沿触发,具有更强的抗干扰能力。不需要上拉电阻。速度快。软件比IIC简单。I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进

47、行近距离、非经 常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。I2C是漏极开路结构,所以要接上拉电阻,闲置时必须置高如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。接线简单,但是软件比SPI复杂。速度低于SPI。UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。第三,从

48、第二点明显可以看出,SPI和UART可以实现全双工,但I2C不行;I2C线更少,但是技术上也更加麻烦些,因为因为I2C需要有双向需要有双向IO的支持的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,UART需要固定的波特率,就是说两位数据的间隔要相等,而SPI则无所谓,因为它是有时钟的协议。I2C的速度比SPI慢一点,协议比SPI复杂一点,但是连线也比标准的SPI要少。激光打印三大语言(PSPCLGDI):打印语言就是一个命令集,它告诉打印机如何组织被打印的文档.这些命令不是被单独地传送,而是由打印机驱动程序把它们嵌在打印数据

49、中传给打印机,并由打印机的打印控制器再分开解释.打印机语言总的来说可以分成两类1.PDL(页描述语言,PageDescriptionalLanguage)2.xCL(嵌入式语言,如ESCapeCodeLanguage)PDL功能强大,能输出复杂的页面和图像,但PDL的复杂性使打印机处理起来相对较慢.目前,激打和喷打普遍采用的PCL或PostScript都属于PDL.xCL的每一个命令都以一个特征码为前缀(如ESC),表示该字符串是一个命令而不是一般的打印数据.xCL比较简单,适用于文本或简单的图形.一般针式打印机采用ECL,只能使用不同的字体和字号输出文本,而不能处理特殊效果,不支持精密印刷.PDL语言PDL的业界标准分别是Adobe公司的PostScript语言和HP公司的PCL语言,目前的最高版本是PostScriptLevel3和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论