51微控制器的pc值怎麼算,51微控制器中如何進行相對定址?pc值怎麼計算?rel又怎麼給

時間 2021-09-06 09:14:32

1樓:鈺瀟

a=( 50h ),sp=( 50h ),(51h)=( 30h ),(52h)=(50h ),pc=( 5030h )

(a)=50h;

sp=50h(因為在程式中,sp減了兩次,後來又加了兩次,在程式最後ret有在返回的時候減了兩次,即地址出棧,故最終結果是50h。

(51h)=30h;

(52h)=50h;

因為ret指令返回時,出棧的結果是高地址=(52h)=50h;而低地址=(51h)=30h;故最終結果pc值是5030h;

擴充套件資料:

51微控制器功能特性

1、可以**63k程式空間,接近64k 的16位地址空間;

2、可以**64kxdata 空間,全部64k 的16位地址空間;

3、可以真實**全部32 條io腳;

4、完全相容keilc51 uv2 除錯環境,可以通過uv2 環境進行單步,斷點, 全速等操作;

5、可以使用c51語言或者asm組合語言進行除錯 ;

6、可以非常方便地進行所有變數觀察,包括滑鼠取值觀察,即滑鼠放在某 變數上就會立即顯示出它此的值;

7、可選 使用使用者晶振,支援0-40mhz晶振頻率;

8、片上帶有768位元組的xdata,您可以在**時選 使用他們,進行xdata 的**;

9、可以**雙dptr 指標;

10、可以**去除ale 訊號輸出. ;

11、自適應300-38400bps 的所有波特率通訊;

12、體積非常細小,非常方便插入到使用者板中.插入時緊貼使用者板,沒有連線電纜,這樣可以有效地減少執行中的干擾,避免**時出現莫名其妙的故障;

13、**插針採用優質鍍金插針,可以有效地防止日久生鏽,選擇優質園腳ic插座,保護**插針,同時不會損壞目標板上的插座. ;

14、**時監控和使用者**分離,不可能產生不能**的軟故障;

15、rs-232介面不計成本採用max202積體電路,序列通訊穩定可靠,絕非一般三極體的簡易電路可比。

2樓:匿名使用者

用偉福軟體試了試,執行到ret那步跑飛到disassembly,但是算出答案,a=80h,sp=05h,51h=ffh,52h=ffh(都沒變,納悶),pc=4000h

本人才疏學淺,錯了別見笑。

3樓:匿名使用者

你51軟體器**一下,就知道結果了....我能做的也是這樣,只有寫**的人才去看**,測試的人只用最簡單的方法驗證!

pc值是當前**的執行位置,直接讀pc暫存器就是了

4樓:強子

50h 50h 30h 50h 5030h

5樓:匿名使用者

a=( 50h ),sp=( 50h ),(51h)=( 30h ),(52h)=(50h ),pc=( 5030h )。

6樓:卡卡翔丶

a=50h,sp=50h,51h=30h,52h=50h,pc=5030h

7樓:匿名使用者

那你得通過串列埠通訊,再將串列埠讀出的資料儲存,這要編pc機的應用程式的,只給你一個思路

8樓:匿名使用者

記住:pc總是指向下一條指令的首地址的。但是在返回的時候得看堆疊中的數了。

上面程式執行完之後:

(a)=50h;

sp=50h(因為在程式中,sp減了兩次,後來又加了兩次,在程式最後ret有在返回的時候減了兩次,即地址出棧,故最終結果是50h。

(51h)=30h;

(52h)=50h;

pc=5030h;(因為ret指令返回時,出棧的結果是:

高地址=(52h)=50h;而低地址=(51h)=30h;故最終結果是5030h;

51微控制器中如何進行相對定址?pc值怎麼計算?rel又怎麼給

9樓:

什麼叫相對,是當給出一個地址後,計算偏移量,而且還跟語句所佔位元組數有關,好好查詢組合語言的指令表,你能找到的

10樓:清風迎明月

相對定址:來先找到當前指令下自

一條指令bai的pc值,再加上相對偏du移量rel,這是對機器碼zhi而言。

但在彙編指令dao中,rel就是目的地址,執行當前指令時,直接跳到rel代表的目的地址上去。

別看好多教材裡胡扯,什麼reli偏移量什麼的,教材作者有本事把rel給成偏移量試試,看看目的地址是不是pc值加他所給定的rel值

怎樣用51微控制器做計算器啊?

11樓:浮生梔

1、首先第一步就是要進行查詢元器件並放入到原理圖中,如下圖所示。

2、接著就是要進行原理圖連線根據網路標籤的方式即可。

3、然後就是要進行編寫程式,

程式源**

#include #include

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar operand1[9], operand2[9];

uchar operator;

void delay(uint);

uchar keyscan();

void disp(void);

void buf(uint value);

4、最後一步就是進行驗證正確後編譯程式在protues中載入hex觀察**結果是否正確,如下圖所示。

擴充套件資料

電腦**:

微控制器有了開發系統,隨著微控制器的發發系統也在不斷髮展。 keil是一種先進的微控制器整合開發系統。

它代表著組合語言微控制器開發系統的最新發展,首創多項便利技術,將開發的程式設計/**/除錯/寫入/加密等所有過程一氣呵成,中間不須任何編譯或彙編。

功能特性:

1、可以**63k程式空間,接近64k 的16位地址空間;

2、可以**64kxdata 空間,全部64k 的16位地址空間;

3、可以真實**全部32 條io腳;

4,完全相容keilc51 uv2 除錯環境,可以通過uv2 環境進行單步,斷點, 全速等操作;

5、可以使用c51語言或者asm組合語言進行除錯 ;

6、可以非常方便地進行所有變數觀察,包括滑鼠取值觀察,即滑鼠放在某 變數上就會立即顯示出它此的值;

7、可選 使用使用者晶振,支援0-40mhz晶振頻率;

8、片上帶有768位元組的xdata,您可以在**時選 使用他們,進行xdata 的**;

9、可以**雙dptr 指標;

10、可以**去除ale 訊號輸出. ;

11、自適應300-38400bps 的所有波特率通訊;

12、體積非常細小,非常方便插入到使用者板中.插入時緊貼使用者板,沒有連線電纜,這樣可以有效地減少執行中的干擾,避免**時出現莫名其妙的故障;

13、**插針採用優質鍍金插針,可以有效地防止日久生鏽,選擇優質園腳ic插座,保護**插針,同時不會損壞目標板上的插座. ;

14,**時監控和使用者**分離,不可能產生不能**的軟故障;

15、rs-232介面不計成本採用max202積體電路,序列通訊穩定可靠,絕非一般三極體的簡易電路可比。

功能限制:

**器佔用微控制器串列埠及定時器2,與keil c(pc)通訊,故不支援串列埠及定時器2 的**功能。全速執行時微控制器串列埠及定時器2 可供使用者使用。

使用方法:

1、將**器插入需**的使用者板的cpu插座中,**器由使用者板供電;

2、將**器的序列電纜和pc機接好,開啟使用者板電源;

12樓:心脆任憔悴

1、硬體**圖

硬體部分比較簡單,當鍵盤按鍵按下時它的那一行、那一列的埠為低電平。因此,只要掃描行、列埠是否都為低電平就可以確定是哪個鍵被按下。

2、主程式流程圖

程式的主要思想是:將按鍵抽象為字元,然後就是對字元的處理。將運算元分別轉化為字串儲存,操作符儲存為字元形式。

然後呼叫compute()函式進行計算並返回結果。具體程式及看註釋還有流程圖。

3、altium designer畫的pcb圖

4、程式源**

#include #include

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar operand1[9], operand2[9];

uchar operator;

void delay(uint);

uchar keyscan();

void disp(void);

void buf(uint value);

uint compute(uint va1,uint va2,uchar optor);

uchar code table = ;

uchar dbuf[8] = ;

void delay(uint z)

uchar keyscan()

while((p1 & 0xf0) != 0xf0) ;}

}p1 = 0xfd;

while((p1 & 0xf0) != 0xf0)

while((p1 & 0xf0) != 0xf0);}

}p1 = 0xfb;

while((p1 & 0xf0) != 0xf0)

while((p1 & 0xf0) != 0xf0);}

}p1 = 0xf7;

while((p1 & 0xf0) != 0xf0)

while((p1 & 0xf0) != 0xf0);}

}return skey;

}void main()

while(1)

}else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')

else if(ckey == '=')}}

else if(ckey == '$')

}disp();}}

uint compute(uint va1,uint va2,uchar optor)

return value;

}void buf(uint val)

else

for(i = 7; val > 0; i--)

for( ; i > 0; i--)

dbuf[i] = 10;

}void disp(void)}

13樓:該使用者未註冊

|程式和電路圖如下:

#include

#define  din p1_0

#define  clk p1_2

#define  load p1_1

unsigned char key_h,key_l,key_code;

unsigned char ads,i,j,m,n;

unsigned char n_bit=0;

unsigned char flag=0;

unsigned char key_num[16]=;

unsigned char data1[6]=;

unsigned char data2[6]=;

unsigned int result;

void delay(unsigned int n)void send(unsigned char addr,unsigned char dat)

i+=8;

}load=1;

}void clear()

void calc()

clear();

for(n=6;n>1;n--)

flag=0;

while((p2&0xf0)!=0xf0);

}void keyscan()   //鍵盤掃描程式key_code=key_l*4+key_h;

switch(key_code)

send(n_bit--,key_num[key_code]);

if(!flag)

data1[n_bit]=key_num[key_code];

else

關於51微控制器的中斷,關於51微控制器的中斷。

廣東人讀書好 中斷的概念 cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷髮生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 二 中斷源 在51微控制器中有5箇中斷...

51微控制器外部中斷實驗程式,51微控制器外部中斷實驗程式

做51微控制器外部中斷實驗,應該有主程式 中斷服務程式。樓主所說這些的亮滅,那些的主程式的?那些是中斷程式的?請問你這個觸發中斷是一個按鍵?你觸發的方式是長時間按下還是瞬間按下?我覺得你應該是長時間按下的。回到正題,你這個中斷服務函式裡只有一句 那麼中斷服務函式執行的速度會很快的,所以如果你只按了一...

51微控制器外部中斷的觸發方式,51微控制器怎麼設定外部中斷?

捲毛 51微控制器的外部中斷有兩種觸發方式可選 電平觸發和邊沿觸發。選擇電平觸發時,微控制器在每個機器週期檢查中斷源口線,檢測到低電平,即置位中斷請求標誌,向cpu請求中斷。選擇邊沿觸發方式時,微控制器在上一個機器週期檢測到中斷源口線為高電平,下一個機器週期檢測到低電平,即置位中斷標誌,請求中斷。這...