版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目5存儲(chǔ)系統(tǒng)的設(shè)計(jì)
任務(wù)一并行存儲(chǔ)器的擴(kuò)展任務(wù)二串行E2PROM的擴(kuò)展
習(xí)題與思考題任務(wù)一并行存儲(chǔ)器的擴(kuò)展
任務(wù)要求
【任務(wù)內(nèi)容】
擴(kuò)展外部程序存儲(chǔ)器和外部數(shù)據(jù)存儲(chǔ)器,利用外部程序存儲(chǔ)器保存程序。
編寫程序,對(duì)外部數(shù)據(jù)存儲(chǔ)器的某些單元寫1、2、3、4、5、6、7、8、9、0的字形碼,然后將這些單元數(shù)據(jù)讀出,在數(shù)碼管上顯示驗(yàn)證。
【知識(shí)要求】
掌握外部存儲(chǔ)器的讀寫指令;了解三總線的基本知識(shí);掌握單片機(jī)并行程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器的擴(kuò)展方法。
相關(guān)知識(shí)
知識(shí)1三總線接口及其擴(kuò)展性能
單片機(jī)是通過片外引腳進(jìn)行系統(tǒng)擴(kuò)展的。目前的單片機(jī)都是三總線結(jié)構(gòu),即地址總線(AB)、數(shù)據(jù)總線(DB)和控制總線(CB),如圖5-1所示。圖5-1AT89C51單片機(jī)的三總線結(jié)構(gòu)形式
1.地址總線(AB)
地址總線用來傳送存儲(chǔ)單元或外部設(shè)備的地址。AT89C51由P0口提供低8位地址線。由于P0口同時(shí)又作為數(shù)據(jù)口,地址數(shù)據(jù)是分時(shí)控制輸出,所以低8位地址必須用鎖存器鎖存。也就是在P0口加一個(gè)鎖存器,鎖存器的輸出就是低8位地址。鎖存器的鎖存控制信號(hào)由單片機(jī)的ALE控制信號(hào)提供,在ALE下降沿將低8位地址鎖存。地址總線高8位由P2口直接輸出。P0、P2口在作為地址總線使用時(shí)就不能再用作一般的I/O口,這在系統(tǒng)擴(kuò)展時(shí)一定要注意。地址總線的寬度是16位,其尋址范圍是216B=
64KB,地址范圍是0000H~FFFFH。
2.?dāng)?shù)據(jù)總線(DB)
數(shù)據(jù)總線用來傳送數(shù)據(jù)和指令碼,AT89C51由P0口提供數(shù)據(jù)線,其寬度為8位,該口為三態(tài)雙向口。單片機(jī)與外部交換的數(shù)據(jù)、指令、信息幾乎都由P0口傳送。
3.控制總線(CB)
控制總線用來傳送各種控制信息。AT89C51用于系統(tǒng)擴(kuò)展的控制總線有、、、ALE、。
、信號(hào)用于擴(kuò)展片外數(shù)據(jù)存儲(chǔ)器的讀寫控制。當(dāng)使用MOVX指令對(duì)片外數(shù)據(jù)存儲(chǔ)器進(jìn)行讀/寫時(shí),自動(dòng)產(chǎn)生、信號(hào)。
用于擴(kuò)展片外程序存儲(chǔ)器的讀控制。讀取片外程序存儲(chǔ)器時(shí)單片機(jī)不產(chǎn)生信號(hào)。
ALE的下降沿使P0口輸出的地址鎖存。
用于選擇片內(nèi)或片外程序存儲(chǔ)器。=0時(shí),不論是否有片內(nèi)程序存儲(chǔ)器,只訪問外部程序存儲(chǔ)器;=1時(shí),系統(tǒng)從內(nèi)部程序存儲(chǔ)器開始執(zhí)行程序,當(dāng)執(zhí)行程序超過片內(nèi)程序存儲(chǔ)器的地址范圍時(shí),自動(dòng)訪問外部程序存
儲(chǔ)器。知識(shí)2EPROM程序存儲(chǔ)器概述
AT89C51內(nèi)部本身具有4KB的Flash,當(dāng)程序量超過4KB時(shí),一般可以改用內(nèi)部Flash容量大的CPU,如AT89C52(8KFlash)、AT89C55(20KFlash)等,但有時(shí)也需要對(duì)程序存儲(chǔ)器進(jìn)行擴(kuò)展。AT89C51的最大外部擴(kuò)展范圍是64KB,一般采用非易失性存儲(chǔ)器,如EPROM等。圖5-2列出了由27C16~27C512的芯片引腳配置圖。
芯片引腳功能簡(jiǎn)述如下:
A0~A15:地址線。
O0~O7:數(shù)據(jù)線。
:芯片片選端。低電平時(shí)允許芯片工作,高電平時(shí)禁止工作。
/VPP:輸出使能信號(hào)/編程電壓。正常操作時(shí),低電平允許輸出,通常與單片機(jī)的讀控制信號(hào)相連。在編程方式下,此引腳接編程電壓。
:編程脈沖輸入端。圖5-2EPROM芯片引腳配置圖表5-1列出了27C16的工作方式選擇,其余的芯片類似。知識(shí)3單片EPROM程序存儲(chǔ)器的擴(kuò)充
根據(jù)知識(shí)1中介紹的三總線及其擴(kuò)展性能,結(jié)合知識(shí)2中的芯片知識(shí),采用一片27C16來擴(kuò)充程序存儲(chǔ)器的電路連接如圖5-3所示。
擴(kuò)充程序存儲(chǔ)器主要注意以下三個(gè)方面:
(1)地址總線的連接。27C16有2KB的存儲(chǔ)空間,11根地址線,而AT89C51有64KB的尋址空間,16根地址線。在低位地址線一一對(duì)應(yīng)連接完后(低8位地址與74LS373的
Q0~Q7相連),AT89C51剩余的高位地址線可以空著,如圖5-3所示。
(2)數(shù)據(jù)總線的連接。27C16與AT89C51的數(shù)據(jù)總線都是8位,所以將D0~D7與AT89C51的P0.0~P0.7依次對(duì)應(yīng)連接即可。
(3)存儲(chǔ)器片選端的連接。存儲(chǔ)器片選端的連接是非常重要的,如果單片機(jī)擴(kuò)展了多片存儲(chǔ)器,它的連接往往是單片機(jī)剩余的高位地址線,這樣就決定了各個(gè)存儲(chǔ)器在系統(tǒng)中的地址范圍。由于這里只是一片存儲(chǔ)器的擴(kuò)展,所以片選端直接接地即可。
此外,27C16的端與AT89C51的相連。圖5-3一片27C16程序存儲(chǔ)器擴(kuò)展連接圖對(duì)于AT89C51,因?yàn)閿?shù)據(jù)線和低8位地址線都由P0口提供,而數(shù)據(jù)線和地址線是分時(shí)使用的,所以如圖5-3所示,將AT89C51的P0口與鎖存器74LS373的D1~D8相連,
端與74LS373的CLK端相連,利用的下降沿可將低8位地址鎖存,實(shí)現(xiàn)地址和數(shù)據(jù)的分時(shí)復(fù)用。知識(shí)4并行RAM的擴(kuò)展
在AT89系列產(chǎn)品中,片內(nèi)數(shù)據(jù)存儲(chǔ)器的容量一般為128~256B。當(dāng)片內(nèi)RAM不夠用時(shí),就需要擴(kuò)展外部RAM,因?yàn)榈刂肪€有16根,所以最大可擴(kuò)展64KB。
單片機(jī)和數(shù)據(jù)存儲(chǔ)器的連接方法與程序存儲(chǔ)器的連接方法大致相同,主要區(qū)別在控制信號(hào)上。地址線、數(shù)據(jù)線均與程序存儲(chǔ)器的連接方法一致。因?yàn)閿?shù)據(jù)存儲(chǔ)器既要讀又要寫,所以必須有控制讀寫的信號(hào)線。而一般作為數(shù)據(jù)存儲(chǔ)器的RAM,都有讀寫信號(hào)線。應(yīng)用時(shí)只需將存儲(chǔ)器的讀信號(hào)線、寫信號(hào)線與單片機(jī)相應(yīng)的、引腳相連即可。如果只擴(kuò)展一片,數(shù)據(jù)存儲(chǔ)器的片選端可以直接接地;如果擴(kuò)展多片,每片RAM的連接跟程序存儲(chǔ)器的擴(kuò)展方法中介紹的連接一樣。圖5-4所示是單片SRAM6116(2K×8位)的擴(kuò)展連接圖。當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),只能使用MOVX指令,將外部數(shù)據(jù)存儲(chǔ)器的內(nèi)容讀入片內(nèi)累加器A時(shí),使用指令“MOVXA,@DPTR”(或“MOVXA,@Ri”),單片機(jī)產(chǎn)生讀信號(hào);而將片內(nèi)累加器A的內(nèi)客送入片外數(shù)據(jù)存儲(chǔ)器時(shí),使用指令“MOVX@DPTR,A”(或“MOVX@Ri,A”),單片機(jī)產(chǎn)生寫信號(hào)。圖5-4單片SRAM6116的擴(kuò)展連接圖當(dāng)片內(nèi)ROM和片內(nèi)RAM均不夠使用時(shí),也可以同時(shí)擴(kuò)展片外ROM和RAM。圖5-5所示為同時(shí)擴(kuò)展64KBEPROM和32KBRAM的電路原理圖。
圖5-5中,62256的片選端接AT89C51的P2.7,只有當(dāng)P2.7輸出為0時(shí),才能選通62256,因此它的地址范圍是0000H~7FFFH。27512的片選端接地,為常選通,地址為0000H~FFFFH。圖5-5片外擴(kuò)展64KBEPROM和32KBRAM系統(tǒng)知識(shí)5外部RAM讀寫指令
外部RAM傳送指令的功能是將源操作數(shù)的內(nèi)容傳送到目的操作數(shù),而源操作數(shù)內(nèi)容不改變。在訪問外部RAM時(shí),目的操作數(shù)和源操作數(shù)總有一個(gè)在累加器A中,另一個(gè)在片外存儲(chǔ)器中,而片外存儲(chǔ)器尋址不能使用直接尋址,只能采用寄存器間接尋址。用于片外寄存器間接尋址的寄存器只有DPTR、R0和R1。DPTR用于片外16位地址尋址,Ri用于片外16位地址的低8位地址尋址。
1.MOVXA,@Ri
[例5.1]MOVXA,@R1
若指令執(zhí)行前:
(ACC)=00H,(R1)=60H,外部數(shù)據(jù)存儲(chǔ)器60H內(nèi)容為3AH
則指令執(zhí)行后:
(R1)=60H,外部數(shù)據(jù)存儲(chǔ)器60H內(nèi)容為3AH,而ACC的內(nèi)容變?yōu)?AH
2.MOVXA,@DPTR
[例5.2]MOVXA,@DPTR
若指令執(zhí)行前:
(ACC)=00H,(DPTR)=1234H,外部數(shù)據(jù)存儲(chǔ)器1234H的內(nèi)容為3AH
則指令執(zhí)行后:
DPTR和外部數(shù)據(jù)存儲(chǔ)器1234H的內(nèi)容不變,而ACC的內(nèi)容變?yōu)?AH
3.MOVX@Ri,A
[例5.3]MOVX@R1,A
若指令執(zhí)行前:
(ACC)=00H,(R1)=34H,外部數(shù)據(jù)存儲(chǔ)器34H的內(nèi)容為3AH
則指令執(zhí)行后:
(ACC)=00H,(R1)=34H,而外部數(shù)據(jù)存儲(chǔ)器34H的內(nèi)容變?yōu)?0H
4.MOVX@DPTR,A,
[例5.4]MOVX@DPTR,A
若指令執(zhí)行前:
(ACC)=00H,(DPTR)=1234H,外部數(shù)據(jù)存儲(chǔ)器1234H的內(nèi)容為3AH
則指令執(zhí)行后:
(ACC)=00H,(DPTR)=1234H,而外部數(shù)據(jù)存儲(chǔ)器1234H的內(nèi)容變?yōu)?0H知識(shí)6外部RAM數(shù)據(jù)的常見處理
1.工作單元清零
初始化將地址指針指向工作區(qū)域首址。循環(huán)體部分將指針指向的單元清零,并修改指針指向,將循環(huán)體重復(fù)執(zhí)行50次即可。其程序如下: ORG 0050H
CLEAR:CLR A
MOV DPTR,#8000H ;工作單元首址送指針
MOV R2,#50 ;置循環(huán)次數(shù)
CLEAR1: MOVX @DPTR,A
INC DPTR ;修改指針
DJNZ R2,CLEAR1 ;控制循環(huán)
RET
2.?dāng)?shù)據(jù)處理
[例5.5]片外RAM2000H、2001H單元分別存放兩個(gè)數(shù),判斷這兩個(gè)數(shù)是否相等,如果相等,則位地址7FH置1,否則清零。
若判斷兩個(gè)數(shù)相等,則使用比較轉(zhuǎn)移指令就很容易實(shí)現(xiàn)該題中的要求,程序流程圖如圖5-6所示。在下面的程序清單中,請(qǐng)讀者考慮一下無條件轉(zhuǎn)移指令A(yù)JMP的作用。圖5-6例5.5程序流程圖程序如下:
ORG 0100H
MOV DPTR,#2000H;地址指針指向片外2000H單元
MOVXA,@DPTR ;(2000H)→A
MOV 30H,A ;A→30H
INC DPTR ;地址指針指向2001H單元
MOVXA,@DPTR ;(2001H)→A
CJNE A,30H,NE ;若兩個(gè)數(shù)不相等,則轉(zhuǎn)NE
SETB 7FH ;若兩個(gè)數(shù)相等,則7FH單元置1
AJMP OVER ;轉(zhuǎn)OVER
NE: CLR 7FH ;7FH單元清零
OVER:RET
[例5.6]在首地址為片外RAM2000H的數(shù)據(jù)緩沖區(qū)中,連續(xù)存放100個(gè)非零的無符號(hào)單字節(jié)數(shù),求出其中最大的
偶數(shù)。
用位操作指令JB對(duì)操作數(shù)最末位進(jìn)行判斷,若為1則是奇數(shù),為0則是偶數(shù)。用SUB減法指令,通過標(biāo)志位CY可判斷兩個(gè)操作數(shù)的大小。程序流程圖如圖5-7所示。圖5-7例5.6程序流圖程序如下:
ORG 0050H
MAX EQU30H
MOV MAX,#00H;00→MAX
MOV R7,#100;存放循環(huán)次數(shù)
MOV DPTR,#2000H
;地址指針DPTR指向緩沖區(qū)首地址
L1:MOVXA,@DPTR;從緩沖區(qū)中取數(shù)送入A中
JB ACC.0,ODD;是奇數(shù)則轉(zhuǎn)至ODD MOV R1,A;是偶數(shù)則與MAX比較
SUBB A,MAX
JC ODD ;比MAX小則轉(zhuǎn)至ODD
MOV MAX,R1 ;比MAX大則送入MAX單元
ODD:INC DPTR ;改變地址取下一個(gè)數(shù)
DJNZ R7,L1 ;控制循環(huán)
RET
任務(wù)實(shí)施
【設(shè)備與器件清單】
1.設(shè)備清單:PC機(jī)、單片機(jī)開發(fā)系統(tǒng)。
2.器件清單:
插座 DIP40 1
單片機(jī) AT89C51 1
晶體振蕩器 6MHz或12MHz 1
瓷片電容 30pF 2
電解電容 22μF 1
EPROM 27C256 1
RAM 62256 1
數(shù)碼管 1
電阻 若干
【跟我做】
1.準(zhǔn)備器件,設(shè)計(jì)硬件電路圖。
在單片機(jī)最小系統(tǒng)的基礎(chǔ)上外部擴(kuò)展EPROM和RAM的參考電路如圖5-8所示。圖5-8片外擴(kuò)展64KBEPROM和32KBRAM系統(tǒng)
2.軟件設(shè)計(jì)
對(duì)外部數(shù)據(jù)存儲(chǔ)器的讀寫,采用“MOVXA,@DPTR”和“MOVX@DPTR,A”。
【課后任務(wù)】
1.編寫實(shí)訓(xùn)報(bào)告,總結(jié)實(shí)訓(xùn)過程中遇到的問題、解決方法和收獲。
2.完成數(shù)據(jù)采集存儲(chǔ)輸出系統(tǒng)的設(shè)計(jì),能夠采集0~+5V范圍內(nèi)的直流電壓,并將采集到的數(shù)據(jù)保存在外部數(shù)據(jù)存儲(chǔ)器中,按下按鍵后,能將該電壓以同等幅度輸出。
任務(wù)擴(kuò)展
知識(shí)7多片EPROM程序存儲(chǔ)器的擴(kuò)展
1.線選法
由于27C16是2KB的存儲(chǔ)器,所以它的地址線是A0~A10,共11根,與16根地址線的AT89C51相連,還剩5根高位地址線。這5根高位地址線可以分別用來連接27C16的片選端,這樣最多可接5片27C16,每片都有自己的尋址范圍且地址不會(huì)重疊。如圖5-9所示就是采用線選法擴(kuò)展3片27C16存儲(chǔ)器的連接電路圖。圖5-9線選法擴(kuò)展3片27C16程序存儲(chǔ)器的連接電路圖
2.地址譯碼法
如果采用線選法擴(kuò)展存儲(chǔ)器,可用的高位地址線有限,這就限制了可以擴(kuò)展的芯片個(gè)數(shù)。用少量的高位地址線擴(kuò)展多片存儲(chǔ)器時(shí),常常采用地址譯碼法。地址譯碼法只需在線選法的基礎(chǔ)上加譯碼器就可以了。
譯碼器芯片74LS138是3位選擇輸入線,8位譯碼輸出線,所以最多能接8個(gè)芯片的片選端。圖5-10所示是該芯片的引腳圖,表5-2所示是該芯片的真值表。圖5-1074LS138引腳圖
采用譯碼器進(jìn)行程序存儲(chǔ)器擴(kuò)展的具體電路圖如圖
5-11所示。圖5-11譯碼法存儲(chǔ)器的連接圖在圖5-11中,27C16(1)的地址范圍是0000H~07FFH;27C16(2)的地址范圍是0800H~0FFFH;27C16(3)的地址范圍是1000H~17FFH。從地址分配可以看出3片27C16的地址是連續(xù)的,沒有浪費(fèi)地址空間,可擴(kuò)展的芯片較多。知識(shí)8并行E2PROM的擴(kuò)展方法
1.并行E2PROM28C16的特點(diǎn)
28C16是采用CMOS工藝制成的2K×8位電可擦除的可編程只讀存儲(chǔ)器。其讀寫不需要外加任何元器件;讀訪問時(shí)間可為150~250μs,在寫入之前自動(dòng)擦除;一個(gè)字節(jié)的擦除和寫訪問時(shí)間為200μs~1ms;工作電流為30mA,備用狀態(tài)時(shí)只有100μA,電源電壓為單一的+5V;三態(tài)輸出,與TTL電平兼容。其引腳圖如圖5-12所示。圖5-1228C16引腳圖
2.引腳說明
(1)?A0~A10:地址線。
(2)?D0~D7:數(shù)據(jù)線。
(3)?:片選線(低電平有效),=0,本芯片被選中工作,否則不被選中。
(4)?:寫允許(低電平有效)。
(5)?:輸出允許(低電平有效)。
(6)?VCC:+5V電源。
(7)?GND:接地端。
3.工作方式
28C16工作方式選擇如表5-3所示。
4.28C16的擴(kuò)展
在多片E2PROM的擴(kuò)展中,片選端的接法同樣有兩種,分別是線選法和地址譯碼法。圖5-13所示為地址譯碼法擴(kuò)展3片28C16的連接電路圖。圖5-13地址譯碼法擴(kuò)展3片28C16連接電路圖知識(shí)9利用三總線接口擴(kuò)展I/O口
AT89C51單片機(jī)共有4個(gè)8位并行I/O口,但有時(shí)這些I/O口不能完全提供給用戶。
下面介紹利用三總線接口進(jìn)行簡(jiǎn)單I/O口擴(kuò)展的原理和方法。只要根據(jù)“輸入三態(tài),輸出鎖存”的原則,選擇74系列的TTL電路或MOS電路就能組成簡(jiǎn)單的擴(kuò)展電路,如74LS244、74LS273、74LS373、74LS377等芯片都能組成輸入、輸出接口。對(duì)于AT89C51單片機(jī),外部I/O接口和外部RAM是統(tǒng)一編址的,也就是說它們共用64KB存儲(chǔ)空間。每個(gè)擴(kuò)展I/O接口相當(dāng)于一個(gè)擴(kuò)展的外部單元,因此,訪問外部接口就如同訪問外部RAM一樣,用的都是MOVX指令,MOVX指令產(chǎn)生的、信號(hào)可以對(duì)I/O口進(jìn)行讀寫。圖5-14給出了一個(gè)用8位三態(tài)緩沖器74LS244作為輸入口和八D鎖存器74LS273作為輸出口組成的簡(jiǎn)單I/O口擴(kuò)展電路。在圖5-14中,輸出電路控制采用P2.0和的組合信號(hào)。當(dāng)P2.0和都為0時(shí),或門輸出為0,P0口數(shù)據(jù)被鎖存到74LS273,其Q端控制發(fā)光二極管LED:當(dāng)某個(gè)Q端為0時(shí),與其相連的發(fā)光二極管被點(diǎn)亮。
輸入電路控制采用P2.0和的組合信號(hào),當(dāng)P2.0和都為0時(shí),或門輸出為0,選通74LS244,將外部信號(hào)傳到數(shù)據(jù)總線;當(dāng)某鍵被按下時(shí),與其相連的輸入線為0,無鍵按下時(shí)為全1。圖5-14簡(jiǎn)單I/O口擴(kuò)展電路按照?qǐng)D5-14,若讓某一個(gè)按鍵按下,對(duì)應(yīng)的發(fā)光二極管亮,程序如下:
LOOP:MOV DPTR,#0FEFFH;置I/O口地址
MOVXA,@DPTR ;產(chǎn)生讀入鍵值
MOVX@DPTR,A;產(chǎn)生輸出信號(hào)
AJMP LOOP ;循環(huán)
任務(wù)二串行E2PROM的擴(kuò)展
任務(wù)要求
【任務(wù)內(nèi)容】
向AT24C01A中寫入一個(gè)數(shù)據(jù),再讀出,如果正確,則點(diǎn)亮一只發(fā)光管。
【知識(shí)要求】
掌握串行E2PROM的擴(kuò)展設(shè)計(jì)。
相關(guān)知識(shí)
近年來隨著嵌入式應(yīng)用系統(tǒng)的迅速發(fā)展,為了適應(yīng)多種應(yīng)用場(chǎng)合,出現(xiàn)了許多基于I2C總線的串行器件,例如串行半導(dǎo)體存儲(chǔ)器。它們的特點(diǎn)有兩個(gè):一是體積小,硬件擴(kuò)展方便;二是價(jià)格低廉。串行器件已經(jīng)廣泛用于多種控制電路中,掌握這類器件的應(yīng)用方法是很重要的。下面以二線制I2CCMOS串行E2PROM24C01為例,講述串行外部數(shù)據(jù)存儲(chǔ)器的擴(kuò)展方法。知識(shí)1E2PROMAT24C01的一般特性
AT24C01是一種采用CMOS工藝制成的128×8位串行電可擦除的可編程只讀存儲(chǔ)器,自動(dòng)擦除時(shí)間不超過10ms,典型時(shí)間為5ms;具有字節(jié)寫入和頁寫入兩種寫入方式;擦除寫入周期壽命一般可達(dá)10萬次以上;采用單一的+5V電源,低功耗工作電流;三態(tài)輸出,與TTL電平兼容。
1.引腳圖及說明
AT24C01引腳圖如圖5-15所示。圖5-15AT24C01引腳圖
(1)?SCL:串行時(shí)鐘端,用于輸入和輸出數(shù)據(jù)的同步。
(2)?SDA:串行數(shù)據(jù)地址輸入或輸出端,串行雙向數(shù)據(jù)輸入、輸出端。
(3)?WP:寫保護(hù),硬件數(shù)據(jù)保護(hù)端,接地時(shí)可對(duì)整個(gè)存儲(chǔ)器進(jìn)行正常讀寫,接電源時(shí)具有寫保護(hù)功能。
(4)?A0、A1、A2:片選輸入。
(5)?VCC:電源端,接?+5V電源。
(6)?VSS:接地端。
2.芯片特性
1)功能描述
AT24C01支持I2C雙向二線制串行總線及其傳輸規(guī)則。在串行E2PROM系統(tǒng)中,必須有一片可以產(chǎn)生串行時(shí)鐘(SCL)的主器件,通常這個(gè)主器件就是單片機(jī),控制其總線訪問及產(chǎn)生“啟動(dòng)”和“停止”信號(hào)。對(duì)E2PROM進(jìn)行寫操作時(shí),單片機(jī)是發(fā)送器,串行E2PROM是接收器,而在讀操作時(shí)則相反。進(jìn)行哪一種操作方式則由單片機(jī)確定。
2)總線特性
I2C雙向二線制串行總線協(xié)議定義只有在總線處于“非忙”狀態(tài)時(shí),數(shù)據(jù)傳輸才能被初始化。在數(shù)據(jù)傳送期間,只要時(shí)鐘線為高電平,數(shù)據(jù)線都必須保持穩(wěn)定,數(shù)據(jù)才有效;否則,數(shù)據(jù)線上的任何變化都被當(dāng)作“啟動(dòng)”或“停止”信號(hào)。圖5-16所示為串行總線狀態(tài)示意圖。圖5-16AT24C01總線狀態(tài)圖
(1)?A段:總線非忙狀態(tài)。在此期間SDA、SCL都保持高電平。
(2)?B段:?jiǎn)?dòng)數(shù)據(jù)傳輸。當(dāng)SCL為高電平時(shí),SDA由高電平變?yōu)榈碗娖降南陆笛乇徽J(rèn)為是“啟動(dòng)”信號(hào),只有出現(xiàn)了“啟動(dòng)”信號(hào)后,其他命令才有效。
(3)?C段:停止數(shù)據(jù)傳輸。當(dāng)SCL為高電平時(shí),SDA低電平的上升沿被認(rèn)為是“停止”信號(hào)。隨著“停止”信號(hào)的出現(xiàn),所有外部操作都結(jié)束。
(4)?D段:數(shù)據(jù)有效。在出現(xiàn)“啟動(dòng)”信號(hào)以后,SCL為高電平且數(shù)據(jù)線穩(wěn)定,這時(shí)數(shù)據(jù)線的狀態(tài)表示要傳送數(shù)據(jù)。知識(shí)2E2PROMAT24C01的操作
1.芯片尋址
當(dāng)芯片接收到“啟動(dòng)”信號(hào)后,需要接收一個(gè)8位控制字,控制字的格式如圖5-17所示。
A2、A1、A0三位地址與引腳上的A2、A1、A0的接法(接VCC=1,接VSS=0)相比較,如果一致,則該芯片被選通。所以一個(gè)總線上最多可以掛8個(gè)AT24C01。圖5-17AT24C01控制字的格式
2.字節(jié)編程方式
在字節(jié)編程方式下,微處理器發(fā)出“啟動(dòng)”信號(hào)后,緊跟著將4位I2C總線器件特征編碼1010和3位芯片地址(A2A1A0)以及寫狀態(tài)的R/位(R/
=0)發(fā)送到總線上。被尋址的串行E2PROM發(fā)出應(yīng)答信號(hào)后,微處理器緊跟著發(fā)出一個(gè)字節(jié)的串行E2PROM存儲(chǔ)單元的地址。當(dāng)微處理器又接收到應(yīng)答信號(hào)后,再發(fā)出要寫入到串行E2PROM的一個(gè)字節(jié)數(shù)據(jù)。字節(jié)寫入的幀格式如圖5-18所示。圖5-18AT24C01字節(jié)寫入的幀格式
3.讀操作
在讀指定地址存儲(chǔ)單元數(shù)據(jù)的方式下,微處理器需先發(fā)送芯片地址和指定單元地址,在得到“應(yīng)答”信號(hào)后,再發(fā)送“啟動(dòng)”信號(hào),之后再發(fā)送芯片地址和R/=1的控制信號(hào),當(dāng)串行E2PROM發(fā)出應(yīng)答后,就串行輸出數(shù)據(jù)。當(dāng)一幀數(shù)據(jù)讀完后發(fā)送非應(yīng)答信號(hào)(高電平),緊接著發(fā)送“停止”信號(hào)。讀指定地址存儲(chǔ)單元數(shù)據(jù)的幀格式如圖5-19所示。圖5-19讀AT24C01指定地址存儲(chǔ)單元數(shù)據(jù)的幀格式知識(shí)3AT24C01與單片機(jī)的接口
因?yàn)锳T89C51不帶I2C總線,所以必須用I/O口來模擬I2C總線的工作時(shí)序。也就是將AT24C01的SDA、SCL直接接到I/O口的任意兩根線上,以便使單片機(jī)按I2C總線的時(shí)序通過這兩根線互傳數(shù)據(jù)。AT24C01的WP接地,既可以寫又可以讀。A0、A1、A2接地,芯片地址就是000。硬件接口如圖5-20所示。圖5-20AT89C51與AT24C01的硬件接口連接圖程序如下:
SDA BIT P1.0
SCL BIT P1.1
WROM: SETB SDA ;起始信號(hào)
SETB SCL
LCALL DELAY
CLR SDA
LCALL DELAY
CLR SCL
LCALL DELAY
MOV R2,#08H ;寫控制字
MOV A,#0A0H
WM2: LCALL WRITE
LCALL DELAY
;應(yīng)答脈沖,本程序省掉對(duì)SDA的檢測(cè)
SETB SCL
LCALL DELAY
CLR SCL
LCALL DELAY MOV R2,#08H ;寫入數(shù)據(jù)的地址
MOV A,30H
LCALL WRITE
LCALL DELAY ;應(yīng)答脈沖
SETB SCL
LCALL DELAY
CLR SCL
LCALL DELAY
MOV R2,#08H ;寫一個(gè)字節(jié)數(shù)據(jù)
MOV A,R0
LCALL WRITE LCALL DELAY ;應(yīng)答脈沖
SETB SCL
LCALL DELAY
CLR SCL
CLR SDA
;清SDA,為發(fā)停止信號(hào)做準(zhǔn)備
LCALL DELAY
WM: SETB SCL;給出停止信號(hào)
LCALL DELAY
SETB SDA
LCALL DELAY
RETWRITE: CLR C;寫入數(shù)據(jù)子程序
RLC A
MOV SDA,C
LCALL DELAY
SETB SCL
LCALL DELAY
CLR SCL
DJNE R2,WRITE
RET
DELAY: MOV R3,#1FH ;延時(shí)子程序
DELY: DJNZ R3,DELY
RET
任務(wù)實(shí)施
【設(shè)備與器件清單】
1.設(shè)備清單:PC機(jī)、單片機(jī)開發(fā)系統(tǒng)。
2.器件清單:
插座 DIP40 1
單片機(jī) AT89C51 1
晶體振蕩器 6MHz或12MHz 1
瓷片電容 30pF 2
0.1μF 1電解電容 10μF 4
AT24C01A 1
按鈕開關(guān) 1
發(fā)光二極管 1
串口線 1
電阻 若干
【跟我做】
1.準(zhǔn)備器件,設(shè)計(jì)硬件電路圖。
在單片機(jī)最小系統(tǒng)的基礎(chǔ)上,設(shè)計(jì)AT24C01A與單片機(jī)的連接,參考電路如圖5-21所示。圖5-21AT89C51與AT24C01的硬件接口連接圖
2.編寫AT24C01A讀/寫控制程序。
ACK BIT 20H
SLA EQU 30H
SUBA DATA 31H
NUMBYTE DATA 32H
MTD EQU 40H
MRD EQU 50H
SCL EQU 0B0H
SDA EQU 0B1H EEROM02 EQU 0A0H
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV A,#55H
MOV R0,#MTD
MOV R1,#08HLOOP1: MOV @R0,A
INC R0
INC A
DJNZ R1,LOOP1
WR24C02: MOV SLA,#EEROM02 ;器件地址
MOV SUBA,#00H ;從地址
MOV NUMBYTE,#08H ;寫的長(zhǎng)度
LCALL IWRNBYTE
LCALL DELAY
NOP
NOP
RD24C02: MOV SLA,#EEROM02
MOV SUBA,#00H
MOV NUMBYTE,#08H
LCALL IRDNBYTE
LCALL DELAY
;其他處理程序
SJMP$延時(shí)子程序(若fosc>12MHz,則要增加相應(yīng)的NOP指令數(shù)):
DY: MOV R7,#1H
DJNZ R7,$
RET
DELAY: MOV R3,#10H
DELAY0: MOV R4,#0F0H
DJNZ R4,$
DJNZ R3,DELAY0
RET啟動(dòng)I2C總線子程序:
START:SETB SDA
NOP
SETB SCL;起始條件的建立時(shí)間大于4.7μs
LCALL DY
CLR SDA
LCALL DY
CLR SCL ;鉗住總線,準(zhǔn)備發(fā)數(shù)據(jù)
NOP
RET結(jié)束總線子程序:
STOP: CLR SDA
NOP
SETB SCL ;發(fā)送結(jié)束條件的時(shí)鐘信號(hào)
LCALL DY
SETB SDA;結(jié)束總線
LCALL DY
RET發(fā)送應(yīng)答信號(hào)子程序:
MACK:CLR SDA ;將SDA置0
NOP
NOP
SETB SCL
LCALL DY
CLR SCL
NOP
NOP
RET發(fā)送非應(yīng)答信號(hào)子程序:
MNACK:SETB SDA;將SDA置1
NOP
NOP
SETB SCL
LCALL DY
CLR SCL
NOP
NOP
RET檢查應(yīng)答位子程序(返回值A(chǔ)CK=1時(shí)表示有應(yīng)答):
CACK: SETB SDA
NOP
NOP
SETB SCL
CLR ACK
NOP
NOP
MOV C,SDA
JC CEND
SETB ACK ;判斷應(yīng)答位CEND: NOP
CLR SCL
NOP
RET
發(fā)送字節(jié)子程序(字節(jié)數(shù)據(jù)放入ACC;每發(fā)送一字節(jié)要調(diào)用一次CACK子程序,取應(yīng)答位):
WRBYTE:MOV R0,#08H
WLP: RLC A ;取數(shù)據(jù)位
JC WR1
SJMP WR0 ;判斷數(shù)據(jù)位
WLP1: DJNZ R0,WLP
NOP
RET
WR1: SETB SDA ;發(fā)送1
NOP
SETB SCL
LCALL DY
CLR SCL
SJMP WLP1WR0: CLR SDA ;發(fā)送0
NOP
SETB SCL
LCALL DY
CLR SCL
SJMP WLP1
RET
讀取字節(jié)子程序(讀出的值在ACC中,每取一字節(jié)要發(fā)送一個(gè)應(yīng)答/非應(yīng)答信號(hào)):
RDBYTE: PUSH 00H
MOV R0,#08HRLP:SETB SDA
NOP
SETB SCL ;時(shí)鐘線為高,接收數(shù)據(jù)位
NOP
NOP
MOV C,SDA ;讀取數(shù)據(jù)位
MOV A,R2
CLR SCL ;將SCL拉低,時(shí)間大于4.7μs
RLC A ;進(jìn)行數(shù)據(jù)位的處理
MOV R2,A
NOP
NOP
NOP
DJNZ R0,RLP
POP 00H;未夠8位,再來一次
RET
無子地址器件寫字節(jié)數(shù)據(jù)(入口參數(shù):數(shù)據(jù)存ACC、器件從地址為SLA,占用A、R0、CY):
IWRBYTE: PUSH 00H
PUSH ACCIWBLOOP: LCALL START ;啟動(dòng)總線
MOV A,SLA
LCALL WRBYTE ;發(fā)送器件從地址
LCALL CACK
JNB ACK,RETWRB ;無應(yīng)答則跳轉(zhuǎn)
POP ACC ;寫數(shù)據(jù)
LCALL WRBYTE
LCALL CACK
LCALL STOP
RETRETWRB: POP ACC
LCALL STOP
POP 00H
RET
無子地址器件讀字節(jié)數(shù)據(jù)子程序(入口參數(shù):器件從地址SLA;出口參數(shù):數(shù)據(jù)為ACC;占用A、R0、R2、CY):
IRDBYTE: LCALL START
MOV A,SLA;發(fā)送器件從地址
INC A
LCALL WRBYTE
LCALL CACK
JNB ACK,RETRDB
LCALL RDBYTE ;進(jìn)行讀字節(jié)操作
LCALL MNACK ;發(fā)送非應(yīng)答信號(hào)
RETRDB: LCALL STOP ;結(jié)束總線
RET
向器件指定子地址寫N個(gè)數(shù)據(jù)子程序(入口參數(shù):器件從地址SLA、器件子地址SUBA、發(fā)送數(shù)據(jù)緩沖區(qū)MTD、發(fā)送字節(jié)數(shù)NUMBYTE;占用A、R0、R1、R3、CY):IWRNBYTE:PUSH00H
PUSH 01H
PUSH 03H
MOV A,NUMBYTE
MOV R3,A
LCALLSTART ;啟動(dòng)總線
MOV A,SLA
LCALLWRBYTE ;發(fā)送器件從地址
LCALLCACK
JNB ACK,RETWRN;無應(yīng)答則退出
MOV A,SUBA;指定子地址
LCALL WRBYTE
LCALL CACK
MOV R1,#MTD
WRDA: MOV A,@R1
LCALL WRBYTE ;開始寫入數(shù)據(jù)
LCALL CACK
JNB ACK,IWRNBYTE
INC R1
DJNZ R3,WRDA;判斷寫完沒有RETWRN: LCALL STOP
POP 03H
POP 01H
POP 00H
RET
向器件指定子地址讀取N個(gè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 法律職業(yè)資格考試民法測(cè)試題庫及參考答案
- 山東中金嶺南銅業(yè)有限責(zé)任公司2026年校園招聘25人備考題庫參考答案詳解
- 河北省保定市博野縣2026屆高二上生物期末學(xué)業(yè)水平測(cè)試試題含解析
- 初中物理電磁感應(yīng)現(xiàn)象的感應(yīng)功率計(jì)算家庭實(shí)驗(yàn)設(shè)計(jì)課題報(bào)告教學(xué)研究課題報(bào)告
- 新疆烏魯木齊市沙依巴克區(qū)四中2026屆高三生物第一學(xué)期期末學(xué)業(yè)水平測(cè)試模擬試題含解析
- 安徽省安慶市2025-2026學(xué)年上學(xué)期高二物理期末模擬檢測(cè)試卷【含答案】
- 2025年應(yīng)用心理學(xué)專業(yè)畢業(yè)考試試題及答案
- 2025年應(yīng)用心理學(xué)考試試卷及答案
- 2025年應(yīng)急逃生與自救技能知識(shí)考察試題及參考答案
- 基于移動(dòng)學(xué)習(xí)的高中語文教學(xué)效果評(píng)估與教學(xué)設(shè)計(jì)研究教學(xué)研究課題報(bào)告
- 2026廣東河源市東源縣司法局招聘司法協(xié)理員9人筆試備考題庫及答案解析
- 炎德·英才·名校聯(lián)考聯(lián)合體2026屆高三年級(jí)1月聯(lián)考英語試卷(含答及解析)+聽力音頻+聽力材料
- 科創(chuàng)飛地合作協(xié)議書
- 急診護(hù)理新技術(shù)與新進(jìn)展
- JGJ-T17-2020蒸壓加氣混凝土制品應(yīng)用技術(shù)標(biāo)準(zhǔn)
- 市政項(xiàng)目EPC總承包項(xiàng)目方案投標(biāo)文件(技術(shù)方案)
- 馬克思主義與當(dāng)代課后習(xí)題答案
- 二十屆四中全會(huì)測(cè)試題及參考答案(第三套)超難
- 2025年事業(yè)單位面試心理素質(zhì)測(cè)試模擬試卷及答案
- 2025-2030疫苗冷鏈物流體系建設(shè)標(biāo)準(zhǔn)與第三方服務(wù)市場(chǎng)機(jī)會(huì)報(bào)告
- 2025年江蘇省事業(yè)單位招聘考試教師招聘體育學(xué)科專業(yè)知識(shí)試卷(秋季篇)
評(píng)論
0/150
提交評(píng)論