|
一、實(shí)驗(yàn)?zāi)康?
1、 掌握RAM的讀寫方法;
2、 理解RAM和ROM的作用;
3、 熟練Proteus仿真軟件的使用;
4、 熟練單片機(jī)實(shí)驗(yàn)箱的實(shí)驗(yàn)操作。
二、實(shí)驗(yàn)預(yù)習(xí)要求
1、主要知識(shí)點(diǎn)概述:掌握單片機(jī)RAM的結(jié)構(gòu);學(xué)會(huì)RAM的讀寫。
2、實(shí)驗(yàn)效果說明:將存入的RAM的數(shù)值讀出用數(shù)碼管顯示出來。
三、實(shí)驗(yàn)設(shè)備和器件
一臺(tái)PC 機(jī)
一套 PROTEUS 仿真軟件
一臺(tái)實(shí)驗(yàn)箱
一臺(tái)ISP 下載器
一臺(tái)51單片機(jī)仿真器 (可選)
四、實(shí)驗(yàn)要求
1、在 DATA區(qū)定義一個(gè)字符變量并寫入數(shù)據(jù),把寫入RAM中的數(shù)據(jù)讀出來并用數(shù)碼管顯示出來。
五、實(shí)驗(yàn)原理
數(shù)據(jù)存儲(chǔ)器用于存放中間運(yùn)算結(jié)果、數(shù)據(jù)暫存和緩沖、標(biāo)識(shí)位等。80C51系列單片機(jī)的片內(nèi)數(shù)據(jù)存儲(chǔ)器除RAM塊外。還有特殊功能寄存器(SFR)塊。 通過查詢AT89C52的數(shù)據(jù)手冊(cè)可以知道:
AT89C52 有 256 個(gè)字節(jié)的內(nèi)部RAM,80H-FFH 高128 個(gè)字節(jié)與特殊功能寄存器(SFR)地址是重疊的,也就是高128字節(jié)的RAM 和特殊功能寄存器的地址是相同的,但物理上它們是分開的。
當(dāng)一條指令訪問7FH以上的內(nèi)部地址單元時(shí),指令中使用的尋址方式是不同的,也即尋址方式?jīng)Q定是訪問高128字節(jié)RAM 還是訪問特殊功能寄存器。如果指令是直接尋址方式則為訪問特殊功能寄存器。
六、原理圖設(shè)計(jì)
總原理圖:
屏幕截圖 2025-05-18 222413.png (88.22 KB, 下載次數(shù): 0)
下載附件
2025-5-18 22:47 上傳
1.在Proteus 中繪制單片機(jī)最小系統(tǒng),包括主控芯片、晶振電路和復(fù)位電路。
2. 添加4位共陽數(shù)碼管,段選A-DP利連接到P0口,P0口需要用排阻上拉,位選C0-C1利用標(biāo)號(hào)連接到P2.0-P2.1口。
七、參考程序(含擴(kuò)展實(shí)驗(yàn),見附件)
八、實(shí)驗(yàn)思考題
1、將存儲(chǔ)單元擴(kuò)大到50,然后向RAM中連續(xù)寫入數(shù)據(jù),計(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個(gè)文件程序下載:
Proteus仿真:無
|
評(píng)分
-
查看全部評(píng)分
|