|
一、實驗?zāi)康?
1、 掌握RAM的讀寫方法;
2、 理解RAM和ROM的作用;
3、 熟練Proteus仿真軟件的使用;
4、 熟練單片機實驗箱的實驗操作。
二、實驗預(yù)習(xí)要求
1、主要知識點概述:掌握單片機RAM的結(jié)構(gòu);學(xué)會RAM的讀寫。
2、實驗效果說明:將存入的RAM的數(shù)值讀出用數(shù)碼管顯示出來。
三、實驗設(shè)備和器件
一臺PC 機
一套 PROTEUS 仿真軟件
一臺實驗箱
一臺ISP 下載器
一臺51單片機仿真器 (可選)
四、實驗要求
1、在 DATA區(qū)定義一個字符變量并寫入數(shù)據(jù),把寫入RAM中的數(shù)據(jù)讀出來并用數(shù)碼管顯示出來。
五、實驗原理
數(shù)據(jù)存儲器用于存放中間運算結(jié)果、數(shù)據(jù)暫存和緩沖、標(biāo)識位等。80C51系列單片機的片內(nèi)數(shù)據(jù)存儲器除RAM塊外。還有特殊功能寄存器(SFR)塊。 通過查詢AT89C52的數(shù)據(jù)手冊可以知道:
AT89C52 有 256 個字節(jié)的內(nèi)部RAM,80H-FFH 高128 個字節(jié)與特殊功能寄存器(SFR)地址是重疊的,也就是高128字節(jié)的RAM 和特殊功能寄存器的地址是相同的,但物理上它們是分開的。
當(dāng)一條指令訪問7FH以上的內(nèi)部地址單元時,指令中使用的尋址方式是不同的,也即尋址方式?jīng)Q定是訪問高128字節(jié)RAM 還是訪問特殊功能寄存器。如果指令是直接尋址方式則為訪問特殊功能寄存器。
六、原理圖設(shè)計
總原理圖:
屏幕截圖 2025-05-18 222413.png (88.22 KB, 下載次數(shù): 0)
下載附件
2025-5-18 22:47 上傳
1.在Proteus 中繪制單片機最小系統(tǒng),包括主控芯片、晶振電路和復(fù)位電路。
2. 添加4位共陽數(shù)碼管,段選A-DP利連接到P0口,P0口需要用排阻上拉,位選C0-C1利用標(biāo)號連接到P2.0-P2.1口。
七、參考程序(含擴展實驗,見附件)
八、實驗思考題
1、將存儲單元擴大到50,然后向RAM中連續(xù)寫入數(shù)據(jù),計算出這些數(shù)的累加和后顯示在數(shù)碼管上。
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit C0 = P2^0;
- sbit C1 = P2^1;
- code uchar discode[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- uchar idata ram_value = 68;
- void delay_ms(uint ms)
- {
- uint i, j;
- for(i = 0; i < ms; i++)
- for(j = 0; j < 120; j++);
- }
- void main()
- {
- uchar ten, one;
-
- ten = ram_value / 10;
- one = ram_value % 10;
- C0 = 0;
- C1 = 0;
- P0 = 0xFF;
- while(1)
- {
- P0 = 0xFF;
- C0 = 1;
- C1 = 0;
- P0 = discode[ten];
- delay_ms(2);
- P0 = 0xFF;
- C0 = 0;
- C1 = 1;
- P0 = discode[one];
- delay_ms(2);
- }
- }
復(fù)制代碼- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- uchar code seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
- void delay(uint t)
- {
- while(t--);
- }
- void main()
- {
- uchar idata buffer[50]; //RAM expand to 50
- uint sum = 0;
- uchar i, digits[4];
- for(i = 0; i <=50; i++)
- {
- buffer[i] = i;
- }
- for(i = 0; i <=50; i++)
- {
- sum += buffer[i];
- }
- digits[0] = sum / 1000;
- digits[1] = (sum / 100) % 10;
- digits[2] = (sum / 10) % 10;
- digits[3] = sum % 10;
-
- P2=0xaa;
-
- while(1)
- {
-
- P0=seg[digits[0]];
- P2=0x01;
- delay(5);
- P2=0x0;
- P0=0xff;
-
- P0=seg[digits[1]];
- P2=0x02;
- delay(5);
- P2=0x0;
- P0=0xff;
-
- P0=seg[digits[2]];
- P2=0x04;
- delay(5);
- P2=0x0;
- P0=0xff;
-
- P0=seg[digits[3]];
- P2=0x08;
- delay(5);
- P2=0x0;
- P0=0xff;
- }
- }
復(fù)制代碼
51hei.png (2.42 KB, 下載次數(shù): 0)
下載附件
2025-5-18 23:07 上傳
以上2個文件程序下載:
Proteus仿真:無
|
評分
-
查看全部評分
|