![第9章8051擴(kuò)展資源的C編程_第1頁](http://file4.renrendoc.com/view/96965ed6f219585f62892c37f225090e/96965ed6f219585f62892c37f225090e1.gif)
![第9章8051擴(kuò)展資源的C編程_第2頁](http://file4.renrendoc.com/view/96965ed6f219585f62892c37f225090e/96965ed6f219585f62892c37f225090e2.gif)
![第9章8051擴(kuò)展資源的C編程_第3頁](http://file4.renrendoc.com/view/96965ed6f219585f62892c37f225090e/96965ed6f219585f62892c37f225090e3.gif)
![第9章8051擴(kuò)展資源的C編程_第4頁](http://file4.renrendoc.com/view/96965ed6f219585f62892c37f225090e/96965ed6f219585f62892c37f225090e4.gif)
![第9章8051擴(kuò)展資源的C編程_第5頁](http://file4.renrendoc.com/view/96965ed6f219585f62892c37f225090e/96965ed6f219585f62892c37f225090e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章8051擴(kuò)展資源的C編程主要內(nèi)容:
9.1可編程外圍定時(shí)器82539.2可編程外圍并行接口82559.3可編程接口芯片81559.4I2C總線擴(kuò)展存儲(chǔ)器1在很多應(yīng)用場(chǎng)合8051自身的資源不能滿足要求。這時(shí)就要擴(kuò)展。擴(kuò)展的外圍芯片有:8253、8155、8255以及I2C口。9.1可編程外圍定時(shí)器8253Intel公司的8253是可編定時(shí)器/計(jì)數(shù)器,片內(nèi)包含有3個(gè)獨(dú)立的通道,每個(gè)通道均為16位的計(jì)數(shù)器。其計(jì)數(shù)速率均達(dá)2.6MHz。28253123456789101112242322212019181716151413VCCWRRDCSA1A0CLK2OUT2GATE2CLK1GATE1OUT1D7D6D5D4D3D2D1D0CLK0OUT0GATE0GNDWR計(jì)數(shù)器0計(jì)數(shù)器1計(jì)數(shù)器2數(shù)據(jù)總線緩沖器讀/寫邏輯控制字寄存器RDA0A1CSD7~D0CLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2控制寄存器11計(jì)數(shù)器301計(jì)數(shù)器110計(jì)數(shù)器000選擇A0A1表9-1A1,A0地址組合含義9.1.18253的結(jié)構(gòu)和引腳CLK0計(jì)數(shù)器GATE0UOT039.1.28253的工作方式和控制字8253計(jì)數(shù)器工作方式是由編程設(shè)定的,將控制字寫入控制寄存器,用它來選擇每一個(gè)計(jì)數(shù)器的工作方式??刂谱值母袷饺缦拢築CDM0M1M2RL0RL1SC0SC1D0D1D2D3D4D5D6D7非法11計(jì)數(shù)器201計(jì)數(shù)器110計(jì)數(shù)器000選擇SC0SC1表9-2SC1,SC0組合含義表9-3RL1,RL0組合含義先讀/寫低位字節(jié),后讀/寫高位字節(jié)11只讀/低字節(jié)01只讀/寫高字節(jié)10計(jì)數(shù)器閂鎖操作00操作類型RL0RL1表9-4M2,M1,M0組合含義510140013110201011000000工作方式M0M1M24-----從初值開始計(jì)數(shù)-----方式5允許計(jì)數(shù)-----禁止計(jì)數(shù)方式4允許計(jì)數(shù)從初值開始計(jì)數(shù)禁止計(jì)數(shù),使OUT變高方式3允許計(jì)數(shù)從初值開始計(jì)數(shù)禁止計(jì)數(shù),使OUT變高方式2-----從初值開始計(jì)數(shù),下一個(gè)時(shí)鐘OUT變低-----方式1允許計(jì)數(shù)-----禁止計(jì)數(shù)方式0GATE為高電平GATE為上降沿GATE為低電平或下降沿工作方式表9-門控信號(hào)GATE的控制功能方式0—計(jì)數(shù)結(jié)束中斷;方式1—可重復(fù)觸發(fā)的單穩(wěn)態(tài)觸發(fā)器;方式2—頻率發(fā)生器;方式3—方波發(fā)生器;方式4—軟件觸發(fā)選通;方式5—硬件觸發(fā)選通。59.1.38253與8051的接口8253與8051的接口如圖9-3所示。圖中8253計(jì)數(shù)器0、1、2的地址為:8000H,8001H,8002H;控制口地址為8003H。(地址怎么獲得?)例測(cè)3個(gè)通道脈沖信號(hào)的計(jì)數(shù)率。采用8253可同時(shí)測(cè)3個(gè)通道脈沖信號(hào)。程序如下:8051ALECLK0P0P1.7373154888D0~D7A0A1P2.7P2.6P2.5P2.4RDRDCSWRWRGATE0,1,28253CLK1CLK2T0計(jì)數(shù)器0計(jì)數(shù)器1計(jì)數(shù)器2CLK0GATE0CLK1GATE1CLK2GATE2P1.767#include<absacc.h>#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#defineCOM8253XBYTE[0x8003]#defineC1XBYTE[0x8000]#defineC2XBYTE[0x8001]#defineC3XBYTE[0x8002]#defineSNUM1sbitP1_7=P1^7;/*門控端*/ucharit=20;ucharsn=SNUM;uintidataBUF8253[3];/*計(jì)數(shù)率緩沖區(qū)*/8voidust0(void){/*使用定時(shí)器0函數(shù)*/TMOD=TMOD&0xf0+0x01;/*定時(shí)器為方式1*/TH0=0x4c;TL0=0x81;/*50ms定時(shí)初值*/TR0=1;ET0=1;EA=1;/*啟動(dòng)定時(shí)器開中斷*/P1_7=1;}voidt0i(void)interrupt1{/*定時(shí)器0中斷服務(wù)程序*/TH0=0x4c;TL0=0x81;if((--it)==0){it=20;/*1s需20次中斷*/sn--;/*秒單元減1*/}}9voidcbfp(ucharxdata*po,ucharx){/*計(jì)數(shù)器取值函數(shù),參數(shù)為地址和通道*/ucharh,i;i=*po;po++;po--;h=*po;BUF8253[x]=65536-(h*256+i);/*因8253減計(jì)數(shù),應(yīng)取補(bǔ)*/}10voidfcbf(void){/*三個(gè)通道的取值函數(shù)*/P1_7=0;COM8253=0x0a/*方式5,計(jì)數(shù)器0*/COM8253=0x4a/*方式5,計(jì)數(shù)器1*/COM8253=0x8a/*方式5,計(jì)數(shù)器2*/COM8253=0x0acbfp(&C1,0);/*取計(jì)數(shù)器0的計(jì)算值*/COM8253=0x4acbfp(&C2,1);/*取計(jì)數(shù)器1的計(jì)算值*/COM8253=0x8acbfp(&C3,2);/*取計(jì)數(shù)器2的計(jì)算值*/}BCDM0M1M2RL0RL1SC0SC1D0D1D2D3D4D5D6D711voidinit8253(void){/*初始化8253函數(shù)*/COM8253=0x3a/*選方式5*/C1=0;C1=0;/*設(shè)計(jì)數(shù)器初值*/COM8253=0x7aC2=0;C2=0;COM8253=0xbaC3=0;C3=0;}voidmain(void){init8253();ust0();while(sn);/*取1s定時(shí)到*/fcbf();}BCDM0M1M2RL0RL1SC0SC1D0D1D2D3D4D5D6D7129.2可編程外圍并行接口8255PA3PA2PA1PA0RDCSGNDA1A0PC7PC6PC5PC4PC0PC1PC2PC3PB0PB1PB2825512345678910111213141516171819204039383736353433323130292827262524232221PA4PA5PA6PA7WRRESETD0D1D2D3D4D5D6D7VCCPB7PB6PB5PB4PB3D7~D0A組(8)端口AA組(4)端口CB組(4)端口CB組(8)端口BA組控制B組控制數(shù)據(jù)總線緩沖器讀寫控制邏輯PA7~PA0PC7~PC4PC3~PC0PB7~PB0RESETA0A1CSRDWR9.2.18255的結(jié)構(gòu)和引腳13命令字口11口C01口B10口A00選通的端口A0A1表9-5端口選擇②.C口置/復(fù)位控制字D0D1D2D3D4D5D600=復(fù)位,1=置位置位D3D2D1位選擇不用時(shí)置000控制方式選擇9.2.28255的命令字和工作方式000001010011100101110111C口BIT0BIT1BIT2BIT3BIT4BIT5BIT6BIT714(4).8255的控制字D0D1D2D3D4D5D61①.方式選擇控制字B口方式選擇1=方式1,0=方式0B口1=輸入,0=輸出C口(下半部)1=輸入,0=輸出B組A口方式選擇00=方式0,01=方式1,1×=方式2A口1=輸入,0=輸出C口(上半部)1=輸入,0=輸出A組工作方式字特征位15OBFAOBFAI/OOUTINPC7ACKAACKAI/OOUTINPC6IBFAI/OIBFAOUTINPC5STBAI/OSTBAOUTINPC4INTRAINTRAINTRAOUTINPC3I/OACKBSTBBOUTINPC2I/OOBFBIBFBOUTINPC1I/OINTRBINTRBOUTINPC0C口方式0或1OUTINOUTINPBB口←→OUTINOUTINPAA口輸入/輸出輸出輸入輸出輸入方式2方式1方式0端口表9-68255在不同工作方式下的口線功能1680C51P0.7P0.6..P0.0ALE8255ARESETEAD7...D0A1A0874LS373D7D6..D0Q7..Q1Q0EGRDRDWRWRCSPA7...PA0微型打印機(jī)DB7...DB0BUSYSTBPB7...PB0PC7PC089.2.38255與8051的接口例:用8255控制打印機(jī)。8255采用方式0,由模擬參數(shù)STB信號(hào)。按照接口電路,口A地址=7CH,口B地址=7DH,口C=7EH,命令口地址=7FH。PC7~PC4為輸入,PC3~PC0為輸出;方式選擇命令字=8EH。程序如下:D0D1D2D3D4D5D61①.方式選擇控制字(見P212)17#include<absacc.h>#include<reg51.h>#defineucharunsignedchar#defineCOM8255XBYTE[0x007f]/*命令口地址*/#definePA8255XBYTE[0x007c]/*口A地址*/#definePC8255XBYTE[0x007e]/*口C地址*/voidtoptrn(uchar*p){/*打印字符串函數(shù)*/while(*p!=‘\0’;{while((0x80&PC8255)!=0);/*查詢等待打印機(jī)的BUSY狀態(tài)*/PA8255=*p;/*輸出字符*/COM8255=0x00;COM8255=0x01;/*模擬STB脈沖*/p++;}18voidmain(void){ucharidataprn[]=“WELCOME”;COM8255=0x8e;/*輸出方式選擇命令字*/COM8255=0x01;toprn(prn);/*打印字符串*/}199.3可編程接口芯片8155
8155具有3個(gè)可編程并行I/O端口,A口和B口是8位,C口是6位。1個(gè)14位可編程的定時(shí)/計(jì)數(shù)器和256字節(jié)的靜態(tài)RAM。9.3.18155的結(jié)構(gòu)和引腳功能PC3PC4
PC5CERDWRALEAD0AD1AD2AD3AD4AD5AD6AD7VSS815512345678910111213141516171819204039383736353433323130292827262524232221VCCPC2PC1PC0PB7PB6PB5PB4PB3PB2PB1PB0PA7PA6PA5PA4PA3PA2PA1PA0TIMERINRESETIO/MTIMEROUT256字節(jié)靜態(tài)RAM14位定時(shí)計(jì)數(shù)器ABCTIMERINRESETAD0-7PA0-7PB0-7PC0-5ALETIMEROUTVCCVSSIO/MWRCERD20定時(shí)/計(jì)數(shù)器輸入端PA1PA2PA3PA4PA5PA6PA7PA0PB1PB2PB3PB4PB5PB6PB7PB0PC1PC2PC3PC4PC5PC0AD1AD2AD3AD4AD5AD6AD7AD0TIMEINTIMEOUTALEIO/MRESETRDWRCE芯片引腳功能:RAM及I/O選擇地址鎖存線三態(tài)地址/數(shù)據(jù)復(fù)用線端口A,I/O線端口B,I/O線端口C,I/O線讀選通信號(hào)線寫選通信號(hào)線片選線定時(shí)/計(jì)數(shù)器輸出端復(fù)位端1I/O0MCPU外設(shè)218155各引腳的功能為:地址/數(shù)據(jù)線AD0~AD7(8條): 是低8位地址線和數(shù)據(jù)線的共用輸入總線,常和單片機(jī)的P0口相連,用于分時(shí)傳送地址和數(shù)據(jù);PA0~PA7、PB0~PB7: 為A、B口線,用于和外設(shè)之間傳遞數(shù)據(jù);PC0~PC5
為C端口線,既可與外設(shè)傳送數(shù)據(jù),也可以作為A、B口的控制聯(lián)絡(luò)線;CS:片選線,低電平有效。8155的各引腳的功能228155的各引腳的功能RESET:復(fù)位線,通常與單片機(jī)的復(fù)位端相連。ALE:地址鎖存線,高電平有效。IO/M:
RAM或I/O口的選擇線。當(dāng)為0時(shí),選中8155 的256BRAM;當(dāng)為1時(shí),選中8155片內(nèi)3個(gè)I/O端口 以及命令/狀態(tài)寄存器和定時(shí)/計(jì)數(shù)器。RD和WR:讀/寫線,控制8155的讀、寫操作。TMRIN(TI):定時(shí)/計(jì)數(shù)器的脈沖輸入端。TMROUT(TO):定時(shí)/計(jì)數(shù)器的輸出信號(hào)端。VCC:電源端。GND:接地端。238155當(dāng)IO/M為0時(shí),單片機(jī)對(duì)8155的RAM進(jìn)行操作,共256B,低八位的地址為:00H—0FFH。8155當(dāng)IO/M為1時(shí),單片機(jī)對(duì)8155的I/O口進(jìn)行操作。低八位地址I/O口xxxxx000B命令/狀態(tài)口xxxxx001BPA口xxxxx010BPB口xxxxx011BPC口xxxxx100B定時(shí)器/計(jì)數(shù)器低字節(jié)寄存器xxxxx101B定時(shí)器/計(jì)數(shù)器高字節(jié)寄存器8155的RAM和I/O口地址編碼24芯片8155的I/O口和定時(shí)器/計(jì)數(shù)器的工作方式可以通過對(duì)8155的命令寄存器寫入控制字來實(shí)現(xiàn)。
8155的命令寄存器和狀態(tài)寄存器使用同一個(gè)地址。
8155的命令字
命令字主要規(guī)定了8155的I/O口和定時(shí)器的工作方式。
8155的狀態(tài)字
狀態(tài)字的內(nèi)容包含8155的I/O口的工作狀態(tài)標(biāo)志。
9.3.28155的命令字、狀態(tài)字及工作方式25TM1TM2IEBIEAPC2PC1PAPAPBA口方式B口方式B口A口計(jì)數(shù)器方式00:空操作01:停止計(jì)數(shù)10:計(jì)滿后停止11:開始計(jì)數(shù)0:輸入1:輸出0:禁止中斷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的命令字格式26C口在四種工作方式下的各位定義C口通用I/O方式選通I/O方式ALT1ALT2ALT3ALT4PC0輸入輸出AINTR(A口中斷)AINTR(A口中斷)PC1輸入輸出ABF(A口緩沖器滿)ABF(A口緩沖器滿)PC2輸入輸出ASTB(A口選通)ASTB(A口選通)PC3輸入輸出輸出BINTR(B口中斷)PC4輸入輸出輸出BBF(B口緩沖器滿)PC5輸入輸出輸出BSTB(B口選通)27選通I/O數(shù)據(jù)輸入操作外設(shè)主動(dòng)發(fā)送,8155和單片機(jī)被動(dòng)接收外設(shè)向8155提出數(shù)據(jù)發(fā)送請(qǐng)求;8155接收數(shù)據(jù)后,通知外設(shè)“已收到”;8155通知單片機(jī),取走數(shù)據(jù);單片機(jī)通知8155:轉(zhuǎn)告外設(shè),可以再次發(fā)送數(shù)據(jù)了28選通I/O數(shù)據(jù)輸入操作當(dāng)外設(shè)準(zhǔn)備好數(shù)據(jù)并送PA口時(shí),發(fā)出低電平的選通信號(hào)ASTB到PC2;8155接收到ASTB后:將PA上的數(shù)據(jù)讀入A口寄存器使A口數(shù)據(jù)滿ABF置位(PC1)以通知外設(shè)數(shù)據(jù)已收到。8155使PC0的AINTR標(biāo)志置位,以通知單片機(jī)數(shù)據(jù)已收到。CPU響應(yīng)中斷執(zhí)行服務(wù)程序,當(dāng)執(zhí)行到從A口讀取輸入的數(shù)據(jù)(MOVX)時(shí),/RD的上升沿將PC0的INTEA清零并使PC1的ABF變低,通知外設(shè)輸入下一個(gè)數(shù)據(jù)。
P0INT0
PAPD0-7/RDPC1PC2PC0D7-0
C口為ALT3模式PC0:A口中斷AINTR標(biāo)志輸出,送單片機(jī);PC1:A口緩沖器滿ABF標(biāo)志輸出,送外設(shè)。PC2:A口選通輸入ASTB,ASTBABFMCS-518155外設(shè)AINTR29選通I/O數(shù)據(jù)輸出操作單片機(jī)和8155主動(dòng)發(fā)送,外設(shè)被動(dòng)接收單片機(jī)向8155提出數(shù)據(jù)輸出請(qǐng)求;8155接收單片機(jī)傳給的數(shù)據(jù)后,通知外設(shè)“來取數(shù)據(jù)”;外設(shè)取走數(shù)據(jù)后,告知8155“取數(shù)完成”;8155通知單片機(jī):數(shù)據(jù)轉(zhuǎn)發(fā)完成,可以再次發(fā)送數(shù)據(jù)了30選通I/O數(shù)據(jù)輸出操作CPU執(zhí)行MOVX指令將數(shù)據(jù)送PA口,8155收到數(shù)據(jù)后PC1(ABF)變高,通知外設(shè)數(shù)據(jù)已到達(dá)PA口。外設(shè)接收到PC1(ABF)的高電平后:從D7-0上接收數(shù)據(jù);使ASTB變低,通知8155外設(shè)已接收到數(shù)據(jù)。當(dāng)8155監(jiān)測(cè)到ASTB回到高電平時(shí),使PC0的AINTR變?yōu)楦唠娖?,向單片機(jī)申請(qǐng)中斷。單片機(jī)在中斷服務(wù)程序中巴下一個(gè)數(shù)據(jù)送到A口,進(jìn)行下一個(gè)數(shù)據(jù)的輸出。
P0INT0
PAPD0-7PC1PC2PC0D7-0
ASTBABFMCS-518155外設(shè)C口為ALT3模式,控制字:00011001BPC0:A口中斷AINTR標(biāo)志輸出,送單片機(jī);PC1:A口緩沖器滿ABF標(biāo)志輸出,送外設(shè)。PC2:A口選通輸入ASTB,AINTR31例:用8155控制打印機(jī)。8051P08155RESETP3.3/INT18AD0~AD7RDWRPA0PA1PA2PA3PA4PA5PA6PA7TPμp-TFBUSYSTBPC0VCCALEP2.7P2.0DB0DB1DB2DB3DB4DB5DB6DB7ALECEIO/MRDWRRESETGNDVCCVSS右圖是接口硬件連接圖。8155地址:P2.7=0,P2.0=1命令口地址:7FF0H;口A地址:7FF1H;口C地址:7FF3H;8155的初始化命令字:0FH(口A、口基本I/O輸出,口C輸出)。32例:用8155控制打印機(jī)。8051P08155RESETP3.3/INT18AD0~AD7RDWRPA0PA1PA2PA3PA4PA5PA6PA7TPμp-TFBUSYSTBPC0VCCALEP2.7P2.0DB0DB1DB2DB3DB4DB5DB6DB7ALECEIO/MRDWRRESETGNDVCCVSS工作過程:單片機(jī)向8155的口A寫命令;單片機(jī)向8155的口C依次寫00H、01H,在PC0上產(chǎn)生脈沖上升沿,通知打印機(jī)取走數(shù)據(jù);打印機(jī)取走數(shù)據(jù)后,通過BUSY引腳下降沿觸發(fā)單片機(jī)外部中斷;在單片機(jī)外部中斷程序中,將待打印數(shù)組連續(xù)輸出到8155的口A。下面是打印“北京SPRING1999”的程序,其中漢字“北京”在硬漢字庫中的標(biāo)準(zhǔn)機(jī)內(nèi)代碼為B1B1H和BEA9H,打印機(jī)與8051采用中斷方式聯(lián)絡(luò)。33#include<absacc.h>#include<reg51.h>#defineucharunsignedchar#defineCOM8155XBYTE[0x7ff0]/*命令口地址*/#definePA8155XBYTE[0x7ff1]/*口A地址*/#definePC8155XBYTE[0x7ff3]/*口C地址*/sbitBUSY=P3^3;ucharcodetab[17]={0xb1,0xb1,0xbe,0xa9,0x20,0x53,0x50,0x52,0x49,0x4e,0x47,0x20,0x31,0x39,0x39,0x39,0x0a}/*北京SPTING1999*/uchart1=17;
voidprt(uchard){/*打印一字符函數(shù)*/PA8155=d;/*送打印字符代碼*/PC8155=0x00;PC8155=0x01;/*產(chǎn)生STB脈沖*/while(BUSY);//等待P3.3引腳上的電平由高變低}34voidmain(void){COM8155=0x0f;/*置命令字*/prt(0x1c);/*送入中文打印方式命令字高字節(jié)*/prt(0x26);/*送入中文打印方式命令字低字節(jié)*/EA=1;/*開CPU中斷*/EX1=1;/*開外部中斷1*/while(1){};}voidint1(void)interrupt2using1{/*打印中斷服務(wù)函數(shù)*/uchari;EA=0;for(i=0;i<t1;i++)/*打印一串字符*/prt(tab[i]);EA=1;EX1=0;/*關(guān)打印機(jī)中斷*/}問題:打印數(shù)組的每個(gè)元素時(shí)都觸發(fā)中斷程序執(zhí)行嗎?35RDALE8155CE7407+5VP2.7P2.6RDALEWRP0.0…P0.78051PB0PB1PB2PB3PB4PB5PB6PB7330Ω×8D0…D7IO/MWRPA5PA4PA3PA2PA1PA0abcdefgdp740613.1.2七段數(shù)碼顯示與8051的接口8155地址:P2.7=1,P2.6=1命令口地址:FFF0H;口A地址:FFF1H;口C地址:FFF3H;B口用來輸出段選碼;A口用來輸出位選碼;8155與6位LED顯示器接口。36例18155控制的動(dòng)態(tài)LED顯示。RDALE8155CE7407+5VP2.7P2.6RDALEWRP0.0…P0.78051PB0PB1PB2PB3PB4PB5PB6PB7330Ω×8D0…D7IO/MWRPA5PA4PA3PA2PA1PA0abcdefgdp74068155與6位LED顯示器接口。初始化命令字:07HA口選通I/O;B口基本I/O輸出;C口:初始化命令字:0FH、03H更合適37#include<absacc.h>#include<reg51.h>#defineucharunsingnedchar#defineCOM8155XBYTE[0xfff0]#definePA8155XBYTE[0xfff1]#definePB8155XBYTE[0xfff2]#definePC8155XBYTE[0xfff3]ucharidatadis_buf[6]={2,4,6,8,10,12};ucharcodetable[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x7f,0x6f,0x77,0x70,0x39,0x5e,0x79,0x71,0x40,0x00};voiddl_ms(uchard);voiddisplay(ucharidata*p){ucharsel,i;COM8155=0x07;/*送命令字*/sel=0x01;/*選最右邊的LED*/for(i=0;i<6;i++){PB8155=table[*p];/*送段碼*/PA8155=sel;/*送位選碼*/dl_ms(1);p--;/*緩沖區(qū)下移1位*/sel=sel<<1;/*左移1位*/}}voidmain(void){display(dis_buf+5);}389.4I2C總線擴(kuò)展存儲(chǔ)器目前單片機(jī)應(yīng)用系統(tǒng)中使用的串行擴(kuò)展方式主要有:Philips公司的I2C(InterIC)總線;Freescale公司的SPI(serialPeripheralInterface)串行外設(shè)接口;Dallas公司的單總線(1-wire);NS公司的串行接口Microwire/Plus。由于IC卡多采用I2C總線接口的存儲(chǔ)器卡,下面只介紹采用I2C總線的存儲(chǔ)器擴(kuò)展。9.4.1I2C總線簡介(自己看)399.4.2I2C總線通信規(guī)約
I2C總線是一種用于IC器件之間連接的二線制串行通信總線,它通過兩根線(SDA,串行數(shù)據(jù)線;SCL,串行時(shí)鐘線)在連到總線上的器件之間傳送信息,根據(jù)地址識(shí)別每個(gè)器件,可方便地構(gòu)成多機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。SDASCLAT24C04A1A2RXDTXD總線主機(jī)SDASCLAT24C04A1A2SDASCL其他總線從機(jī)+5V+5VR×2
主要特點(diǎn):*二線傳輸,I2C總線上所有主器件、外圍器件等都連到同名端的SDA和SCL線上。40SDASCLAT24C04A1A2RXDTXD總線主機(jī)SDASCLAT24C04A1A2SDASCL其他總線從機(jī)+5V+5VR×2
*系統(tǒng)中有多個(gè)主器件時(shí),任何一個(gè)器件在I2C總線上工作時(shí)都可以成為主控制器。
*I2C總線傳輸時(shí),采用狀態(tài)碼管理方法,數(shù)據(jù)傳輸時(shí)任何一種狀態(tài)都會(huì)產(chǎn)生響應(yīng)的狀態(tài)碼,并進(jìn)行自動(dòng)處理。
*所有外圍器件都可以采用器件地址和引腳地址的硬件編址方法避免了片選線的連線方法。(見上圖)
*所有帶I2C的器件都具有應(yīng)答功能,當(dāng)片內(nèi)多個(gè)單元地址時(shí),數(shù)據(jù)讀寫都有自動(dòng)加1功能。41
按照二線制串行通信總線傳輸規(guī)定:將數(shù)據(jù)傳輸?shù)娇偩€上的器件稱為發(fā)送器,而從總線上接收數(shù)據(jù)的器件稱為接收器??梢钥刂茢?shù)據(jù)傳送的器件稱為主機(jī)(通常為單片機(jī))。主機(jī)作用;需要啟動(dòng)數(shù)據(jù)的發(fā)送和接收,并提供傳送時(shí)鐘。該系統(tǒng)上的其他芯片即為從器件或從機(jī)。
數(shù)據(jù)傳輸方式:若A機(jī)(主器件)→B機(jī)(從器件)。
①首先A機(jī)尋址B機(jī),②然后A機(jī)(主發(fā)送)把數(shù)據(jù)送至B機(jī)(從接收),③最后由A機(jī)終止傳送。若A機(jī)(主器件)←B機(jī)(從器件)。①首先A機(jī)尋址B機(jī),②然后A機(jī)(主接收)接收B機(jī)(從發(fā)送)的數(shù)據(jù),③最后由A機(jī)終止傳送。介紹一些概念和規(guī)定42*SDA和SCL都是雙向I/O線,通過上拉電阻接到正電源。
*當(dāng)總線空閑時(shí),兩根線都是高電平。
*數(shù)據(jù)傳輸速率為100kb/s。
*連到總線上的數(shù)量僅受總線電容400pF的限制。送到SDA線上的每個(gè)字節(jié)必須為8位,每次傳送的字節(jié)數(shù)不限,每個(gè)字節(jié)后面必須跟1個(gè)響應(yīng)位,數(shù)據(jù)傳送時(shí),先傳最高位。通常被尋址的接收器件必須在收到每個(gè)字節(jié)后作出響應(yīng)。I2C總線發(fā)信號(hào)的第一個(gè)字節(jié)用來確定主器件所選擇的(從器件。該字節(jié)的高7位組成器件的地址,最低位確定信息的方向。439.4.3串行I2C總線E2PROM24XXAT24CXX系列E2PROM是典型的I2C總線接口器件。特點(diǎn)是:①單電源供電;②采用低功耗COMS技術(shù);③工作電壓范圍寬(1.8~5.5V);④自定時(shí)寫周期(包括自動(dòng)擦除)、頁面寫周期的典型值為2ms;⑤具有硬件保護(hù)。AT24CXX系列的器件內(nèi)部結(jié)構(gòu)和引腳如圖9-11所示。I/O控制邏輯存儲(chǔ)器控制邏輯E2PROM存儲(chǔ)陣列頁緩沖器電壓提升Y譯碼R/W控制X譯碼VCCSDASCLWPVSSA0A1A2AT24C××12348765VCCA0A1A2GNDWPSCLSDA44讀/寫控制位片選或塊選I2C從器件地址R/WA2A1A010101.控制字節(jié)要求開始位以后,主器件送出一個(gè)8位控制字節(jié),以選擇從器件擴(kuò)展總線傳送的方向??刂谱止?jié)的結(jié)構(gòu)如下所示:位7~位4為從器件地址位,確定器件類型。此4位碼由Plilips公司的I2C規(guī)約所決定。1010嗎即從器件為串行E2PROM。串行E2PROM將一直處于等待狀態(tài),直接1010碼發(fā)送到總線上為止。當(dāng)其他非串行E2PROM從器件將不會(huì)響應(yīng)。45讀/寫控制位片選或塊選I2C從器件地址R/WA2A1A01010位3~位1為1~8片的片選或存儲(chǔ)器內(nèi)的塊地址選擇位。標(biāo)準(zhǔn)的I2C規(guī)約允許選擇16KB的存儲(chǔ)器。通過對(duì)幾片或一個(gè)器件內(nèi)的幾個(gè)塊的存取,可完成對(duì)16KB存儲(chǔ)器的選擇。位0為讀/寫操作控制碼。如果此位為1,則下一個(gè)字節(jié)進(jìn)行讀操作(R);若此位為0,則下一個(gè)字節(jié)進(jìn)行寫操作(W)。當(dāng)串行E2PROM產(chǎn)生控制字節(jié)并檢測(cè)到應(yīng)答信號(hào)以后,主器件總線上將傳送相應(yīng)的字地址或數(shù)據(jù)信息。462.起始信號(hào)、停止信號(hào)和應(yīng)答信號(hào)起始信號(hào):起始信號(hào)應(yīng)該在讀/寫操作命令之前發(fā)出。停止信號(hào):表示一種操作的結(jié)束。數(shù)據(jù)和地址都是以8位的串行信號(hào)傳送。在接收一個(gè)字節(jié)后,接收器件必須產(chǎn)生一個(gè)應(yīng)答信號(hào)ACK,主器件必須產(chǎn)生一個(gè)與此應(yīng)答信號(hào)相應(yīng)的額外時(shí)鐘脈沖。SDASCL≥4.7μs≥4.7μs(a)起始信號(hào)SSDASCL≥4.0μs≥4.0μs(b)停止信號(hào)P47SCLSDA≥4.0μs(c)發(fā)送ACKSCLSDA≥4.0μs(d)發(fā)送ACK3.寫操作AT24CXX系列E2PROM的寫操作有字節(jié)寫和頁面寫2種。(1)字節(jié)寫SDA線啟動(dòng)芯片地址寫字地址數(shù)據(jù)停止R/WACKMSBLSBACKACK48SDA線啟動(dòng)芯片地址寫字地址數(shù)據(jù)n停止R/WACKMSBLSBACKACK數(shù)據(jù)n+1數(shù)據(jù)n+xACKACK(2)頁面寫4.讀操作當(dāng)從器件地址的R/W位被置為1時(shí),啟動(dòng)讀操作。AT24CXX系列的讀操作有3種類型:讀當(dāng)前地址內(nèi)容、讀指定地址內(nèi)容、讀順序地址內(nèi)容。(1)讀當(dāng)前地址內(nèi)容SDA線啟動(dòng)芯片地址讀數(shù)據(jù)停止R/WACKNOACKS49SDA線啟動(dòng)芯片地址寫字地址nACKACK啟動(dòng)芯片地址讀數(shù)據(jù)n停止R/WACKNOACKS芯片地址ACKACK讀數(shù)據(jù)n停止R/WACKSDA線ACK數(shù)據(jù)n+1數(shù)據(jù)n+x數(shù)據(jù)(2)讀指定地址內(nèi)容(3)讀順序地址內(nèi)容505.1k×28051P1.6P1.7+5VAT24C02A0A1A2WPSCLSDAVCCVCC9.4.4I2C總線的編程的實(shí)現(xiàn)假設(shè)用P1.7和P1.6分別作為SDA和SCL信號(hào),如圖9-18所示。單片機(jī)所用晶體振蕩器的頻率為6MHz。機(jī)器周期2μs,可分別寫出產(chǎn)生時(shí)鐘SCL和SDA的起始和停止信號(hào)程序。用軟件模擬I2C總線產(chǎn)生起始信號(hào)、停止信號(hào)和進(jìn)行數(shù)據(jù)傳送的程序。51#include<reg51.h>#include<intrins.h>#defineucharunsingnedchar#defineuintusingnedintsbitSDA=P1^7;SbitSCL=P1^6;voidstart_iic(){/*產(chǎn)生I2C總線起始信號(hào)*/SDA=1;/*發(fā)送起始條件數(shù)據(jù)信號(hào)*/SCL=1;_nop_();/*起始信號(hào)建立時(shí)間大于4.7μs*/_nop_();SDA=0;/*發(fā)送起始信號(hào)*/_nop_();_nop_();SCL=0;/*箝位*/}52voidstop_iic(){/*產(chǎn)生I2C總線停止信號(hào)*/SDA=0;/*發(fā)送停止條件數(shù)據(jù)信號(hào)*/SCL=1;_nop_();/*停止信號(hào)建立時(shí)間大于4μs*/_nop_();SDA=1;/*發(fā)送停止信號(hào)*/_nop_();_nop_();SCL=0;}voidack_iic(){/*產(chǎn)生I2C總線應(yīng)答信號(hào)*/SDA=0;SCL=1;_nop_();_nop_();SDA=0;SCL=1;}53voidnack_iic(){/*產(chǎn)生I2C總線非應(yīng)答信號(hào)*/SDA=1;SCL=1;_nop_();_nop_();SDA=0;SCL=0;}54write_byte(ucharc){/*向虛擬I2C總線上發(fā)送1字節(jié)數(shù)據(jù)*/uchari;for(i=0;i<8;i++){if(c&0x80)SDA=1;/*判斷發(fā)送位*/elesSDA=0;SCL=1;/*時(shí)鐘線為高,通知從器件開始接收數(shù)據(jù)*/_nop_();_nop_();SCL=0;c=c<<1;/*準(zhǔn)備下一位*/}SDA=1;SCL=1;/*釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答信號(hào)*/_nop_();_nop_();if(SDA==1)F0=0;/*判斷是否收到應(yīng)答信號(hào)*/elseF0=1;SCL=0;}55ucharread_byte(){/*從虛擬I2C總線上讀取1字節(jié)數(shù)據(jù)*/uchari;ucharr=0;SDA=1;/*置數(shù)據(jù)線為輸入方式*/for(i=0;i<8;i++){r=r<<1/*左移補(bǔ)0*/SCL=1;/*置時(shí)鐘線為高,數(shù)據(jù)有效*/_nop_();_nop_();if(SDA==1)r++;/*當(dāng)數(shù)據(jù)線為高時(shí),加1*/SCL=0;}return;}56/*向虛擬I2C總線上發(fā)送n字節(jié)數(shù)據(jù)*/bitwrite_nbyte(ucharslave,ucharaddr,uchar*s,ucharnumb){uchari;start_iic();/*發(fā)送起始信號(hào)*/write_byte(slave);/*發(fā)送從器件地址*/if(F0==0)return0;write_byte(addr);/*發(fā)送器件內(nèi)部地址*/if(F0==0)return0;for(i=0;i<numb;i++){write_byte(*s);/*發(fā)送數(shù)據(jù)*/if(F0==0)return0;s++;}stop_iic();/*發(fā)送停止信號(hào)*/return(1);}57/*從虛擬I2C總線上讀取n字節(jié)數(shù)據(jù)*/bitread_nbyte(ucharslave,ucharaddr,uchar*s,ucharnumb){uchari;start_iic();/*發(fā)送起始信號(hào)*/write_byte(slave);/*發(fā)送從器件地址*/if(F0==0)return0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級(jí)下冊(cè)口算題大全
- 委托辦理貸款協(xié)議
- 實(shí)驗(yàn)小學(xué)數(shù)學(xué)二年級(jí)下冊(cè)口算競賽題
- 2025年槳扇發(fā)動(dòng)機(jī)合作協(xié)議書
- 楊凌職業(yè)技術(shù)學(xué)院《觀賞樹木學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 大慶師范學(xué)院《經(jīng)濟(jì)學(xué)綜合博弈實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 25 帶上她的眼睛 +公開課一等獎(jiǎng)創(chuàng)新教案+同步練習(xí)(含答案)
- 河北科技大學(xué)《機(jī)器視覺》2023-2024學(xué)年第二學(xué)期期末試卷
- 企業(yè)可持續(xù)發(fā)展目標(biāo)與指標(biāo)體系
- 渤海理工職業(yè)學(xué)院《計(jì)算思維方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 基于數(shù)據(jù)驅(qū)動(dòng)的鋰離子電池剩余使用壽命預(yù)測(cè)方法研究
- 《內(nèi)臟疾病康復(fù)》課件
- 串通招投標(biāo)法律問題研究
- 高原鐵路建設(shè)衛(wèi)生保障
- 家具廠各崗位責(zé)任制匯編
- 顳下頜關(guān)節(jié)盤復(fù)位固定術(shù)后護(hù)理查房
- 硝苯地平控釋片
- 部編版語文六年級(jí)下冊(cè)全套單元基礎(chǔ)常考測(cè)試卷含答案
- 提高檢驗(yàn)標(biāo)本合格率品管圈PDCA成果匯報(bào)
- 2023年保險(xiǎn)養(yǎng)老地產(chǎn)行業(yè)分析報(bào)告
- 世界古代史-對(duì)接選擇性必修(真題再現(xiàn)) 高考?xì)v史一輪復(fù)習(xí)
評(píng)論
0/150
提交評(píng)論