導航:首頁 > 操作系統 > 單片機存儲器實驗

單片機存儲器實驗

發布時間:2023-08-21 15:47:48

單片機裡面CPU讀寫存儲器的步驟過程

1)存儲器的讀操作。例如,若要將存儲器40H中的內容50H讀出,其過程如下:

①CPU將地址碼40H送到地址匯流排上,經存儲器地址解碼器選通地址為40H的存儲單元:
②CPU發出「瀆」信號,存儲器讀/寫控制開關將數據傳輸方向撥向「讀」;

③存儲器將地址為40H的存儲單元中的內容50H送到數據匯流排上;

④CPU將數據匯流排上的數據50H讀人指定的某一寄存器。
對存儲單元的讀操作,不會破壞其原來的內容。相當於復制。

2)存儲器的寫操作。例如,若要將數據ABH寫入存儲器地址為CDH的存儲單元中,其過程如下: 內容來自單片機之家www.dpj100.com
①CPU將地址碼CDH送到地址匯流排上,經存儲器地址解碼器選通地址為CDH的存儲單元;
②CPU將數據ABH送到數據匯流排上;

③CPU發出「寫」信號,存儲器讀/寫控制開關將數據傳送方向撥向「寫」;
④存儲器將數據匯流排上的數據ABH送人已被選中的地址為CDH的存儲單元中。

Ⅱ 單片機實驗

1、
MOV R0,#20H
MOVX A,@R0
MOV 20H,A
2、
MOV DPTR,#2000H
MOVX A,@DPTR
MOV 20H,A
3、
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV 20H,A
4、
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV B,A
MUL AB
MOV R7,A
MOV R6,B;(溢出部分送R6)
5、高八位?低八位?什麼意思?
地址高八位DPH,地址第八位DPL
MOV DPH,#20H
MOV DPL,#00H

Ⅲ 單片機實驗編製程序對外部存儲器進行讀寫操作

MOV A,#DATA(要寫入的數據);
MOV DPTR,#Address(要存放數據的外部存儲器單元地址);
MOVX @DPTR,A;
MOVX A,@DPTR;
CJNZ A,#DATA(判斷時認為要傳送的正確數據),LABEL
CLR P1.0
JMP END
LABEL:CLR P1.1
END:AJMP $

Ⅳ 51單片機擴展外部數據存儲器6264,怎麼用C語言實現對其操作

2.擴展RAM編程基礎
(1)弄清擴展器件的地址
在圖7.2.5中,U3的ABC接單片機A13,A14,A15,所以片選信號對應地址最高位,即:「CBAxxxxx xxxxxxxx」(x為任意)。U4片選接CS1,即Y1,CBA=001,可得U4的地址范圍是0x2000~0x3fff。U5接CS3,即Y3,CBA=011,地址為0x6000~0x7fff。U6接CS4,即Y4,CBA=100,地址為0x8000~0x9fff。知道了器件地址,可以利用直接地址、外部數據指針來訪問存儲器。通過設置,也可以讓編譯器在擴展RAM中自動分配存儲單元。
(2)直接地址訪問
①向U4寫數據:
XBYTE[0x2000+addr]=dat; //addr為U4內部地址,取值為0~0x1fff;dat為數據。
②讀出U4數據:
dat=XBYTE[0x2000+addr];
也可以用頁訪問方式。頁訪問方式,實際就是先把16位地址高8位送P2口,通過低8位地址讀寫。
③按頁讀寫U4:
P2=0x20+page; // page為頁,取值為0x00~0x1F。
PBYTE[addr]=dat; // addr為頁內地址,取值為0x00~0xFF。
dat=PBYTE[addr];
④讀U6
dat=XBYTE[0x8000];//讀U6,地址取0x8000~0x9fff任何值,都一樣。
⑤寫U5
XBYTE[0x6000]=dat; //寫U5,地址取0x6000~0x7fff任何值,都一樣。
(3)數據指針
如,讀寫U4,可以這樣寫:
unsigned char xdata *p=0x3000; //聲明指針p,並初始指向0x3000單元
x=*p; //讀指針所指向的位置
p=p+1; //指針指向下一單元
*p=0x16; //向指針所指向的位置寫入數據
(4)讓編譯器自動分配存儲空間
①為了能讓編譯器自動分配存儲空間,並使用擴展RAM,必須設置擴展RAM地址。在Keil編程軟體中,點擊工具欄快捷圖標「 」,彈出目標選項對話框。按圖7.2.6所示,設置RAM起始地址和長度。
②變數聲明時使用xdata關鍵詞。如:
unsigned char xdata a;//變數a使用擴展RAM空間。
特別注意,擴展RAM直接地址訪問方式與自動分配存儲空間方式最好不要混用,否則可能產生沖突。
摘自《單片機控制裝置安裝與調試》下冊,雷林均主編

Ⅳ 分析at89s52單片機的存儲器結構

1.程序存儲器

設計人員編寫的程序存放在微處理器的程序存儲器中。

at89s52具有64kb程序存儲器定址空間,它是用於存放用戶程序、數據和表格等信息,程序存儲器的結構如圖1所示。

圖1 at89s52程序存儲器的結構

at89s52片內片外的程序存儲器在統一邏輯空間中,地址從0000h~ffffh,共有64k位元組范圍。引腳接高電平時,程序從片內程序存儲器0000h開始執行,即訪問片內存儲器。當pc值超出片內rom容量時,會自動轉向片外程序存儲器空間執行。引腳接低電平時,迫使系統全部執行片外程序存儲器0000h開始存放的程序。

2.數據存儲器

at89s52 有256 位元組片內數據存儲器。地址為00h~ffh。這256個單元共分為兩部分。其一是地址從00h~7fh單元(共128個位元組)為用戶數據ram。從80h~ffh地址單元(也是128個位元組)為特殊寄存器(sfr)單元。高128 位元組與特殊功能寄存器重疊,也就是說高128位元組與特殊功能寄存器有相同的地址,而物理上是分開的。

在00h~1fh共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以r0~r7來命名,稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為r0~r7,利用psw的第3和第4位(rs0和rs1),即可選中這四組通用寄存器。

內部數據存儲器的20h—2fh單元為位定址區,可作為一般單元用位元組定址,也可對它們的位進行定址,位定址區地址如表1所示

表1 ram位定址區地址表

3. 中斷服務程序的入口地址

在程序存儲區中,為中斷服務程序保存了一段中斷服務程序的入口地址:其中一組特殊單元是0003h—0032h,各個單元各有用途,它們被分為六段,每個段8個位元組,專門留給中斷服務程序使用,被稱為中斷矢量區。at89s52共有8個中斷源,6個中斷矢量,它們的定義如下表2所,

表2 中斷服務程序的入口地址

4.特殊功能寄存器sfr(special? function register)

特殊功能寄存器是指有特殊用途的寄存器集合,也稱為專用寄存器,本質上是一些具有特殊功能的片內ram單元,反映單片機的運行狀態,很多功能也通過特殊功能寄存器來定義和控製程序的執行。

at89s52單片機內部高128(80~ffh)地址分配給特殊功能寄存器。這個地址空間和晶元內數據存儲器的高128位元組地址完全重疊,但兩者在物理硬體上是完全獨立的,用定址方式來區分這個完全重疊的地址空間。使用直接定址方式訪問這個地址空間時,訪問的是特殊功能寄存器;使用間接定址方式訪問這個地址空間時,訪問的是數據存儲器。

at89s52有32個特殊功能寄存器,它們被離散地分布在內部ram的80h~ffh地址中,這些寄存的功能已作了專門的規定,用戶不能修改其結構。

5.幾個注意問題

(1)地址的重疊性

單片機中的所有存儲器都必須分配地址,可以定址的地址范圍為64kb,數據存儲器與程序存儲器都佔用相同的地址。

程序存儲器中片內片外0000h~0ffffh低4kb地址完全重疊,但是我們使用引腳進行區分:=0時,選擇片外,=1時,選擇片內,這樣就完全區分開來了。

數據存儲器中片內外0000h~00ffh的256個單元地址完全重疊,片內外數據的訪問採用不同指令來區分:mov指令訪問片內數據存儲器,movx指令訪問片外數據存儲器。

(2)程序存儲器(rom)與數據存儲器(ram)的區分

程序存儲器(rom)與數據存儲器(ram)的區分在使用上是嚴格區分的,程序存儲器只能放置程序指令及常數表格,對程序存儲器中數據的訪問只可以使用movc指令。而數據存儲器則存放數據,片內外的操作指令分別用mov,movx進行操作。

(3)位地址空間的區域劃分

片內ram中的20h~2fh的128位,以及sfr中的位地址,這些位定址單元與位指令集構成了位處理器系統

Ⅵ 在單片機實驗中,如何控制8255晶元的片選cs埠。萬分感謝高手指教!!!

用到P0口和P2口的第二功能時,P0口輸出低8位地址,P2口輸出高8位地址,這樣在輸出地址的同時把CS拉低選中8255。首先輸出地址,用74ls373把地址鎖存以後,再通過P0口和8255數據進行數據交換!如果還有疑問可以去看看51教材P口的第二功能!!!我的回答希望對你有點幫助!!!
這兩種方式的區別 在於:

前者是用IO口選通的;後者是把8255當做片外數據存儲器用的。

舉例說明:

1.做IO口
CLR P2.7
...........

2.做片外數據存儲器
MOVX @DPTR 0xff7f ;地址隨便編的,但P0的第七位要為0
.........
後者就是由74ls373送出地址。
只要讓CS=0就可以。

比如接在P2.7上的,P2.7對應A15,所以用MOVX指令時,只要P2.7=0即選中8255,比如0x7FFFF,0x0000等這樣的地址,只要A15=0即可。

在74LS373的Q7上的意思也一樣,Q7對應的地址是A7,所以只要A7=0就能選中8255。

Ⅶ 單片機程序將外部數據存儲器從7000H開始的連續的30個單元置為1

外部數據存儲器的讀寫,用指令MOVX來實現,匯編語言來編制的話,是很容易理解的。下面給出匯編代碼,供參考:
SETD:
MOVDPTR,#7000H
MOVR2,#30
LOOP:
MOVXA,#0ffh
MOVX@DPTR,A
INCDPTR
DJNZR2,LOOP
RET
如果用C語言的話,程序代碼如下:
unsignedchar*str
unsignedchari;

str=0x7000;
for(i=0;i<30;i++)
{
*str=0xff;
str++;
}

Ⅷ 單片機實驗數碼轉換實驗代碼如何補充,補充過程及注釋解釋

2.2.1 實驗目的
1. 掌握不同進制數及編碼相互轉換的程序設計方法,加深對數碼轉換的理解;
2. 熟悉Keil C51 集成開發環境的操作及程序調試的方法。
2.2.2 實驗設備
PC機一台,TD-NMC+教學實驗系統、或「TD-PIT++教學實驗系統+TD-51 系統平台」、或
「TD-PITE 教學實驗系統+TD-51 系統平台」
2.2.3 實驗內容
1. 將BCD 碼整數0~255 存入片內RAM 的20H、21H、22H 中,然後轉換為二進制整數
00H~FFH,保存到寄存器R4 中。
2. 將16 位二進制整數存入R3R4 寄存器中,轉換為十進制整數,以組合BCD 形式存儲在
RAM 的20H、21H、22H 單元中。
2.2.4 實驗步驟
1. BCD 整數轉換為二進制整數
實驗參考常式:(Asm2-1.asm)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R0, #20H ;BCD 存放高位地址
MOV R7, #03H ;BCD 碼0--255, 最多3 位
CLR A
MOV R4, A
LP1: MOV A, R4
MOV B, #0AH
MUL AB ;乘10
ADD A, @R0 ;加下一位的值
INC R0 ;指向下一單元
MOV R4, A ;結果存入R4
DJNZ R7, LP1 ;轉換未結束則繼續
SJMP MAIN ;設置斷點, 觀察實驗結果R4 中的內容
END
實驗步驟:
(1)輸入程序,檢查無誤後,編譯、鏈接程序,首先給系統復位,然後點擊命令進入
調試狀態;
(2)修改20H、21H、22H 單元的內容,如:00H,05H,08H;
(3)在SJMP MAIN 語句行設置斷點,然後運行程序;
(4)程序遇到斷點後停止程序運行,此時查看寄存器R4 的內容,應為3AH;
(5)重新修改20H、21H、22H 單元的內容,再次運行程序,驗證程序的正確性;
(6)實驗結束,按復位鍵將系統復位,點擊退出調試狀態。
2. 二進制整數轉換為十進制整數
圖2-2-1 程序流程圖
實驗參考常式:(Asm2-2.asm)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R0, #22H ;轉換結果低位地址
MOV A, R0
PUSH ACC ;ACC 表示累加器A 的直接地址
MOV R7, #03H
CLR A
LP1: MOV @R0, A ;結果存儲地址清零
DEC R0
DJNZ R7, LP1
POP ACC
MOV R0, A
MOV R7, #16
LP2: PUSH ACC
CLR C
MOV A, R4 ;R4中為二進制數的低位
RLC A
MOV R4, A
MOV A, R3 ;R3中為二進制數的高位
RLC A
MOV R3, A
MOV B, #03H
LP3: MOV A, @R0
ADDC A, @R0 ;執行乘2 操作
DA A ;十進制調整
MOV @R0, A ;結果保存
DEC R0
DJNZ B, LP3
POP ACC
MOV R0, A
DJNZ R7, LP2
LJMP MAIN ;設置斷點觀察結果, 可進行下一次轉換
END
實驗步驟:
(1)編寫實驗程序,程序流程圖如圖2-2-1 所示,編譯、鏈接無誤後,進入調試狀態;
(2)修改R3R4 寄存器,例如A2H、FCH;
(3)在LJMP MAIN 語句行設置斷點,然後運行程序;
(4)程序停止後,查看存儲器20H 的內容,應為:04H、17H、24H;
(5)反復修改R3R4 寄存器的內容,運行實驗程序,驗證程序的正確性。

Ⅸ 急求:單片機實驗

:
ORG 0030H
MOV 30H, #34H
MOV 31H, #56H
MOV 32H, #23H
MOV 33H, #90H
MOV 34H, #32H
MOV 35H, #68H
MOV 36H, #09H
MOV 37H, #75H
CALL SORT
SJMP $
;-----------------------------------------------------
SORT: ;最簡短、高效的排序程序.
MOV B, #7 ;第一輪排序時,比較7次.
S1: MOV R0, #30H ;數據區的起始地址.
MOV R7, B
CLR PSW.5 ;清除"交換"標志位.
S2: MOV A, @R0 ;取前一個數.
INC R0
CLR C
SUBB A, @R0 ;減後一個數,前<後時,Cy=1
S3: JC S4 ;有借位時,不用交換,轉移.
MOV A, @R0 ;取後一個數,准備交換.
DEC R0
XCH A, @R0 ;交換到前一個.
INC R0
XCH A, @R0 ;交換到後一個.
SETB PSW.5 ;設定"交換"標志位.
S4: DJNZ R7, S2 ;繼續本輪比較.
JNB PSW.5, ENDS ;如本輪沒有進行過交換,可提前結束.
DJNZ B, S1 ;下一輪,比較次數少一次.
ENDS:
RET
;-----------------------------------------------------
END

閱讀全文

與單片機存儲器實驗相關的資料

熱點內容
計算機專業學51單片機 瀏覽:206
程序員不接受反駁 瀏覽:294
微軟自帶的壓縮軟體 瀏覽:286
中國玩家在日本伺服器做什麼 瀏覽:48
12864和單片機 瀏覽:898
25匹空調壓縮機 瀏覽:649
adkandroid下載 瀏覽:308
如何在蘋果電腦上裝python 瀏覽:327
哪個app的跑步訓練內容最豐富 瀏覽:583
廣訊通怎麼刪除文件夾 瀏覽:206
解壓的視頻化妝品 瀏覽:674
易語言新進程監視源碼 瀏覽:941
turbo碼解碼演算法 瀏覽:956
stc11f16xe單片機 瀏覽:282
linuxupdate命令行 瀏覽:578
pdf轉化成wps 瀏覽:765
php拋出錯誤 瀏覽:159
買車看車用什麼app 瀏覽:656
dos怎麼清除屏幕上的命令 瀏覽:813
壓縮褲冬天 瀏覽:449