導航:首頁 > 操作系統 > 8051單片機怎麼編碼

8051單片機怎麼編碼

發布時間:2022-09-23 00:34:26

A. 8051單片機的編址方式是什麼

MCS-51單片機的存儲器編址方式採用與工作寄存器、I/O埠鎖存器統一編址的方式。程序存儲器和數據存儲器空間好似相互獨立的,各自有自己的定址系統和控制信號,物理結構也不同。程序存儲器為只讀存儲器(ROM),數據存儲器為隨機存儲器(RAM)。
1、程序存儲器常用來存放程序和表格常數。程序存儲器以程序計數器PC作為地址指針,通過16位地址匯流排,可定址的地址空間為64K,片內、片外統一編址。在程序存儲器中有些特殊的單元在使用時應加以注意。其中一組特殊的單元是0000H~0002H單元,在系統復位之後,PC為0000H,單片機從0000H開始執行程序,該單元是系統執行陳故鄉的起始地址,通常在該地址中存放一條跳轉指令,而用戶程序從跳轉地址開始存放程序。另外一組特殊單元為0003H~0021AH,這40個單元被均勻的分為5份,其定義如下:
0003H~000AH:外部中斷0的中斷地址區
000BH~0012H:定時器/計數器0的中斷地址區
0013H~001AH:外部中斷1的中斷地址區
001BH~0022H:定時器/計數器1的中斷地址區
0023H~002AH:串列中斷地址區
可見以上40個單元是專門用於存放中斷處理程序的地址單元,中斷響應後,按中斷的類型自動轉到各自的終端區去執行程序。從上面看出,每個終端服務程序只有8個位元組單元,用8個位元組來存放一個中斷服務程序顯然是不可能的。通常情況下好似在中斷響應的地址區存放一條無條件轉移指令,指向程序存儲器的真正存放終端服務程序的空間去執行。
2、MCS-51單片機的數據存儲器無論在物理上或者邏輯上都是分為兩個地址空間,一個為內部數據存儲器,訪問內部數據存儲器用MOV指令;另外一個為外部數據存儲器,訪問外部數據存儲器用MOVX指令。8051內部有128個8位數據存儲單元和128個專用寄存器單元,這些單元是統一編址的,專用寄存器只能用於存放控制指令數據。所以,用戶能使用的RAM只有00H~7FH單元組成的128位元組地址空間,可以存放讀寫的數據或者運算的中間結果;80H~FFH單元組成的高128位元組地址空間的特殊功能寄存器(SFR)區,只能訪問,而不能用於存放用戶數據。片內RAM的低128位元組還可以分成工作寄存器區,可位定址區和一般RAM去3個區域。

B. 8051單片機地址總綱

你可以參考這篇文章

MCS-51具有64kB程序存儲器定址空間,它是用於存放用戶程序、數據和表格等信息。對於內部無ROM的8031單片機,它的程序存儲器必須外接,空間地址為64kB,此時單片機的端必須接地。強制CPU從外部程序存儲器讀取程序。對於內部有ROM的8051等單片機,正常運行時,則需接高電平,使CPU先從內部的程序存儲中讀取程序,當PC值超過內部ROM的容量時,才會轉向外部的程序存儲器讀取程序。

8051片內有4kB的程序存儲單元,其地址為0000H—0FFFH,單片機啟動復位後,程序計數器的內容為0000H,所以系統將從0000H單元開始執行程序。但在程序存儲中有些特殊的單元,這在使用中應加以注意:

其中一組特殊是0000H—0002H單元,系統復位後,PC為0000H,單片機從0000H單元開始執行程序,如果程序不是從0000H單元開始,則應在這三個單元中存放一條無條件轉移指令,讓CPU直接去執行用戶指定的程序。

另一組特殊單元是0003H—002AH,這40個單元各有用途,它們被均勻地分為五段,它們的定義如下:

0003H—000AH 外部中斷0中斷地址區。

000BH—0012H 定時/計數器0中斷地址區。

0013H—001AH 外部中斷1中斷地址區。

001BH—0022H 定時/計數器1中斷地址區。

0023H—002AH 串列中斷地址區。

可見以上的40個單元是專門用於存放中斷處理程序的地址單元,中斷響應後,按中斷的類型,自動轉到各自的中斷區去執行程序。因此以上地址單元不能用於存放程序的其他內容,只能存放中斷服務程序。但是通常情況下,每段只有8個地址單元是不能存下完整的中斷服務程序的,因而一般也在中斷響應的地址區安放一條無條件轉移指令,指向程序存儲器的其它真正存放中斷服務程序的空間去執行,這樣中斷響應後,CPU讀到這條轉移指令,便轉向其他地方去繼續執行中斷服務程序。

數據存儲器
數據存儲器也稱為隨機存取數據存儲器。MCS-51單片機的數據存儲器在物理上和邏輯上都分為兩個地址空間,一個是內部數據存儲區和一個外部數據存儲區。MCS-51內部RAM有128或256個位元組的用戶數據存儲(不同的型號有分別),它們是用於存放執行的中間結果和過程數據的。MCS-51的數據存儲器均可讀寫,部分單元還可以位定址。
8051內部RAM共有256個單元,這256個單元共分為兩部分。其一是地址從00H—7FH單元(共128個位元組)為用戶數據RAM。從80H—FFH地址單元(也是128個位元組)為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結構分布。

在00H—1FH共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以R0—R7來命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為R0—R7,那麼在程序中怎麼區分和使用它們呢?聰明的INTEL工程師們又安排了一個寄存器——程序狀態字寄存器(PSW)來管理它們,CPU只要定義這個寄存的PSW的第3和第4位(RS0和RS1),即可選中這四組通用寄存器。對應的編碼關系如圖2所示。

內部RAM的20H—2FH單元為位定址區,既可作為一般單元用位元組定址,也可對它們的位進行定址。位定址區共有16個位元組,128個位,位地址為00H—7FH。位地址分配如表1所示,CPU能直接定址這些位,執行例如置「1」、清「0」、求「反」、轉移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲空間指的就是這些為定址區。

表1 RAM位定址區地址表
單元地址 MSB 位地址 LSB
2FH 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H
2EH 77H 76H 75H 74H 73H 72H 71H 70H
2DH 6FH 6EH 6DH 6CH 6BH 6AH 69H 68H
2CH 67H 66H 65H 64H 63H 62H 61H 60H
2BH 5FH 5EH 5DH 5CH 5BH 5AH 59H 58H
2AH 57H 56H 55H 54H 53H 52H 51H 50H
29H 4FH 4EH 4DH 4CH 4BH 4AH 49H 48H
28H 47H 46H 45H 44H 43H 42H 41H 40H
27H 3FH 3EH 3DH 3CH 3BH 3AH 39H 38H
26H 37H 36H 35H 34H 33H 32H 31H 30H
25H 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H
24H 27H 26H 25H 24H 23H 22H 21H 20H
23H 1FH 1EH 1DH 1CH 1BH 1AH 19H 18H
22H 17H 16H 15H 14H 13H 12H 11H 10H
21H 0FH 0EH 0DH 0CH 0BH 0AH 09H 08H
20H 07H 06H 05H 04H 03H 02H 01H 00H

--------------------------------------------------------------------------------
特殊功能寄存器
特殊功能寄存器(SFR)也稱為專用寄存器,特殊功能寄存器反映了MCS-51單片機的運行狀態。很多功能也通過特殊功能寄存器來定義和控製程序的執行。

MCS-51有21個特殊功能寄存器,它們被離散地分布在內部RAM的80H—FFH地址中,這些寄存的功能已作了專門的規定,用戶不能修改其結構。表2是特殊功能寄存器分布一覽表,我們對其主要的寄存器作一些簡單的介紹。

程序計數器PC(program Counter)
程序計數器在物理上是獨立的,它不屬於特殊內部數據存儲器塊中。PC是一個16位的計數器,用於存放一條要執行的指令地址,定址范圍為64kB,PC有自動加1功能,即完成了一條指令的執行後,其內容自動加1。PC本身並沒有地址,因而不可定址,用戶無法對它進行讀寫,但是可以通過轉移、調用、返回等指令改變其內容,以控製程序按我們的要求去執行。

累加器ACC(Accumulator)
累加器A是一個最常用的專用寄存器,大部分單操作指令的一個操作數取自累加器,很多雙操作數指令中的一個操作數也取自累加器。加、減、乘、除法運算的指令,運算結果都存放於累加器A或AB累加器對中。大部分的數據操作都會通過累加器A進行,它形象於一個交通要道,在程序比較復雜的運算中,累加器成了制約軟體效率的「瓶頸」,它的功能較多,地位也十分重要。以至於後來發展的單片機,有的集成了多累加器結構,或者使用寄存器陣列來代替累加器,即賦予更多寄存器以累加器的功能,目的是解決累加器的「交通堵塞」問題。提高單片機的軟體效率。

表2 特殊功能寄存器
標識符號 地址 寄存器名稱
ACC 0E0H 累加器
B 0F0H B寄存器
PSW 0D0H 程序狀態字
SP 81H 堆棧指針
DPTR 82H、83H 數據指針(16位)含DPL和DPH
IE 0A8H 中斷允許控制寄存器
IP 0B8H 中斷優先控制寄存器
P0 80H I/O口0寄存器
P1 90H I/O口1寄存器
P2 0A0H I/O口2寄存器
P3 0B0H I/O口3寄存器
PCON 87H 電源控制及波特率選擇寄存器
SCON 98H 串列口控制寄存器
SBUF 99H 串列數據緩沖寄存器
TCON 88H 定時控制寄存器
TMOD 89H 定時器方式選擇寄存器
TL0 8AH 定時器0低8位
TH0 8CH 定時器0高8位
TL1 8BH 定時器1低8位
TH1 8DH 定時器1高8位

C. 求此8051單片機程序代碼怎麼編寫

是一種形式多樣,筆墨靈活的文體

D. 8051單片機代碼

你可以先去網上找找關於流水燈的程序,這兩個挺相似的,稍稍改動一下就行了

E. 簡述8051單片機定時計數器編程的基本步驟

  1. 設置定時計數器的工作方式。

  2. 給定時器賦初始值:THx 和TLx;

  3. 允許定時器中斷;

  4. 允許全局中斷;

  5. 啟動定製器;

  6. 中斷函數編寫(這個是目的,定時計數最終要干什麼?)

F. 單片機數碼管顯示的數值編碼

8位數據匯流排,16位地址匯流排的CPU;具有布爾處理能力和位處理能力;採用哈佛結構,程序存儲器與數據存儲器地址空間各自獨立,便於程序設計;相同地址的64KB程序存儲器和64KB數據存儲器;

0-8KB片內程序存儲器(8031無,8051有4KB,8052有8KB,89C55有20KB);128位元組片內數據存儲器(8051有256位元組);

32根雙向並可以按位定址的I/O線;兩個16位定時/計數器(8052有3個);一個全雙工的串列I/O介面;多個中斷源的中斷結構,具有兩個中斷優先順序;片內時鍾振盪器。


(6)8051單片機怎麼編碼擴展閱讀:

單片機工作的三個條件分別是電源、時鍾晶振、復位。當單片機不能正常工作時,我們首先就要檢查這三個條件,用電壓表或者萬用表檢測他的電源和接地腳,檢測兩個引腳之間的電壓是不是5V左右;對於時鍾晶體振盪有沒有正常工作。

最好用示波器進行檢測,看能否檢測到相應頻率的正弦波脈沖;復位檢測比較簡單,單片機的復位電平一般是高電平復位,單片機在接通電源的時候一般復位引腳上會出現5V左右的高電平,另外在按下復位按鍵時,復位引腳上也會出現高電平,用一般的電壓表或者萬用表都可以進行檢測。

G. 單片機8051怎麼編程

1、下個keil3軟體,新建工程之後,新建文件,寫文件名的時候,寫.asm後綴的就是寫匯編語言,寫.c後綴的就是寫C語言。
2、至於怎麼編程,單片機編程,重點就是掌握單片機有哪些I/o口,哪些寄存器,哪些特殊寄存器。
3、推薦看一下視頻《十天學會單片機》,搜一下都有的,對初學者非常有幫助。
4、另外補充一點,學單片機,光看書一年都學不會,邊看邊學,一個月就能入門了,所以最好弄一塊板子,在上面跑跑程序。

H. 1. C51單片機中對有符號數有三種編碼方式,分別是哪些現單片機中有存情char類

C51單片機中對有符號數有三種編碼方式,分別是哪些?
--char;
--int;
--float。
現單片機中有存情char類

I. 8051單片機編程

C語言程序員如下:
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
TR0=1;
while(1)
{ if(TF0==1)
{
TF0=0;
P2^0=!P2^0;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
}
}

J. 用C語言編寫8051單片機程序

/********************************
/* MCU: AT89S52
/* MCU-crystal: 12M
/* Version: 01
/* Last Updata: 2009-2-21
/* Author:
/* Description:
/* 使用定時器0,定時中斷2ms一次對數碼管顯示掃描;
/* 三個位管要以掃描方式顯示,使用共陽管,計數速度為1S;
/* 段A-H接到P0.1....7,位選為 P1.0,1,2;
/* 流水也以計數方式從200到250在P2口顯示,低電平有效;
/****************************************************/
#include <reg52.h>
unsigned char code num_disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};//共陽數字字形0到9
unsigned char code bit_sel[]={0xfb,0xfd,0xfe};//低電平有效數字個十百位選擇
unsigned char buf[3]={0,0,2};//計算中的個十百位暫時存放處
unsigned char one,ten,second;//個十位變數和流水燈顯示3秒的時間變數
unsigned char rate;//掃描速度,調整以適應顯示效果
unsigned char stop=0, flag=1,flag1=0;//閃爍3秒的標志位,用於主函數對中斷的關斷參數傳遞
unsigned int t,tt;//2ms變數
unsigned char rate;//與變數t同步,輔助賦值變

/**********主函數**********/
main(void)
{
TMOD=0X01;
TH0=0xf8;//定時2ms
TL0=0x30;
ET0=1;
EA=1;
TR0=1;
while(1)
{ if(stop==1)//判斷stop信號,為1後便關閉定時器
{ TR0=0;
ET0=0;
EA=0;
}
}
}
/*******************中斷*******************/
void timer0() interrupt 1
{
TH0=0xf8;//重新賦值定時2ms
TL0=0x30;
if(flag==0)//定義用於判斷計數是否到了250,若到了則不再計數,轉向else執行流水燈閃爍任務
{
t++;
if(t==500)
{ t=0;
one++;
P2=200+ten*10+one; //在P2口的流水等,也是從200開始計數。
if(one==10)
{ one=0;
ten++;
if(ten==5)
{ flag=1;//轉向執行閃爍任務
}
}
}
}
else//flag已經==1;轉向else執行流水燈閃爍任務
{ tt++;
if(tt==500)
{ tt=0;
second++;
P2=~P2;//流水燈全部以1S速度閃爍
if(second==3)stop=1;//判斷3秒時間到,關閉中斷,停止閃爍,數碼管熄滅
}
}
rate++;
P0=0XFF;//消隱
if(rate==3)rate=0;
P0=num_disp[buf[rate]];
P1=bit_sel[rate];
buf[0]=one;
buf[1]=ten;
//因為百位沒有變,所以不用賦值

}

閱讀全文

與8051單片機怎麼編碼相關的資料

熱點內容
ai文件pdf 瀏覽:907
騰訊雲伺服器掛載混合雲 瀏覽:758
智能小車用什麼單片機 瀏覽:463
java怎麼給窗口關閉 瀏覽:940
列舉51單片機的定址方式 瀏覽:706
剪輯app怎麼寫長篇文字 瀏覽:400
app專屬流量過月租怎麼不更新 瀏覽:654
王者程序員都有誰 瀏覽:76
給牛換腳掌解壓 瀏覽:387
圍棋有多少種演算法 瀏覽:602
unity資源包在哪個文件夾 瀏覽:704
阿里雲伺服器遠程鏈接不成功 瀏覽:482
文件系統pdf 瀏覽:766
原神安卓區服什麼意思 瀏覽:37
貝殼app怎麼線上發布 瀏覽:159
如何挑選安卓系統機頂盒 瀏覽:53
安卓快充使用有什麼注意事項 瀏覽:909
黑馬程序員的雲計算網課 瀏覽:947
endnotestyle文件夾怎麼導入 瀏覽:460
講解少兒編程演講會開頭 瀏覽:425