⑴ 8051單片機的內部硬體結構包括哪五大部分
8051單片機的內部硬體結構包括:
1、中央處理器CPU:它是單片機內部的核心部件,決定了單片機的主要功能特性,由運算器和控制器兩大部分組成。
2、存儲器:8051單片機在系統結構上採用了哈佛型,將程序和數據分別存放在兩個存儲器內,一個稱為程序存儲器,另一個為數據存儲器在物理結構上分程序存儲器和數據存儲器,有四個物理上相互獨立的存儲空間,即片內ROM和片外ROM,片內RAM和片外RAM。
3、定時器/計數器(T/C):8051單片機內有兩個16位的定時器/計數器,每個T/C既可以設置成計數方式,也可以設置成定時方式,並以其定時計數結果對計算機進行控制。
4、並行I/O口:8051有四個8位並行I/O介面(P0~P3),以實現數據的並行輸入輸出。
5、串列口:8051單片機有一個全雙工的串列口,可實現單片機和單片機或其他設備間的串列通信。
6、中斷控制系統:8051共有5個中斷源,非為高級和低級兩個級別它可以接收外部中斷申請、定時器/計數器申請和串列口申請,常用於實時控制、故障自動處理、計算機與外設間傳送數據及人機對話等。
(1)8051單片機c擴展閱讀:
單片機不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。相當於一個微型的計算機,和計算機相比,單片機只缺少了I/O設備。
概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。
單片機的使用領域已十分廣泛,如智能儀表、實時工控、通訊設備、導航系統、家用電器等。
⑵ C8051F系列單片機的C8051系列單片機的特點
C8051F具有上手快(全兼容8051指令集)、研發快(開發工具易用,可縮短研發周期)和見效快(調試手段靈活)的特點,其性能優勢具體體現在以下方面:
基於增強的CIP-51內核,其指令集與MCS-51完全兼容,具有標准8051的組織架構,可以使用標準的803x/805x匯編器和編譯器進行軟體開發。CIP-51採用流水線結構,70%的的指令執行時間為1或2個系統時鍾周期,是標准8051指令執行速度的12倍;其峰值執行速度可達100MIPS(C8051F120等),是目前世界上速度最快的8位單片機。
增加了中斷源。標準的8051隻有7個中斷源Silicon Labs 公司 C8051F系列單片機擴展了中斷處理這對於時實多任務系統的處理是很重要的擴展的中斷系統向CIP-51提供22個中斷源允許大量的模擬和數字外設中斷一個中斷處理需要較少的CPU干預卻有更高的執行效率。
集成了豐富的模擬資源,絕大部分的C8051F系列單片機都集成了單個或兩個ADC,在片內模擬開關的作用下可實現對多路模擬信號的採集轉換;片內ADC的采樣精度最高可達24bit,采樣速率最高可達500ksps,部分型號還集成了單個或兩個獨立的高解析度DAC,可滿足絕大多數混合信號系統的應用並實現與模擬電子系統的無縫介面;片內溫度感測器則可以迅速而精確的監測環境溫度並通過程序作出相應處理,提高了系統運行的可靠性。
集成了豐富的外部設備介面。具有兩路UART和最多可達5個定時器及6個PCA模塊,此外還根據不同的需要集成了SMBus、SPI、USB、CAN、LIN等介面,以及RTC部件。外設介面在不使用時可以分別禁止以降低系統功耗。與其他類型的單片機實現相同的功能需要多個晶元的組合才能完成相比,C8051單片機不僅減少了系統成本,更大大降低了功耗。
增強了在信號處理方面的性能,部分型號具有16x16 MAC以及DMA功能,可對所採集信號進行實時有效的演算法處理並提高了數據傳送能力。
具有獨立的片內時鍾源(精度最高可達0.5%),設計人員既可選擇外接時鍾,也可直接應用片內時鍾,同時可以在內外時鍾源之間自如切換。片內時鍾源降低了系統設計的復雜度,提高了系統可靠性,而時鍾切換功能則有利於系統整體功耗的降低。
提供空閑模式及停機模式等多種電源管理方式來降低系統功耗
實現了I/O從固定方式到交叉開關配置。固定方式的I/O埠,既佔用引腳多,配置又不夠靈活。在C8051F中,則採用開關網路以硬體方式實現I/O埠的靈活配置,外設電路單元通過相應的配置寄存器控制的交叉開關配置到所選擇的埠上。
復位方式多樣化,C8051F把80C51單一的外部復位發展成多源復位,提供了上電復位、掉電復位、外部引腳復位、軟體復位、時鍾檢測復位、比較器0復位、WDT復位和引腳配置復位。眾多的復位源為保障系統的安全、操作的靈活性以及零功耗系統設計帶來極大的好處。
從傳統的模擬調試到基於JTAG介面的在系統調試。C8051F在8位單片機中率先配置了標準的JTAG介面(IEEE1149.1)。C8051F的JTAG介面不僅支持Flash ROM的讀/寫操作及非侵入式在系統調試,它的JTAG邏輯還為在系統測試提供邊界掃描功能。通過邊界寄存器的編程控制,可對所有器件引腳、SFR匯流排和I/O口弱上拉功能實現觀察和控制。
C8051F系列單片機型號齊全,可根據設計需求選擇不同規模和帶有特定外設介面的型號,提供從多達100個引腳的高性能單片機到最小3mmX3mm的封裝,滿足不同設計的需要。
基於上述特點,Silicon Labs 公司C8051F系列單片機作為SoC晶元的傑出代表能夠滿足絕大部分場合的復雜功能要求,並在嵌入式領域的各個場合都得到了廣泛的應用:在工業控制領域,其豐富的模擬資源可用於工業現場多種物理量的監測、分析及控制和顯示;在攜帶型儀器領域,其低功耗和強大的外設介面也非常適合各種信號的採集、存儲和傳輸;此外,新型的C8051F5xx系列單片機也在汽車電子行業中嶄露頭角。正是這些優勢,使得C8051單片機在進入中國市場的短短幾年內就迅速風靡,相信隨著新型號的不斷推出以及推廣力度的不斷加大,C8051系列單片機將迎來日益廣闊的發展空間,成為嵌入式領域的時代寵兒
此系列單片機完全兼容MCS-51指令集,容易上手,開發周期短,大大節約了開發成本。C8051F系統集成度高,匯流排時鍾可達25M
⑶ 8051單片機c語言編程 如何嵌入匯編語言呢
這和的你的的編譯器是有關的
還有樓上說的根本不對 那是 上位機嵌入匯編的方式
根本不是 51 的·
如果在51 KEIL 中
方法是這樣的
#pragma ASM
; Assembler Code Here
#pragma ENDASM
不過你還得在 Project 窗口中包含匯編代碼的 C 文件上右鍵,選擇「Options for ...」,點擊右邊的「Generate Assembler SRC File」
和「Assemble SRC File」,使檢查框由灰色變成黑色(有效)狀態;
嵌入匯編好嵌入不過我現在一直都鬧不懂的就是 如何在嵌入的匯編中 調用 c 中的 變數 ,,希望有知道的分享一下!!
希望不是用 用宏匯編那樣的話太麻煩了!!
⑷ 用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;
//因為百位沒有變,所以不用賦值
}