




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1主要内容:主要内容: 9.1 可编程外围定时器可编程外围定时器8253 9.2 可编程外围并行接口可编程外围并行接口8255 9.3 可编程接口芯片可编程接口芯片8155 9.4 I2C总线扩展存储器总线扩展存储器2 在很多应用场合在很多应用场合8051自身的资源不能满足要求。这时就自身的资源不能满足要求。这时就要扩展。要扩展。 扩展的外围芯片有:扩展的外围芯片有:8253、8155、8255以及以及I2C口。口。9.1 可编程外围定时器可编程外围定时器8253 Intel公司的公司的8253是可编定时器是可编定时器/计数器,片内包含有计数器,片内包含有3个独个独立的通道,每个通道均为立的通
2、道,每个通道均为16位的计数器。其计数速率均达位的计数器。其计数速率均达2.6MHz。38253123456789101112242322212019181716151413VCCWRRDCSA1A0CLK2OUT2GATE2CLK1GATE1OUT1D7D6D5D4D3D2D1D0CLK0OUT0GATE0GNDWR计数器计数器0计数器计数器1计数器计数器2数据数据总线总线缓冲器缓冲器读读/写写逻辑逻辑控制字控制字寄存器寄存器RDA0A1CSD7D0CLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2控制寄存器控制寄存器11计数器计数器301计数器计数器110计数器
3、计数器000选择选择A0A1表表9-1 A1,A0地址组合含义地址组合含义 9.1.1 8253的结构和引脚的结构和引脚CLK0计数器计数器GATE0UOT04 9.1.2 8253的工作方式和控制字的工作方式和控制字 8253计数器工作方式是由编程设定的,将控制字写入控计数器工作方式是由编程设定的,将控制字写入控制寄存器,用它来选择每一个计数器的工作方式。控制字制寄存器,用它来选择每一个计数器的工作方式。控制字的格式如下:的格式如下:BCDM0M1M2RL0RL1SC0 SC1D0D1D2D3D4D5D6D7非法非法11计数器计数器201计数器计数器110计数器计数器000选择选择SC0SC
4、1表表9-2 SC1,SC0组合含义组合含义表表9-3 RL1,RL0组合含义组合含义先读先读/写低位字节,写低位字节,后读后读/写高位字节写高位字节11只读只读/低字节低字节01只读只读/写高字节写高字节10计数器闩锁操作计数器闩锁操作00操作类型操作类型RL0RL1表表9-4 M2,M1,M0组合含义组合含义510140013110201011000000工作方式工作方式M0M1M25-从初值开始计数从初值开始计数-方式方式5允许计数允许计数-禁止计数禁止计数方式方式4允许计数允许计数从初值开始计数从初值开始计数禁止计数禁止计数,使使OUT变高变高方式方式3允许计数允许计数从初值开始计数从
5、初值开始计数禁止计数禁止计数,使使OUT变高变高方式方式2-从初值开始计数从初值开始计数,下一下一个时钟个时钟OUT变低变低-方式方式1允许计数允许计数-禁止计数禁止计数方式方式0GATE为高电平为高电平GATE为上降沿为上降沿GATE为低电平或下降沿为低电平或下降沿工作方式工作方式表表9- 门控信号门控信号GATE的控制功能的控制功能 方式方式0计数结束中断;方式计数结束中断;方式1可重复触发的单稳态触可重复触发的单稳态触发器;方式发器;方式2频率发生器;方式频率发生器;方式3方波发生器;方式方波发生器;方式4软件触发选通;方式软件触发选通;方式5硬件触发选通。硬件触发选通。6 9.1.3
6、8253与与8051的接口的接口 8253与与8051的接口如图的接口如图9-3所示。所示。 图中图中8253计数器计数器0、1、2的地址的地址为:为:8000H,8001H,8002H; 控制口地址为控制口地址为8003H。(地址怎地址怎么获得?么获得?) 例例 测测3个通道脉冲信号的计数个通道脉冲信号的计数率。率。 采用采用8253可同时测可同时测3个通道脉冲个通道脉冲信号。信号。 程序如下:程序如下:8051ALECLK0P0P1.7373154888D0D7A0A1P2.7P2.6P2.5P2.4RDRDCSWRWRGATE0,1,28253CLK1CLK2T0计数器计数器0计数器计数
7、器1计数器计数器2CLK0GATE0CLK1GATE1CLK2GATE2P1.778#include #include #define uchar unsigned char#define uint unsigned int#define COM8253 XBYTE0 x8003#define C1 XBYTE0 x8000#define C2 XBYTE0 x8001#define C3 XBYTE0 x8002#define SNUM 1sbit P1_7=P17; /*门控端门控端*/uchar it=20;uchar sn=SNUM;uint idata BUF82533; /*计数率
8、缓冲区计数率缓冲区*/9void ust0(void) /*使用定时器使用定时器0函数函数*/ TMOD=TMOD0 xf0+0 x01; /*定时器为方式定时器为方式1*/ TH0=0 x4c; TL0=0 x81; /*50ms定时初值定时初值*/ TR0=1; ET0=1; EA=1; /*启动定时器开中断启动定时器开中断*/ P1_7=1;void t0i(void) interrupt 1 /*定时器定时器0中断服务程序中断服务程序*/ TH0=0 x4c; TL0=0 x81; if(-it)=0) it=20; /*1s需需20次中断次中断*/ sn-; /*秒单元减秒单元减1*
9、/ 10void cbfp(uchar xdata *po,uchar x) /*计数器取值函数,参数为地址和通道计数器取值函数,参数为地址和通道*/ uchar h,i; i=*po;po+;po-; h=*po; BUF8253x=65536-(h*256+ i); /*因因8253减计数,应取补减计数,应取补*/11void fcbf(void) /*三个通道的取值函数三个通道的取值函数*/ P1_7=0; COM8253=0 x0a /*方式方式5,计数器,计数器0 */ COM8253=0 x4a /*方式方式5,计数器,计数器1 */ COM8253=0 x8a /*方式方式5,计
10、数器,计数器2 */ COM8253=0 x0a cbfp(&C1,0); /*取计数器取计数器0的计算值的计算值*/ COM8253=0 x4a cbfp(&C2,1); /*取计数器取计数器1的计算值的计算值*/ COM8253=0 x8a cbfp(&C3,2); /*取计数器取计数器2的计算值的计算值*/BCDM0M1M2RL0RL1SC0 SC1D0D1D2D3D4D5D6D712void init8253(void) /*初始化初始化8253函数函数*/ COM8253=0 x3a /*选方式选方式5*/ C1=0;C1=0; /*设计数器初值设计数器初值*/ COM8253=0
11、x7a C2=0;C2=0; COM8253=0 xba C3=0;C3=0;void main(void) init8253(); ust0(); while(sn); /*取取1s定时到定时到*/ fcbf();BCDM0M1M2RL0RL1SC0 SC1D0D1D2D3D4D5D6D7139.2 可编程外围并行接口可编程外围并行接口8255PA3PA2PA1PA0RDCSGNDA1A0PC7PC6PC5PC4PC0PC1PC2PC3PB0PB1PB28255123456789101112131415161718192040393837363534333231302928272625242
12、32221PA4PA5PA6PA7WRRESETD0D1D2D3D4D5D6D7VCCPB7PB6PB5PB4PB3D7D0A组组(8)端口端口AA组组(4)端口端口CB组组(4)端口端口CB组组(8)端口端口BA组组控制控制B组组控制控制数据数据总线总线缓冲器缓冲器读写读写控制控制逻辑逻辑PA7PA0PC7PC4PC3PC0PB7PB0RESETA0A1CSRDWR 9.2.1 8255的结构和引脚的结构和引脚14命令字口命令字口11口口C01口口B10口口A00选通的端选通的端口口A0A1表表9-5 端口选择端口选择. .C口口置置/ /复位控制字复位控制字D0D1D2D3D4D5D600
13、=复位,复位,1=置位置位置位置位D3D2D1位选择位选择不用时置不用时置000控制方式控制方式选择选择 9.2.2 8255的命令字和工作方式的命令字和工作方式000001010011100101110111C口口BIT0BIT1BIT2BIT3BIT4BIT5BIT6BIT715(4).(4).8255的控制字的控制字D0D1D2D3D4D5D61. .方式选择控制字方式选择控制字B口方式选择口方式选择1=方式方式1,0=方式方式0B口口1=输入,输入,0=输出输出C口口(下半部下半部)1=输入,输入,0=输出输出B组组A口方式选择口方式选择 00=方式方式0,01=方式方式1,1=方式方
14、式2A口口1=输入,输入,0=输出输出C口口(上半部上半部)1=输入,输入,0=输出输出A组组工作方式字工作方式字特征位特征位16OBFAOBFAI/OOUTINPC7ACKAACKAI/OOUTINPC6IBFAI/OIBFAOUTINPC5STBAI/OSTBAOUTINPC4INTRAINTRAINTRAOUTINPC3I/OACKBSTBBOUTINPC2I/OOBFBIBFBOUTINPC1I/OINTRBINTRBOUTINPC0C口口方式方式0或或1OUTINOUTINPBB口口OUTINOUTINPAA口口输入输入/输出输出输出输出输入输入输出输出输入输入方式方式2方式方式1方
15、式方式0端口端口表表9-6 8255在不同工作方式下的口线功能在不同工作方式下的口线功能1780C51P0.7P0.6.P0.0ALE8255ARESETEAD7.D0A1A0874LS373D7D6.D0Q7.Q1Q0EGRDRDWRWRCSPA7.PA0微型打印机微型打印机DB7.DB0BUSYSTBPB7.PB0PC7PC08 9.2.3 8255与与8051的接口的接口例:用例:用8255控制打印机。控制打印机。 8255采用方式采用方式0,由,由模拟参数模拟参数STB信号。信号。 按照接口电路,口按照接口电路,口A地址地址=7CH,口,口B地址地址=7DH,口,口C= 7EH,命命令
16、口地址令口地址=7FH。 PC7PC4为输入,为输入,PC3PC0为输出;方式为输出;方式选择命令字选择命令字=8EH。 程序如下:程序如下: D0D1D2D3D4D5D61. .方式选择控制字方式选择控制字(见见P212)18#include #include #define uchar unsigned char#define COM8255 XBYTE0 x007f /*命令口地址命令口地址*/#define PA8255 XBYTE0 x007c /*口口A地址地址*/#define PC8255 XBYTE0 x007e /*口口C地址地址*/void toptrn (uchar *
17、p) /*打印字符串函数打印字符串函数*/ while(*p!=0; while(0 x80&PC8255)!=0); /*查询等待打印机的查询等待打印机的BUSY状态状态*/ PA8255=*p; /*输出字符输出字符*/ COM8255=0 x00; COM8255=0 x01; /*模拟模拟STB脉冲脉冲*/ p+;19void main(void) uchar idata prn=“WELCOME”; COM8255=0 x8e; /*输出方式选择命令字输出方式选择命令字*/ COM8255=0 x01; toprn(prn); /*打印字符串打印字符串*/209.3 可编程接口芯片可
18、编程接口芯片8155 8155具有具有3个可编程并行个可编程并行I/O端口,端口,A口和口和B口是口是8位,位,C口是口是6位。位。1个个14位可编程的定时位可编程的定时/计数器和计数器和256字节的静态字节的静态RAM。 9.3.1 8155的结构和引脚功能的结构和引脚功能PC3PC4 PC5CERDWRALEAD0AD1AD2AD3AD4AD5AD6AD7VSS815512345678910111213141516171819204039383736353433323130292827262524232221VCCPC2PC1PC0PB7PB6PB5PB4PB3PB2PB1PB0PA7PA
19、6PA5PA4PA3PA2PA1PA0TIMER INRESETIO/MTIMER OUT256字节字节静态静态RAM14位位定时定时计数器计数器ABCTIMER INRESETAD0-7PA0-7PB0-7PC0-5ALETIMER OUTVCCVSSIO/MWRCERD21定时定时/计数器计数器输入端输入端PA1PA2PA3PA4PA5PA6PA7PA0PB1PB2PB3PB4PB5PB6PB7PB0PC1PC2PC3PC4PC5PC0AD1AD2AD3AD4AD5AD6AD7AD0TIMEINTIMEOUTALEIO/MRESETRDWRCE芯片引脚功能芯片引脚功能:RAM及及I/O选择
20、选择地址锁存线地址锁存线三态地址三态地址/数据数据复用线复用线端口端口A,I/O线线端口端口B,I/O线线端口端口C,I/O线线读选通信号线读选通信号线写选通信号线写选通信号线片选线片选线定时定时/计数器计数器输出端输出端复位端复位端1I/O0MCPU外设外设22v 81558155各引脚的功能为:各引脚的功能为: 地址地址/ /数据线数据线AD0AD0AD7AD7(8 8条):条):是低是低8 8位地址线和数据线的共用输入总线,常和单片机的位地址线和数据线的共用输入总线,常和单片机的P0P0口相口相连,用于分时传送地址和数据;连,用于分时传送地址和数据; PA0PA0PA7PA7、PB0PB
21、0PB7PB7:为为A A、B B口线,用于和外设之间传递数据;口线,用于和外设之间传递数据; PC0PC0PC5PC5为为C C端口线,既可与外设传送数据,也可以作为端口线,既可与外设传送数据,也可以作为A A、B B口的口的控制联控制联络线络线; CSCS:片选线,低电平有效。片选线,低电平有效。81558155的各引脚的功能的各引脚的功能2381558155的各引脚的功能的各引脚的功能 RESETRESET: 复位线,通常与单片机的复位端相连。复位线,通常与单片机的复位端相连。 ALEALE: 地址锁存线,高电平有效。地址锁存线,高电平有效。 IO/MIO/M: RAMRAM或或I/OI
22、/O口的选择线。当为口的选择线。当为0 0时,选中时,选中81558155的的256BRAM256BRAM;当为;当为1 1时,选中时,选中81558155片内片内3 3个个I/OI/O端口端口以及命令以及命令/ /状态寄存器和定时状态寄存器和定时/ /计数器。计数器。 RDRD和和WRWR: 读读/ /写线,控制写线,控制81558155的读、写操作。的读、写操作。 TMRINTMRIN(TITI):): 定时定时/计数器的脉冲输入端。计数器的脉冲输入端。 TMROUTTMROUT(TOTO):):定时定时/计数器的输出信号端。计数器的输出信号端。 VCCVCC: 电源端。电源端。 GNDG
23、ND: 接地端。接地端。24v 8155当当IO/M为为0时,单片机对时,单片机对8155的的RAM进行操作,共进行操作,共256B,低八位,低八位 v 的地址为:的地址为:00H0FFH。v 8155当当IO/M为为1时,单片机对时,单片机对8155的的I/O口进行操作。口进行操作。低八位地址低八位地址I/O口口xxxxx000B命令命令/状态口状态口xxxxx001BPA口口xxxxx010BPB口口xxxxx011BPC口口xxxxx100B定时器定时器/计数器低字节寄存器计数器低字节寄存器xxxxx101B定时器定时器/计数器高字节寄存器计数器高字节寄存器81558155的的RAMRA
24、M和和I/OI/O口地址编码口地址编码25 芯片芯片8155 的的I/O口口和和定时器定时器/计数器计数器的工作方式可以通的工作方式可以通过对过对8155的的命令寄存器命令寄存器写入控制字来实现。写入控制字来实现。 8155的的命令寄存器命令寄存器和和状态寄存器状态寄存器使用同一个地址。使用同一个地址。 8155的命令字的命令字命令字主要规定了命令字主要规定了8155的的I/O口口和和定时器定时器的工作方式。的工作方式。 8155的状态字的状态字状态字的内容包含状态字的内容包含8155的的I/O口口的的工作状态标志工作状态标志。 9.3.2 8155的命令字、状态字及工作方式的命令字、状态字及
25、工作方式26TM1TM2IEBIEA PC2 PC1PAPAPBA口方式口方式B口方式口方式B B口口A A口口计数器计数器方式方式00:00:空操作空操作01:01:停止计数停止计数10:10:计满后停止计满后停止11:11:开始计数开始计数0:0:输入输入1:1:输出输出0:0:禁止中断禁止中断1:1:允许中断允许中断00110110 方式方式1:A、B口基本口基本I/O;C口输入口输入方式方式2:A、B口基本口基本I/O;C口输出口输出方式方式3:A口选通口选通I/O;B口基本口基本I/O方式方式4:A、B口选通口选通I/O8155的命令字格式的命令字格式27C口在四种工作方式下的各位定
26、义C口通用I/O方式选通I/O方式ALT1ALT2ALT3ALT4PC0输入输出A INTR(A口中断)A INTR(A口中断)PC1输入输出ABF (A口缓冲器满)ABF (A口缓冲器满)PC2输入输出ASTB(A口选通)ASTB(A口选通)PC3输入输出输出B INTR(B口中断)PC4输入输出输出BBF (B口缓冲器满)PC5输入输出输出BSTB(B口选通)28选通I/O数据输入操作外设主动发送,8155和单片机被动接收外设向8155提出数据发送请求;8155接收数据后,通知外设“已收到”;8155通知单片机,取走数据;单片机通知8155:转告外设,可以再次发送数据了29选通I/O数据输
27、入操作当外设准备好数据并送PA口时,发出低电平的选通信号ASTB到PC2;8155接收到ASTB后:将PA上的数据读入A口寄存器使A口数据满ABF置位(PC1)以通知外设数据已收到。8155使PC0的A INTR标志置位,以通知单片机数据已收到。CPU响应中断执行服务程序,当执行到从A口读取输入的数据(MOVX)时,/RD的上升沿将PC0的INTEA清零并使PC1的ABF变低,通知外设输入下一个数据。 P0INT0 PAPD0-7/RD PC1 PC2 PC0D7- 0 C口为ALT3模式PC0:A口中断A INTR标志输出,送单片机;PC1:A口缓冲器满ABF标志输出,送外设。PC2:A口选
28、通输入ASTB,ASTBABFMCS-51 8155 外设A INTR30选通I/O数据输出操作单片机和8155主动发送,外设被动接收单片机向8155提出数据输出请求;8155接收单片机传给的数据后,通知外设“来取数据”;外设取走数据后,告知8155“取数完成”;8155通知单片机:数据转发完成,可以再次发送数据了31选通I/O数据输出操作CPU执行MOVX指令将数据送PA口,8155收到数据后PC1(ABF)变高,通知外设数据已到达PA口。外设接收到PC1(ABF)的高电平后:从D7-0上接收数据;使ASTB变低,通知8155外设已接收到数据。当8155监测到ASTB回到高电平时,使PC0的
29、A INTR变为高电平,向单片机申请中断。 单片机在中断服务程序中巴下一个数据送到A口,进行下一个数据的输出。 P0INT0 PAPD0-7 PC1 PC2 PC0D7- 0 ASTBABFMCS-51 8155 外设C口为ALT3模式,控制字:00011001BPC0:A口中断A INTR标志输出,送单片机;PC1:A口缓冲器满ABF标志输出,送外设。PC2:A口选通输入ASTB,A INTR32例:用例:用8155控制打印机。控制打印机。8051P08155RESETP3.3/INT18AD0AD7RDWRPA0PA1PA2PA3PA4PA5PA6PA7TPp-TFBUSYSTBPC0VC
30、CALEP2.7P2.0DB0DB1DB2DB3DB4DB5DB6DB7ALECEIO/MRDWRRESETGNDVCCVSS 右图是接口硬件连接图。右图是接口硬件连接图。8155地址:地址:P2.7=0,P2.0=1命令口地址命令口地址:7FF0H;口口A地址地址:7FF1H;口口C地址:地址:7FF3H;8155的初始化命令字:的初始化命令字:0FH(口口A、口基本、口基本I/O输出,口输出,口C输出输出)。33例:用例:用8155控制打印机。控制打印机。8051P08155RESETP3.3/INT18AD0AD7RDWRPA0PA1PA2PA3PA4PA5PA6PA7TPp-TFBUS
31、YSTBPC0VCCALEP2.7P2.0DB0DB1DB2DB3DB4DB5DB6DB7ALECEIO/MRDWRRESETGNDVCCVSS工作过程:工作过程:单片机向单片机向8155的口的口A写命令写命令;单片机向单片机向8155的口的口C依次写依次写00H、01H,在,在PC0上产生上产生脉冲上升沿脉冲上升沿,通知打印机取走数据通知打印机取走数据;打印机取走数据后,通过打印机取走数据后,通过BUSY引脚引脚下降沿下降沿触发单片机外部中断;触发单片机外部中断;在单片机外部中断程序中,将待打印数组连续输出到在单片机外部中断程序中,将待打印数组连续输出到8155的口的口A。 下面是打印下面是
32、打印“北京北京SPRING 1999”的程序,其中汉字的程序,其中汉字“北北京京”在硬汉字库中的标准机在硬汉字库中的标准机内代码为内代码为B1B1H和和BEA9H,打印机与打印机与8051采用中断方式采用中断方式联络。联络。34#include #include #define uchar unsigned char#define COM8155 XBYTE0 x7ff0 /*命令口地址命令口地址*/#define PA8155 XBYTE0 x7ff1 /*口口A地址地址*/#define PC8155 XBYTE0 x7ff3 /*口口C地址地址*/sbit BUSY=P33;uchar
33、code tab17= 0 xb1,0 xb1,0 xbe,0 xa9,0 x20,0 x53,0 x50,0 x52,0 x49,0 x4e,0 x47,0 x20,0 x31,0 x39,0 x39,0 x39,0 x0a /*北京北京 SPTING 1999*/uchar t1=17; void prt(uchar d) /*打印一字符函数打印一字符函数*/ PA8155=d; /*送打印字符代码送打印字符代码*/ PC8155=0 x00;PC8155=0 x01; /*产生产生STB脉冲脉冲*/ while(BUSY);/等待等待P3.3引脚上的电平由高变低引脚上的电平由高变低35v
34、oid main(void) COM8155=0 x0f; /*置命令字置命令字*/ prt(0 x1c); /*送入中文打印方式命令字高字节送入中文打印方式命令字高字节*/ prt(0 x26); /*送入中文打印方式命令字低字节送入中文打印方式命令字低字节*/ EA=1; /*开开CPU中断中断*/ EX1=1; /*开外部中断开外部中断1*/ while(1) ; void int1(void) interrupt 2 using 1 /*打印中断服务函数打印中断服务函数*/ uchar i; EA=0; for(i=0;it1;i+) /*打印一串字符打印一串字符*/ prt(tabi
35、); EA=1; EX1=0; /*关打印机中断关打印机中断*/36RDALE8155CE7407+5VP2.7P2.6RDALEWRP0.0 P0.78051PB0PB1PB2PB3PB4PB5PB6PB73308D0D7IO/MWRPA5PA4PA3PA2PA1PA0abcdefgdp740613.1.2 七段数码显示与七段数码显示与8051的接口的接口8155地址:地址: P2.7=1,P2.6=1命令口地址命令口地址:FFF0H;口口A地址地址:FFF1H;口口C地址地址:FFF3H;B口用来输出段选码;口用来输出段选码;A口用来输出位选码;口用来输出位选码;8155与与6位位LED显
36、示器接口。显示器接口。37例例1 8155控制的动态控制的动态LED显示。显示。RDALE8155CE7407+5VP2.7P2.6RDALEWRP0.0 P0.78051PB0PB1PB2PB3PB4PB5PB6PB73308D0D7IO/MWRPA5PA4PA3PA2PA1PA0abcdefgdp74068155与与6位位LED显示器接口。显示器接口。初始化命令字:初始化命令字:07HA口选通口选通I/O;B口基本口基本I/O输出;输出;C口:口:初始化命令字:初始化命令字:0FH、03H更合适更合适38#include#include#define uchar unsingned cha
37、r#define COM8155 XBYTE0 xfff0 #define PA8155 XBYTE0 xfff1#define PB8155 XBYTE0 xfff2#define PC8155 XBYTE0 xfff3uchar idata dis_buf6=2,4,6,8,10,12;uchar code table18=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f, 0 x7f,0 x6f,0 x77,0 x70,0 x39,0 x5e,0 x79,0 x71,0 x40,0 x00;void dl_ms(uch
38、ar d);void display(uchar idata *p) uchar sel,i; COM8155=0 x07; /*送命令字送命令字*/ sel=0 x01; /*选最右边的选最右边的LED*/ for(i=0;i6;i+) PB8155=table*p; /*送段码送段码*/ PA8155=sel; /*送位选码送位选码*/ dl_ms(1); p-; /*缓冲区下移缓冲区下移1位位*/ sel=sel1; /*左移左移1位位*/ void main(void) display(dis_buf+5); 399.4 I2C总线扩展存储器总线扩展存储器 目前单片机应用系统中使用的串
39、行扩展方式主要有:目前单片机应用系统中使用的串行扩展方式主要有: Philips公司的公司的I2C(Inter IC)总线;总线; Freescale公司的公司的SPI(serial Peripheral Interface)串行外设串行外设接口;接口; Dallas公司的单总线公司的单总线(1-wire); NS公司的串行接口公司的串行接口Microwire / Plus。 由于由于IC卡多采用卡多采用I2C总线接口的存储器卡,下面只介绍采总线接口的存储器卡,下面只介绍采用用I2C总线的存储器扩展。总线的存储器扩展。 9.4.1 I2C总线简介总线简介(自己看自己看)40 9.4.2 I2C
40、总线通信规约总线通信规约 I2C总线总线是一种用于是一种用于IC器件之间连接的二线制串行通信总器件之间连接的二线制串行通信总线,它通过两根线线,它通过两根线(SDA,串行数据线;,串行数据线;SCL,串行时钟线,串行时钟线)在连到总线上的器件之间传送信息,根据地址识别每个器件,在连到总线上的器件之间传送信息,根据地址识别每个器件,可方便地构成可方便地构成多机系统多机系统和和外围器件外围器件扩展系统。扩展系统。SDASCLAT24C04A1 A2RXDTXD总线主机总线主机SDASCLAT24C04A1 A2SDASCL其他总线从机其他总线从机+5V+5VR2 主要特点主要特点:*二线传输,二线
41、传输, I2C总线上所有主器件、外围器件总线上所有主器件、外围器件等都连到同名端的等都连到同名端的SDA和和SCL线上。线上。41SDASCLAT24C04A1 A2RXDTXD总线主机总线主机SDASCLAT24C04A1 A2SDASCL其他总线从机其他总线从机+5V+5VR2 *系统中有多个主器件时,任何一个器件在系统中有多个主器件时,任何一个器件在I2C总线上工作总线上工作时都可以成为主控制器。时都可以成为主控制器。 * I2C总线传输时,采用状态码管理方法,数据传输时任何总线传输时,采用状态码管理方法,数据传输时任何一种状态都会产生响应的状态码,并进行自动处理。一种状态都会产生响应的
42、状态码,并进行自动处理。 *所有外围器件都可以采用器件地址和引脚地址的硬件编所有外围器件都可以采用器件地址和引脚地址的硬件编址方法避免了片选线的连线方法。(见上图)址方法避免了片选线的连线方法。(见上图) *所有带所有带I2C的器件都具有应答功能,当片内多个单元地址的器件都具有应答功能,当片内多个单元地址时,数据读写都有自动加时,数据读写都有自动加1功能。功能。42 按照二线制串行通信总线传输按照二线制串行通信总线传输规定规定:将数据传输到总线上的:将数据传输到总线上的器件称为器件称为发送器发送器,而从总线上接收数据的器件称为,而从总线上接收数据的器件称为接收器接收器。 可以控制数据传送的器件
43、称为可以控制数据传送的器件称为主机主机(通常为单片机通常为单片机)。主机。主机作作用;用;需要启动数据的发送和接收,并提供传送时钟。需要启动数据的发送和接收,并提供传送时钟。 该系统上的其他芯片即为该系统上的其他芯片即为从器件从器件或或从机从机。 数据传输方式数据传输方式:若:若A机机(主器件主器件)B机机(从器件从器件)。 首先首先A机寻址机寻址B机,机,然后然后A机机(主发送主发送)把数据送至把数据送至B机机(从从接收接收),最后由最后由A机终止传送。机终止传送。 若若A机机(主器件主器件)B机机(从器件从器件)。 首先首先A机寻址机寻址B机,机, 然后然后A机机(主接收主接收)接收接收B
44、机机(从发送从发送)的数据,的数据, 最后由最后由A机终止传送。机终止传送。介绍一些概念和规定介绍一些概念和规定43 *SDA和和SCL都是双向都是双向I/O线,通过上拉电阻接到正电源。线,通过上拉电阻接到正电源。 *当总线空闲时,两根线都是高电平。当总线空闲时,两根线都是高电平。 *数据传输速率为数据传输速率为100kb/s。 *连到总线上的数量仅受总线电容连到总线上的数量仅受总线电容400pF的限制。的限制。 送到送到SDA线上的每个字节必须为线上的每个字节必须为8位,每次传送的字节数位,每次传送的字节数不限,每个字节后面必须跟不限,每个字节后面必须跟1个响应位,数据传送时,先传个响应位,
45、数据传送时,先传最高位。最高位。 通常被寻址的接收器件必须在收到每个字节后作出响应。通常被寻址的接收器件必须在收到每个字节后作出响应。 I2C总线发信号的第一个字节用来确定主器件所选择的总线发信号的第一个字节用来确定主器件所选择的(从从器件。该字节的高器件。该字节的高7位组成器件的地址,最低位确定信息的位组成器件的地址,最低位确定信息的方向。方向。44 9.4.3 串行串行I2C总线总线E2PROM24XX AT24CXX系列系列E2PROM是典型的是典型的I2C总线接口器件。特点总线接口器件。特点是:是:单电源供电;单电源供电;采用低功耗采用低功耗COMS技术;技术;工作电工作电压范围宽压范
46、围宽(1.85.5V);自定时写周期自定时写周期(包括自动擦除包括自动擦除)、页、页面写周期的典型值为面写周期的典型值为2ms;具有硬件保护。具有硬件保护。 AT24CXX系列的器系列的器件内部结构和引脚如件内部结构和引脚如图图9-11所示。所示。I/O控制逻辑控制逻辑存储器存储器控制逻辑控制逻辑E2PROM存储阵列存储阵列页缓冲器页缓冲器电压提升电压提升Y译码译码R/W控制控制X译码译码VCCSDASCLWPVSSA0 A1 A2AT24C12348765VCCA0A1A2GNDWPSCLSDA45读读/写控制位写控制位片选或块选片选或块选I2C从器件地址从器件地址R/WA2 A1 A01
47、0 1 0 1.控制字节要求控制字节要求 开始位以后,主器件送出一个开始位以后,主器件送出一个8位控制字节,以选择从器位控制字节,以选择从器件扩展总线传送的方向。控制字节的结构如下所示:件扩展总线传送的方向。控制字节的结构如下所示: 位位7位位4为从器件地址位,确定器件类型。此为从器件地址位,确定器件类型。此4位码由位码由Plilips公司的公司的I2C规约所决定。规约所决定。1010吗即从器件为串行吗即从器件为串行E2PROM。串行。串行E2PROM将一直处于等待状态,直接将一直处于等待状态,直接1010码发送到总线上为止。当其他非串行码发送到总线上为止。当其他非串行E2PROM从器件将不从
48、器件将不会响应。会响应。46读读/写控制位写控制位片选或块选片选或块选I2C从器件地址从器件地址R/WA2 A1 A01 0 1 0 位位3位位1为为18片的片选或存储器内的块地址选择位。标片的片选或存储器内的块地址选择位。标准的准的I2C规约允许选择规约允许选择16KB的存储器。通过对几片或一个器的存储器。通过对几片或一个器件内的几个块的存取,可完成对件内的几个块的存取,可完成对16KB存储器的选择。存储器的选择。 位位0为读为读/写操作控制码。如果此位为写操作控制码。如果此位为1,则下一个字节进,则下一个字节进行读操作行读操作(R);若此位为;若此位为0,则下一个字节进行写操作,则下一个字
49、节进行写操作(W)。 当串行当串行E2PROM产生控制字节并检测到应答信号以后,产生控制字节并检测到应答信号以后,主器件总线上将传送相应的字地址或数据信息。主器件总线上将传送相应的字地址或数据信息。47 2.起始信号、停止信号和应答信号起始信号、停止信号和应答信号 起始信号:起始信号应该在读起始信号:起始信号应该在读/写操作命令之前发出。写操作命令之前发出。 停止信号:表示一种操作的结束。停止信号:表示一种操作的结束。 数据和地址都是以数据和地址都是以8位的串行信号传送。在接收一个字节位的串行信号传送。在接收一个字节后,接收器件必须产生一个应答信号后,接收器件必须产生一个应答信号ACK,主器件
50、必须产,主器件必须产生一个与此应答信号相应的额外时钟脉冲。生一个与此应答信号相应的额外时钟脉冲。SDASCL4.7s4.7s(a)起始信号起始信号SSDASCL4.0s4.0s(b)停止信号停止信号P48SCLSDA4.0s(c)发送发送ACKSCLSDA4.0s(d)发送发送ACK 3.写操作写操作 AT24CXX系列系列E2PROM的写操作有字节写和页面写的写操作有字节写和页面写2种。种。 (1)字节写字节写SDA线线启动启动芯片地址芯片地址 写写字地址字地址数据数据停止停止R/WACKMSBLSBACKACK49SDA线线启动启动芯片地址芯片地址 写写字地址字地址数据数据n停止停止R/W
51、ACKMSBLSBACKACK数据数据n+1数据数据n+ xACKACK (2)页面写页面写 4.读操作读操作 当从器件地址的当从器件地址的R/W位被置为位被置为1时,启动读操作。时,启动读操作。AT24CXX系列的读操作有系列的读操作有3种类型:读当前地址内容、读指种类型:读当前地址内容、读指定地址内容、读顺序地址内容。定地址内容、读顺序地址内容。 (1)读当前地址内容读当前地址内容SDA线线启动启动芯片地址芯片地址 读读数据数据停止停止R/WACKNOACKS50SDA线线启动启动芯片地址芯片地址 写写字地址字地址nACKACK启动启动芯片地址芯片地址 读读数据数据n停止停止R/WACKN
52、OACKS芯片地址芯片地址ACKACK读读数据数据n停止停止R/WACKSDA线线ACK数据数据n+1数据数据n+x数据数据 (2)读指定地址内容读指定地址内容 (3)读顺序地址内容读顺序地址内容515.1k28051P1.6P1.7+5VAT24C02A0A1A2WPSCLSDAVCCVCC 9.4.4 I2C总线的编程的实现总线的编程的实现 假设用假设用P1.7和和P1.6分别作为分别作为SDA和和SCL信号,如图信号,如图9-18所示。所示。 单片机所用晶体振荡器的频率为单片机所用晶体振荡器的频率为6MHz。机器周期。机器周期2s,可分别写出产,可分别写出产生时钟生时钟SCL和和SDA的
53、起始和停止信号的起始和停止信号程序。程序。 用软件模拟用软件模拟I2C总线产生起始信号、停止信号和进行数据总线产生起始信号、停止信号和进行数据传送的程序。传送的程序。52#include #include#define uchar unsingned char#define uint usingned intsbit SDA=P17;Sbit SCL=P16;void start_iic() /*产生产生I2C总线起始信号总线起始信号*/ SDA=1; /*发送起始条件数据信号发送起始条件数据信号*/ SCL=1; _nop_(); /*起始信号建立时间大于起始信号建立时间大于4.7s*/ _
54、nop_(); SDA=0; /*发送起始信号发送起始信号*/ _nop_(); _nop_(); SCL=0; /*箝位箝位*/53void stop_iic() /*产生产生I2C总线停止信号总线停止信号*/ SDA=0; /*发送停止条件数据信号发送停止条件数据信号*/ SCL=1; _nop_(); /*停止信号建立时间大于停止信号建立时间大于4s*/ _nop_(); SDA=1; /*发送停止信号发送停止信号*/ _nop_(); _nop_(); SCL=0;void ack_iic() /*产生产生I2C总线应答信号总线应答信号*/ SDA=0; SCL=1; _nop_();
55、 _nop_(); SDA=0; SCL=1;54void nack_iic() /*产生产生I2C总线非应答信号总线非应答信号*/ SDA=1; SCL=1; _nop_(); _nop_(); SDA=0; SCL=0;55write_byte(uchar c) /*向虚拟向虚拟I2C总线上发送总线上发送1字节数据字节数据*/ uchar i; for (i=0;i8;i+) if(c&0 x80) SDA=1; /*判断发送位判断发送位*/ eles SDA=0; SCL=1; /*时钟线为高,通知从器件开始接收数据时钟线为高,通知从器件开始接收数据*/ _nop_(); _nop_()
56、; SCL=0; c=c1; /*准备下一位准备下一位*/ SDA=1; SCL=1; /*释放数据线,准备接收应答信号释放数据线,准备接收应答信号*/ _nop_(); _nop_(); if(SDA=1)F0=0; /*判断是否收到应答信号判断是否收到应答信号*/ else F0=1; SCL=0;56uchar read_byte( ) /*从虚拟从虚拟I2C总线上读取总线上读取1字节数据字节数据*/ uchar i; uchar r=0; SDA=1; /*置数据线为输入方式置数据线为输入方式*/ for(i=0;i8;i+) r=r1 /*左移补左移补0*/ SCL=1; /*置时钟线为高,数据有效置时钟线为高,数据有效*/ _nop_(); _nop_(); if(SDA=1) r+; /*当数据线为高时,加当数据线为高时,加1*/ SCL=0; return;57/*向虚拟向虚拟I2C总线上发送总线上发送n字节数据字节数据*/bit write_nbyte(uchar slave,uchar addr,uchar *s,uchar numb) uchar i; start_iic(); /*发送起始信号发送起始信号*/ write_byte(slave); /*发送从器件地址发送从器件地址*/ if(F0=0)return0; wr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 丰田管理5S模式
- 中班统计图课件
- 白城实验高级中学2025年第一次模拟考试数学试卷数学答案
- 企业新员工安全生产培训
- 电工电子技术 课件 1 手电筒电路的连接与测试
- 夺命高校管理会计总结
- 公司管理层费用报销培训
- 用微课学 图形图像处理(Photoshop CS6)课件 项目二任务一-任务五 去除文字水印-色彩平衡
- 幼儿园组织文化管理
- ERAS在剖宫产培训
- 万达宝软件逻辑计算笔试题
- (2024年)保安培训图文课件
- 专题16.7 二次根式章末八大题型总结(拔尖篇)-八年级数学下册(人教版)(解析版)
- 《养老护理员》-课件:协助卧床老年人使用便器排便
- 国家开放大学《JavaScript程序设计》复习指导参考答案
- 特种加工技术课件
- 禽屠宰兽医卫生检验人员岗位技能要求
- 康恩贝流程优化与ERP实施项目方案建议书20150612V1.0
- 饲料厂奖惩制度汇编
- 《互联网营销课件:市场拓展的七大技巧》
- 应用数学智慧树知到课后章节答案2023年下杨凌职业技术学院
评论
0/150
提交评论