存儲器(Memory)是計算機系統中的記憶設備,用來存放程序和數據。有了存儲器,計算機才有記憶功能,才能保證正常工作。按存儲介質分可分為半導體存儲器和磁表面存儲器。按存儲器的讀寫功能分可分為只讀存儲器(ROM)和隨機讀寫存儲器(RAM)。
只讀存儲器ROM是一種對其內容只能讀,不能寫的存儲器。隨著半導體技術的發展,只讀存儲器也根據不同需要設計出不同的種類。其中電可擦除只讀存儲器(EEPROM)是一種可用電氣方法在線擦除和再編程的只讀存儲器,它既有RAM可讀可改寫的特性,又有非易失性存儲器ROM在掉電后仍能保持所存數據的優點。因此,EEPROM在單片機存儲器擴展中可以作程序存儲器,也可以用作數據存儲器,基于EEPROM存儲器的擴展設計有十分重要的意義。
建立一個信息檢索系統,每個序號對應一個不同的信息。通過鍵盤輸入不同的指令序號,在電腦屏幕上會輸出想要得到的信息。當超出序號范圍的時候,屏幕會顯示錯誤。程序還附加一個進一步查詢的子程序。在輸出信息后,可以對該信息進行查尋,當輸入信息與序號相對應的信息完全相同時,會在屏幕上顯示NO字樣,然后繼續進行下一次的提示輸入。
存儲芯片的擴展包括位擴展、字擴展和字位同時擴展等三種情況。
1、位擴展
位擴展是指存儲芯片的字(單元)數滿足要求而位數不夠,需對每個存儲單元的位數進行擴展。
例: 用 1K × 4 的 2114 芯片構成 lK × 8 的存儲器系統。
分析: 每個芯片的容量為 1K ,滿足存儲器系統的容量要求。但由于每個芯片只能提供 4 位數據,故需用 2 片這樣的芯片,它們分別提供 4 位數據至系統的數據總線,以滿足存儲器系統的字長要求。
設計要點 :
?。?) 將每個芯片的 10 位(1k=2^10)地址線按引腳名稱一一并聯,按次序逐根接至系統地址總線的低 10 位。
?。?) 數據線則按芯片編號連接,1 號芯片的 4 位數據線依次接至系統數據總線的 D0 -D3 , 2 號芯片的 4 位數據線依次接至系統數據總線的 D4 -D7 。
(3) 兩個芯片的 端并在一起后接至系統控制總線的存儲器寫信號(如 CPU 為 8086/8088,也可由 和 /M 或 IO / 組合來承擔)
?。?) 引腳分別并聯后接至地址譯碼器的輸出,而地址譯碼器的輸入則由系統地址總線的高位來承擔。 當存儲器工作時,系統根據高位地址的譯碼同時選中兩個芯片,而地址碼的低位也同時到達每一個芯片,從而選中它們的同一個單元。在讀/寫信號的作用下,兩個芯片的數據同時讀出,送上系統數據總線,產生一個字節的輸出,或者同時將來自數據總線上的字節數據寫入存儲器。。
2 、字擴充
字擴展用于存儲芯片的位數滿足要求而字數不夠的情況,是對存儲單元數量的擴展。
例 : 用 2K × 8 的 2716 A存儲器芯片組成 8K × 8 的存儲器系統
分析:
由于每個芯片的字長為 8 位,故滿足存儲器系統的字長要求。但由于每個芯片只能提供 2K 個存儲單元,故需用 4 片這樣的芯片,以滿足存儲器系統的容量要求。
設計要點 : 同位擴充方式相似。
(1) 先將每個芯片的 11(2* 2^10) 位地址線按引腳名稱一一并聯,然后按次序逐根接至系統地址總線的低 11 位。
(2) 將每個芯片的 8 位數據線依次接至系統數據總線的 D0 -D7 。
?。?) 兩個芯片的 端并在一起后接至系統控制總線的存儲器讀信號(這樣連接的原因同位擴充方式),
?。?) 它們的 引腳分別接至地址譯碼器的不同輸出,地址譯碼器的輸入則由系統地址總線的高位來承擔。 當存儲器工作時,根據高位地址的不同,系統通過譯碼器分別選中不同的芯片,低位地址碼則同時到達每一個芯片,選中它們的相應單元。在讀信號的作用下,選中芯片的數據被讀出,送上系統數據總線,產生一個字節的輸出。
3 、同時進行位擴充與字擴充
存儲器芯片的字長和容量均不符合存儲器系統的要求,需要用多片這樣的芯片同時進行位擴充和字擴充,以滿足系統的要求。
例 : 用 1K × 4 的 2114 芯片組成 2K × 8 的存儲器系統
分析: 由于芯片的字長為 4 位,因此首先需用采用位擴充的方法,用兩片芯片組成 1K × 8 的存儲器。再采用字擴充的方法來擴充容量,使用兩組經過上述位擴充的芯片組來完成。
設計要點 : 每個芯片的 10 根地址信號引腳宜接接至系統地址總線的低 10 位,每組兩個芯片的 4 位數據線分別接至系統數據總線的高 / 低四位。地址碼的 A 10 、 A 11 經譯碼后的輸出,分別作為兩組芯片的片選信號,每個芯片的 控制端直接接到 CPU 的讀 / 寫控制端上,以實現對存儲器的讀 / 寫控制。
當存儲器工作時,根據高位地址的不同,系統通過譯碼器分別選中不同的芯片組,低位地址碼則同時到達每一個芯片組,選中它們的相應單元。在讀 / 寫信號的作用下,選中芯片組的數據被讀出,送上系統數據總線,產生一個字節的輸出,或者將來自數據總線上的字節數據寫入芯片組。
嘗試編寫了一個簡單程序。為與最后的程序作比較,將此程序列出,如下:
DATA SEGMENT
n0 db ‘0000000000000000000000000000000000000000’
n1 db‘1111111111111111111111111111111111111111’
n2 db ‘2222222222222222222222222222222222222222’
n3 db ‘3333333333333333333333333333333333333333’
n4 db ‘4444444444444444444444444444444444444444’
n5 db ‘5555555555555555555555555555555555555555’
n6 db‘6666666666666666666666666666666666666666’
n7 db ‘777’
n8 db ‘888’
Errmsg DB ‘No! Input 0-8! Q or q , Exit $’ ;輸出錯誤信息 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA ;段屬性說明
START:
MOV AX,DATA ;初始化DS
MOV DS,AX LOP:
MOV AH,01H ;輸入一個數字
INT 21H
CMP AL,‘Q’ ;判斷是否輸入字符與Q相等,相等跳到EXIT退出
JZ EXIT
CMP AL,‘q’ ;判斷是否輸入字符與q相等,相等跳到EXIT退出
JZ EXIT
CMP AL,‘0’ ;輸入不在0-8范圍則退出
JB ERR ;小于0跳轉
CMP AL,‘8’
JA ERR ;大于8跳轉
SUB AL,30H ;計算字符串的地址
MOV DH,28H ;28H=40
MUL DH
MOV BX,AX ;數據放入BX
CALL DISP
JMP LOP ;輸出錯誤信息后,繼續輸入序號
ERR:
MOV DL,0DH ;輸出提示錯誤語句
MOV AH,02
INT 21H
MOV DX,OFFSET Errmsg
MOV AH,9
INT 21H
MOV DL,0DH ;回車和換行
MOV AH,02
INT 21H
JMP LOP ;返回LOP繼續輸入序號
EXIT:
MOV AH,4CH ;返回DOS
INT 21
DISP PROC NEAR
MOV DL,0DH ;回車換行
MOV AH,02
INT 21H
MOV DL,0AH ;多字符輸入
MOV AH,02
INT 21H
MOV CX,28H ;28H=40 控制循環次數即輸出的信息字符個數
LOP1:
MOV DL,[BX] ;循環輸出字符串
MOV AH,02H
INT 21H
INC BX ;BX打印字符
LOOP LOP1
MOV DL,0DH
MOV AH,02
INT 21H
MOV DL,0AH
MOV AH,02
INT 21H
RET
DISP ENDP
CODE ENDS
END START ;源程序結束
調試結果如圖所示:
出現的問題有:
問題1:開始輸入序號時,只能顯示在屏幕的第一個空間。
問題2:在輸出沒有寫滿40個字符的字符串時,輸出是亂碼。
問題3:按Q或q退出時,還會顯示一串數字再退出。
程序二
在程序一調試的基礎上,檢查程序發現一些問題,在輸入不是Q或q或0至8的數字時,沒有寫輸出顯示字符的程序;輸入是應該是字符串,因為有回車。在此基礎上,繼續改善設計的程序,設計出程序二,即最終程序。
輸入一個序號,首先判斷是否是Q或q。如果是,則直接跳出,結束程序。如果不是,就在已設定好的信息庫中檢索相應信息,并將信息顯示在屏幕上,緊接著跳入下一次序號輸入界面。如果沒有相應的序號所對應的信息,即超出序號范圍會自動報錯,并跳到下一次序號輸入界面。
主體部分程序如下:
BEGIN:
CALL CRLF ;回車換行
LEA DX,MSG ;輸出提示語句Please input a number: MOV AH,09H INT 21H
MOV AH,1 ;輸入序號 INT 21H
CMP AL,‘Q’ ;判斷為?Q?退出 JE EXIT
CMP AL,‘q’ ;判斷為?q?退出 JE EXIT
SUB AL,‘0’ ;小于0跳轉ERROR
JB ERROR
CMP AL,8 ;大于9跳轉ERROR JA ERROR
MOV BX,OFFSET MSG0 ;取第一個字符串的首地址 MUL FORTY
ADD BX,AX ;找到相應字符串的地址 CALL DISPLAY ;調用DISPLAY子程序
定義ERROR程序:提示錯誤,重新要求輸入序號,再次檢測。
ERROR:
CALL CRLF ;回車換行
LEA DX,ERRMSG ;提示錯誤語句 MOV AH,09H INT 21H CALL CRLF
JMP BEGIN ;返回BEGIN程序
定義顯示信息程序:將字符信息一個個輸出。
DISPLAY PROC NEAR CALL CRLF
LEA DX,MSG9 ;提示語The message is: MOV AH,09H INT 21H
MOV CX,40 ;設置循環次數
DISP1:
MOV DL,[BX] ;輸出字符串 MOV AH,2 INT 21H INC BX LOOP DISP1 CALL CRLF JMP BEGIN CALL CRLF
RET ;返回程序
DISPLAY ENDP
調試過程主要由編輯、匯編、鏈接和執行等幾個步驟組成。當編輯好匯編語言源程序后,將其保存為.ASM文件。再調用匯編程序對源程序進行翻譯,生成.OBJ的目標文件。在匯編過程中,源程序有錯誤則不能生成目標文件,經過多次修改最終生成無錯誤目標文件。之后,調用鏈接程序(LINK)將用戶目標程序和庫文件進行鏈接、定位,生成.EXE可執行文件。如果剛開始可執行程序運行之后沒有得到預想的結果,又要重新檢查源程序的算法錯誤,重新編輯、匯編、鏈接和執行,最終得到預期的結果。
經過多次調試、修改、測試結果,最后基本符合要求。 調試最終結果如圖
評論
查看更多