導航:首頁 > 操作系統 > 51單片機做硬體

51單片機做硬體

發布時間:2025-07-22 02:57:47

① 51單片機的硬體結構

本文主要講解51單片機的硬體結構,而且只介紹重點知識。

由上圖可以看出,51單片機組成結構包括以下幾個部分:

時序信號:一類用於片內各功能的部件的控制,另一類用於片外存儲器或IO埠的控制(這個對用戶來說是比較重要的,在定時器部分會講)

通過修改PSW中的RS1、RS0兩位的狀態,就能任選一個工作寄存器區。這個特點提高了MCS-51現場保護和現場恢復的速度。對於提高CPU的工作效率和響應中斷的速度是很有利的。若在一個實際的應用系統中,不需要四組工作寄存器,那麼這個區域中多餘單元可以作為一般的數據緩沖器使用。

按存儲結構可分為二類:一類是哈佛結構,另一類是普林斯頓結構。
①哈佛結構
哈佛結構是程序存儲器地址空間與數據存儲器地址空間分開的單片機結構,如80C51單片機採用哈佛結構,所以80C51單片機的程序存儲器地址空間與數據存儲器地址空間是分開的,各有64K存儲空間。

②普林斯頓結構
普林斯頓結構是程序存儲器地址空間與數據存儲器地址空間合並的單片機結構,如MCS-96單片機採用普林斯頓結構,所以MCS-96單片機的程序存儲器地址空間與數據存儲器地址空間是合並的,共有64K存儲空間。

P3口還有第二功能,表如下:

若TI 或 RI 被置位,必須用軟體清零,硬體不能將其清零。

在不設置IP優先順序寄存器的話,單片機內部會按這個默認順序優先順序去響應各個中斷。

上電復位後除埠鎖存器,堆棧指針,SBUF外,單片機內部的復位電路向所有的特殊功能寄存器寫入00H。SBUF的值是不能確定的。
復位還使ALE和PSEN信號變為無效(高電平),而內部RAM不受影響。但由於VCC上電復位後,RAM內容不定,除非是退回低功耗方式的復位。

② 51單片機所必需的外部硬體電路

在構建51單片機最小系統時,我們只需考慮為單片機提供穩定電源。對於不同型號的51單片機,通常推薦的電源電壓為3.3V或5V。這意味著,只要能夠穩定提供所需電壓的電源電路,就能滿足51單片機的運行需求。

值得注意的是,過去的51單片機設計中,振盪電路、復位電路、看門狗電路以及外部擴展的RAM或ROM是必不可少的組成部分。這是因為早期的單片機晶元缺乏內部集成這些功能的能力,需要通過外部硬體來實現。

然而,隨著技術的進步,現代的51單片機型號已經集成了上述所有功能。這不僅簡化了硬體設計,還提高了單片機的整體性能和可靠性。因此,現在我們構建51單片機最小系統時,只需關注電源電路即可。

這種集成化的設計,不僅減少了外部硬體的復雜性,還降低了成本,使得51單片機在各種應用場景中更加易於使用。無論是工業控制、家電產品還是其他嵌入式系統,這種簡化後的硬體設計都能提供更穩定、更可靠的性能。

綜上所述,對於新一代51單片機,我們只需確保提供穩定的電源,而無需額外添加振盪、復位、看門狗、擴展RAM或ROM等外部硬體。這無疑提高了51單片機應用的便捷性和可靠性。

③ 怎樣用51單片機做計算器啊

1、硬體模擬圖

4、程序源代碼

#include <reg51.h>#include <intrins.h>

#include <ctype.h>

#include <stdlib.h>

#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[] = {0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90,0xff};

uchar dbuf[8] = {10,10,10,10,10,10,10,10};

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

uchar keyscan()

{

uchar skey;

P1 = 0xfe;

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

{

delay(3);

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

{

switch(P1)

{

case 0xee: skey = '7'; break;

case 0xde: skey = '8'; break;

case 0xbe: skey = '9'; break;

case 0x7e: skey = '/'; break;

default: skey = '#';

}

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

;

}

}

P1 = 0xfd;

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

{

delay(3);

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

{

switch(P1)

{

case 0xed: skey = '4'; break;

case 0xdd: skey = '5'; break;

case 0xbd: skey = '6'; break;

case 0x7d: skey = '*'; break;

default: skey = '#';

}

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

;

}

}

P1 = 0xfb;

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

{

delay(3);

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

{

switch(P1)

{

case 0xeb: skey = '1'; break;

case 0xdb: skey = '2'; break;

case 0xbb: skey = '3'; break;

case 0x7b: skey = '-'; break;

default: skey = '#';

}

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

;

}

}

P1 = 0xf7;

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

{

delay(3);

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

{

switch(P1)

{

case 0xe7: skey = '$'; break;

case 0xd7: skey = '0'; break;

case 0xb7: skey = '='; break;

case 0x77: skey = '+'; break;

default: skey = '#';

}

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

;

}

}

return skey;

}

void main()

{

uint value1, value2, value;

uchar ckey, cut1 = 0, cut2 = 0;

uchar operator;

uchar i, bool = 0;

init:

buf(0);

disp();

value = 0;

cut1 = cut2 = 0;

bool = 0;

for(i = 0;i < 9;i++)

{

operand1[i] = '';

operand2[i] = '';

}

while(1)

{

ckey = keyscan();

if(ckey != '#')

{

if(isdigit(ckey))

{

switch(bool)

{

case 0:

operand1[cut1] = ckey;

operand1[cut1+1] = '';

value1 = atoi(operand1);

cut1++;

buf(value1);

disp();

break;

case 1:

operand2[cut2] = ckey;

operand2[cut2+1] = '';

value2 = atoi(operand2);

cut2++;

buf(value2);

disp();

break;

default: break;

}

}

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

{

bool = 1;

operator = ckey;

buf(0);

dbuf[7] = 10;

disp();

}

else if(ckey == '=')

{

value = compute(value1,value2,operator);

buf(value);

disp();

while(1)

{

ckey = keyscan();

if(ckey == '$')

goto init;

else

{

buf(value);

disp();

}

}

}

else if(ckey == '$')

{ goto init;}

}

disp();

}

}

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

{

uint value;

switch(optor)

{

case '+' : value = va1+va2; break;

case '-' : value = va1-va2; break;

case '*' : value = va1*va2; break;

case '/' : value = va1/va2; break;

default : break;

}

return value;

}

void buf(uint val)

{

uchar i;

if(val == 0)

{

dbuf[7] = 0;

i = 6;

}

else

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

{

dbuf[i] = val % 10;

val /= 10;

}

for( ; i > 0; i--)

dbuf[i] = 10;

}

void disp(void)

{

uchar bsel, n;

bsel=0x01;

for(n=0;n<8;n++)

{

P2=bsel;

P0=table[dbuf[n]];

bsel=_crol_(bsel,1);

delay(3);

P0=0xff;

}

}

(3)51單片機做硬體擴展閱讀:

PROTEUS 是單片機課堂教學的先進助手

PROTEUS不僅可將許多單片機實例功能形象化,也可將許多單片機實例運行過程形象化。前者可在相當程度上得到實物演示實驗的效果,後者則是實物演示實驗難以達到的效果。

它的元器件、連接線路等卻和傳統的單片機實驗硬體高度對應。這在相當程度上替代了傳統的單片機實驗教學的功能,例:元器件選擇、電路連接、電路檢測、電路修改、軟體調試、運行結果等。

課程設計、畢業設計是學生走向就業的重要實踐環節。由於PROTEUS提供了實驗室無法相比的大量的元器件庫,提供了修改電路設計的靈活性、提供了實驗室在數量、質量上難以相比的虛擬儀器、儀表,因而也提供了培養學生實踐精神、創造精神的平台

隨著科技的發展,「計算機模擬技術」已成為許多設計部門重要的前期設計手段。它具有設計靈活,結果、過程的統一的特點。可使設計時間大為縮短、耗資大為減少,也可降低工程製造的風險。相信在單片機開發應用中PROTEUS也能茯得愈來愈廣泛的應用。

使用Proteus 軟體進行單片機系統模擬設計,是虛擬模擬技術和計算機多媒體技術相結合的綜合運用,有利於培養學生的電路設計能力及模擬軟體的操作能力;

在單片機課程設計和全國大學生電子設計競賽中,我們使用 Proteus開發環境對學生進行培訓,在不需要硬體投入的條件下,學生普遍反映,對單片機的學習比單純學習書本知識更容易接受,更容易提高。

實踐證明,在使用 Proteus 進行系統模擬開發成功之後再進行實際製作,能極大提高單片機系統設計效率。因此,Proteus 有較高的推廣利用價值。

閱讀全文

與51單片機做硬體相關的資料

熱點內容
安卓手機照片怎麼移動到電腦 瀏覽:794
哪個編程語言兼容性最差 瀏覽:522
上海大眾app怎麼激活 瀏覽:998
命令方塊指令鎬子附魔 瀏覽:580
linux文件所在目錄 瀏覽:698
上汽榮威app怎麼控制車輛 瀏覽:921
資本監管指標源碼 瀏覽:90
java從文件讀取空格 瀏覽:473
00後需要什麼app 瀏覽:170
百度加密貓官網 瀏覽:668
微信動態圖app哪個軟體好 瀏覽:630
浪潮雲南伺服器基地雲主機 瀏覽:558
java程序員簡歷模板免費 瀏覽:364
java字元串截取前 瀏覽:111
加密32目窗紗 瀏覽:435
多態編譯看左運行看右是規定嗎 瀏覽:752
程序員的工資多少 瀏覽:362
放鬆心情緩解壓力吃喝文案 瀏覽:50
高科技解壓治癒視頻 瀏覽:861
給優盤加密碼驅動怎麼那麼慢 瀏覽:774