❶ 51單片機的 pc值怎麼算
A=( 50h ),SP=( 50h ),(51H)=( 30h ),(52H)=(50h ),PC=( 5030h )
pc總是指向下一條指令的首地址的。但是在返回的時候得看堆棧中的數了。上面程序執行完之後:
(A)=50H;
sp=50H(因為在程序中,sp減了兩次,後來又加了兩次,在程序最後ret有在返回的時候減了兩次,即地址出棧,故最終結果是50h。
(51h)=30h;
(52h)=50h;
因為ret指令返回時,出棧的結果是高地址=(52h)=50h;而低地址=(51h)=30h;故最終結果pc值是5030h;
(1)單片機怎麼算變數擴展閱讀:
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集成電路,串列通訊穩定可靠,絕非一般三極體的簡易電路可比。
❷ 求問如何在單片機定時器裡面設置變數
TL0=(65536-t)%256; //t微秒之後中斷
這程序,這演算法,很費時間的。
你可以跟蹤一下,這一行,用了多少微秒。
延時的時間,應該由主函數來定。
不應該在中斷函數中,現場,再計算。
高電平多少時間、低電平多少時間,
算好後,分別存在兩個變數中,並且分離開高低八位。
中斷時,僅僅傳送一下,即可。
❸ 單片機變數定義類型
C語言中,變數一般有兩種屬性,分別是:存儲類別、數據類型。
例如定義一個變數:static unsigned char var = 0; 上述語句中,static(靜態的)為變數的存儲類別,unsigned char(無符號字元型)為變數的數據類型,var為變數名,初始化值為0。
下面給你說明幾點。
存儲類別:即變數在代碼運行期間的存儲方式。c語言提供了4種,分別是:auto(自動的)、static(靜態的)、extern(外部的)、register(寄存器的)。
默認情況下,如果不加存儲類別,則該變數是auto類的,該關鍵字可以省略,其它三個不能省。static的用法是,定義一個局部變數,該變數只進行一次初始化,在程序運行期間一直佔用著內存,每次調用完畢都保持本次調用完後得到的值(而auto調用完一次即釋放內存,下次調用用從新進行初始化)。extern:一個變數被定義成全局變數,加上該關鍵字,意思是提醒編譯器,該變數是在別的C文件中(即你想再一個C文件中調用另外一個C文件的變數,需用該關鍵字進行引入)。register:定義一個變數為該存儲類型,建議編譯器將該變數存放在CUP內部寄存器中,以便該變數頻繁調用而提高代碼運行速度。注意,它是建議型的,一般用在循環次數多的地方,因為變數一般存放在內存中,每次CUP訪問它都得跑到內存去提取,次數多了,影響運行速度。放在內部寄存器就快多了(當然放不放我們不知道,只是建議編譯器這么做),這種變數也是用完就釋放。
數據類型:C語言提供了三種基本數據類型:char型 int型 float型。
默認情況下,char/int/float是指有符號的,即前面都省略了signed關鍵字,如果需要定義成無符號型的,需在前面加上不可省略的unsigned關鍵字。char佔一個位元組,int佔2個位元組(在有的環境下是4個位元組),float佔4個。表示的數據范圍也比較明確,char一個位元組8位,共256種狀態,有符號的最高位表示符號,0為正,1為負,其餘7位表示數字位,2的7次方。int型16位 的,一樣。float型的數據必須要有小數點,一般float能表示6~7位有效數字。上述的數據類型中,如果范圍還不夠大,還可以定義成long型,即長整型,佔4個位元組,而浮點型可以定義成double型,可以表示16~17為小數,當然,它也只佔四個位元組。
❹ 單片機char 100等於int 多少,是怎麼計算的
1、可以轉換,強制轉換就行。例如:
int a=100;
unsigned char * c = (unsigned char *)a;
2、強制類型轉換
當操作數的類型不同,而且不屬於基本數據類型時,經常需要強制類型轉換,將操作數轉化為所需要的類型。強制類型轉換具有兩種形式,稱為顯式強制轉換和隱式強制類型轉換。
顯式強制類型轉換
顯式強制類型轉換需要使用強制類型轉換運算符,格式如下:
type(<expression>)
或
(type)<expression>
其中,type為類型描述符,如int,float等。<expression>為表達式。經強制類型轉換運算符運算後,返回一個具有type類型的數值,這種強制類型轉換操作並不改變操作數本身,運算後操作數本身未改變,例如:
int nVar=0xab65;
char cChar=char (nVar);
上述強制類型轉換的結果是將整型值0xab65的高端兩個位元組刪掉,將低端兩個位元組的內容作為char型數值賦值給變數cChar,而經過類型轉換後nVar的值並未改變。
❺ 單片機中的邏輯運算怎麼算的
在邏輯代數中,有與、或、非三種基本邏輯運算。表示邏輯運算的方法有多種,如語句描述、邏輯代數式、真值表、卡諾圖等。邏輯運算通常用來測試真假值。最常見到的邏輯運算就是循環的處理,用來判斷是否該離開循環或繼續執行循環內的指令。
累加器A清0指令。
CLR A;單片機軟體指令功能是將累加器A中的內容清0。影響單片機標志寄存器PSW中的奇偶標志位P。
累加器A取反指令。
CPL A;單片機軟體指令功能是將累加器A中的內容全部取反,結果送回A中。影響單片機標志寄存器PSW中的奇偶標志位P。
常用於單片機某個存儲器單元或某個存儲器區域中帶符號數的求補。
RL A;左循環移位指令:
單片機軟體指令功能是將累加器A的8位二進制數向左移動1位,累加器A中最左邊1位(即最高位A.7)移至最右邊1位(即最低位A.0)。不影響單片機標志寄存器PSW中的標志位。
RR A;右循環移位指令:
單片機軟體指令功能是將累加器A的8位二進制數向右移動1位,累加器A中最右邊1位(即最低位A.0)移至最左邊1位(即最高位A.7)。不影響單片機標志寄存器PSW中的標志位。
RLC A;帶進位左循環移位指令:
單片機軟體指令功能是將累加器A的8位二進制數和進位CY向左移動1位,累加器A中最左邊1位(即最高位A.7)移至CY,CY原內容移至累加器A的最右邊1位(即最低位A.0)。影響單片機標志寄存器PSW中的進位標志位CY。
RRC A;帶進位右循環移位指令:
單片機軟體指令功能是將累加器A的8位二進制數和進位CY向右移動1位,累加器A中最右邊1位(即最低位A.0)移至CY,CY原內容移至累加器A的最左邊1位(即最高位A.7)。影響單片機標志寄存器PSW中的進位標志位CY。
(5)單片機怎麼算變數擴展閱讀:
邏輯運算組成部分
Boolean(布爾運算)的參數面板可分成三部分。
布爾運算練習模型:骰子
Pick Boolean(拾取布爾運算對象)卷展欄
該卷展欄用來拾取運算對象B,如圖所示。
在布爾運算中,兩個原始對象被稱為運算對象,一個叫運算對象A,另一個叫運算對象B。在建立布爾運算前,首先要在視圖中選擇一個原始對象,這時Boolean按鈕才可以使用。進入布爾運算命令面板後,單擊Pick Operand B命令按鈕來選擇第二個運算對象。
· Pick Operand B(拾取運算對象B):單擊該按鈕,在場景中選擇另一個物體完成布爾合成。其下的4個選項用來控制運算對象B的屬性,它們要在拾取運算對象B之前確定。
· Reference(參考):將原始對象的參考復製品作為運算對象B,以後改變原始對象,也會同時改變布爾物體中的運算對象B,但改變運算對象B,不會改變原始對象。
· Copy(復制):將原始對象復制一個作為運算對象B,而不改變原始對象。當原始對象還要作其他之用時選用該方式。
· Move(移動):將原始對象直接作為運算對象B,它本身將不再存在。當原始對象無其他用途時選該用方式。該方式為默認方式。
· Instance(關聯):將原始對象的關聯復製品作為運算對象B,以後對兩者中之一進行修改時都會同時影響另一個。
Parameters(參數)卷展欄
該卷展欄參數可分為三個區域,如圖所示。
Operands(操作對象)選項組
該組參數用來顯示所有的運算對象的名稱,並可對它們作相關的操作。
Operands List(操作對象列表):該列表框中列出所有的運算對象,供編輯操作時選擇使用。
Name(名稱):顯示列表框中選中的操作對象的名稱。可對其進行編輯。
Extract Operand(提取運算對象):它將當前指定的運算對象重新提取到場景中,作為一個新的可用對象,包括Instance(關聯)和Copy(拷貝)兩種屬性。這樣進入了布爾運算的物體仍可以被釋放到場景中。只有從其上方的列表框中選擇一個操作對象後才能激活該按鈕。
❻ 51單片機變數 51的單片機變數是怎麼個定義法。全局變數,局部變數都放在什麼存儲器里的
不能這樣定義,這樣定義是錯的。你這個是賦值,不是定義在0x22單元格里。
unsigned char bdata SS _at_ 0x22;
只有在Keil編譯環境下才可以這樣使用。還有,這種語法不適合用C語言,我說的是不適合,不是不能用。C語言裡面的指針就是針對這個的,不建議使用 _at_ 進行變數在RAM中固定,這樣對程序編譯優化時,帶來很多麻煩,也得不到充分的優化。
其實用C語言指針的方法是可行的。
bdata區雖然有自己獨立的位地址,但你用的是char型 ,是一個位元組的,所以你說的0x22隻是bdata區的位元組地址,而不是位地址,那麽用C語言的方式實現 就是這樣:
unsigned char *p;
p=0x22;
*p=50;
*p 表示指向0x22所在的單元格,就是將50賦值到0x22地址所指向的單元格里。
再從另一個角度講,如果你沒於傳參或改變實參的情況下,不建議使用這類,即使有,也不是很建議。因為單片機高手是不會用_at_這類關鍵字進行變數定位的。
有什麼疑問可以一起探討。
希望我的回答對你有幫助,謝謝。
❼ 單片機C語言數值大於5位數怎麼定義變數在線求,知道的兄弟姐妹幫幫忙啊!!!!急~~~~
一、如果你定義的數值小於65535,那麼定義一個整型(unsigned int)型的變數就可以了,unsigned int 佔用兩個位元組,其范圍是:0-65535
二、如果你定義的數值大於65535,那麼定義一個長整型變數(unsigned long int):
帶符號: long int
或
不帶符號:unsigned long int
如:unsigned long int a;
這個a現在在單片機中佔有4個位元組的空間,其范圍是:0 ~4294967295。
unsigned long int 無符號長整型數說明。簡寫為unsigned long,字長為4位元組共32位二進制數, 數的范圍是0 ~4294967295。
❽ 單片機中什麼叫全局變數,和局部變數
在子程序中聲明的變數叫局部變數,退出子程序時釋放內存
而在主程序中聲明的叫全局變數,在程序運行過程中一致有效。
為了節約內存,能用局部變數就不要用全局變數