當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]1. 51單片機(jī)概述51單片機(jī)是對所有兼容Intel 8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱。目前教科書基本都是以早期的MCS-51為原型,講解微機(jī)的原理及其接口技術(shù)的。早期的51單片機(jī)功能都較弱,需擴(kuò)展rom,ram等才能組成一個較復(fù)雜的

1. 51單片機(jī)概述

51單片機(jī)是對所有兼容Intel 8031指令系統(tǒng)的單片機(jī)的統(tǒng)稱。目前教科書基本都是以早期的MCS-51為原型,講解微機(jī)的原理及其接口技術(shù)的。早期的51單片機(jī)功能都較弱,需擴(kuò)展rom,ram等才能組成一個較復(fù)雜的系統(tǒng)。而現(xiàn)今流行的8位51單片機(jī)都比早期芯片作了較多的功能擴(kuò)展,性能強(qiáng)勁。生產(chǎn)51單片機(jī)的廠家有很多,像atmel的at80c51系列,華邦w78c051系列,宏晶stc80c51系列等,其中臺灣宏晶stc系列51單片機(jī)在國內(nèi)尤為流行。因此,筆者采用宏晶性價(jià)比較高的一款51單片機(jī)stc12c5a60s2來作開發(fā)講解。該款51單片機(jī)已經(jīng)是宏昌第N代產(chǎn)品了,其主要特征如下:

1.1. 增強(qiáng)型8051 CPU,1T,單時鐘/機(jī)器周期,指令代碼完全兼容傳統(tǒng)8051;

1.2. 工作頻率范圍:0 - 35MHz,相當(dāng)于普通8051的 0~420MHz;

1.3. 用戶應(yīng)用程序空間60K字節(jié),片上集成1280字節(jié)RAM;

1.4. 通用I/O口36個(以封裝PDIP40為例),可設(shè)置成準(zhǔn)雙向口/弱上拉,推挽/強(qiáng)上拉,僅為輸入/高阻,開漏,每個I/O口驅(qū)動能力均可達(dá)到20mA,但整個芯片最大不要超過55Ma;

1.5. ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器,無需專用仿真器 可通過串口(P3.0/P3.1)直接下載用戶程序。

1.6. 內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換(250K/S),EEPROM,看門狗,內(nèi)部RC振蕩器,4個定時器,7路外部I/O口中斷等。

尤其需注意的是stc新一代的單片機(jī)都是1T單時鐘/機(jī)器周期,與課本介紹的早期51單片機(jī)是12T單周期是不一樣的,軟件實(shí)現(xiàn)延時時需作注意,其余擴(kuò)充的特殊功能寄存器等請參考stc12c5a60s2的數(shù)據(jù)手冊。

2. 51單片機(jī)編程環(huán)境概述2.1. 代碼編譯工具

51單片機(jī)開發(fā)軟件基本無疑選用Keil C51集成開發(fā)環(huán)境。Keil C51是德國Keil Software公司(ARM公司收購了)出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強(qiáng)大的仿真調(diào)試器等,目前最新版本已經(jīng)到了uVision5。這里需要說明的是,Keil C51并不完全與ANSI C一樣,Keil C51由于面向的是51單片機(jī),為了更好地詳述51的架構(gòu),Keil C51擴(kuò)展了一些獨(dú)特的關(guān)鍵字,語法描述等。如用code說明為常量放在代碼區(qū),data說明直接尋址區(qū)的變化,sfr聲明特殊功能寄存器等。



圖2.1-1

2.2. 代碼調(diào)試工具2.2.1. Keil自帶仿真調(diào)試器

Keil集成開發(fā)環(huán)境除了編譯鏈接工具外,還自帶了一個功能強(qiáng)大的仿真調(diào)試器。當(dāng)然軟仿真是能夠看到Keil編譯后的匯編代碼,單步調(diào)試可以跟蹤各個寄存器的狀態(tài)變化,但是軟仿真是無法得到真實(shí)的外部輸入狀態(tài)的,如仿真真實(shí)開發(fā)板的按鍵輸入等。代碼調(diào)試時往往需要知道編譯器是否按照要求進(jìn)行代碼的編譯處理,因此,可以讓編譯器輸出它是如何編譯,鏈接文件的,我們可以查看這些了解編譯器編譯c生成的匯編代碼,鏈接的符號,內(nèi)存分配之類的信息。Keil在Target屬性中Listing列可進(jìn)行設(shè)置,如C Compiler Listing選項(xiàng)中是c編譯器輸出選項(xiàng),點(diǎn)上Assembly Code即輸出c編譯對應(yīng)的匯編代碼,在文件.lst中。C Preprocessor Listing為c編譯器預(yù)處理輸出的信息,AssemblerListing為匯編器輸出的處理信息,LinkerListing為鏈接器輸出的處理信息(在.m51后綴文件中),這包括編譯器對內(nèi)存的分配,各個函數(shù)符號等。通常編譯后的匯編代碼以及代碼的鏈接信息是可以跟蹤查看,以判斷代碼的問題所在。



圖2.2.1-1


圖2.2.1-2

2.2.2. Proteus仿真軟件

Proteus軟件是英國Lab Center Electronics公司出版的EDA工具軟件,它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。Proteus具有電路仿真功能,能仿真一些最基本電子元器件,如led,數(shù)碼管,鍵盤等,并且是能仿真51單片機(jī)代碼運(yùn)行的。在這里需要說明的是,請務(wù)必不能以仿真電路的效果圖與真實(shí)的硬件開發(fā)混攪,電路仿真軟件往往都是邏輯上的電路連接,完全不能夠用來說明真實(shí)硬件開發(fā)過程。此外,Proteus仿真51單片機(jī)也會有一些邏輯的問題,例如,在硬件上真實(shí)可運(yùn)行的代碼在Proteus上無法仿真達(dá)到效果,修改一下代碼順序即可??傊?,對于小代碼,Proteus都是可以勝任的,如果代碼太復(fù)雜,仿真任務(wù)會達(dá)到100%,無法再進(jìn)行仿真了。因此,筆者推薦對于初學(xué)者,可先用Proteus進(jìn)行仿真,進(jìn)行一些最基本的練習(xí),熟悉匯編語言,51單片機(jī)狀態(tài)變化,c語言等,驗(yàn)證自己在51單片機(jī)架構(gòu)學(xué)習(xí)中的一些理解,代碼實(shí)現(xiàn)的理解。學(xué)習(xí)到一定的程度還是需要一塊51開發(fā)板進(jìn)行開發(fā)練習(xí)的,畢竟仿真軟件只能仿真很少部分的外圍,也不能仿真復(fù)雜的硬件及代碼。



圖2.2.2-1

2.3. 代碼燒錄工具

Keil C51編譯生成的hex文件通過STC_ISP工具,連接串口線(一般采用usb轉(zhuǎn)串口線)進(jìn)行下載。代碼燒寫傳輸是通過51單片機(jī)的uart串口信號線Tx,Rx完成的,stc單片機(jī)實(shí)現(xiàn)isp下載是因?yàn)樾酒瑑?nèi)部有廠商的固化代碼,上電復(fù)位后是先執(zhí)行固化代碼,檢測串口有無接收到特定的命令,如果有則進(jìn)入下載模式,與上位機(jī)的isp下載軟件進(jìn)行通信,從而把代碼下載進(jìn)單片機(jī)rom區(qū)。如果沒有有效的串口下載命令,則跳轉(zhuǎn)執(zhí)行真正的用戶代碼,即從0000H處開始執(zhí)行代碼。


圖2.3-1

3. 匯編流水燈入門代碼

筆者認(rèn)為學(xué)習(xí)51單片機(jī)并不是能通過別人的例子用c語言模仿寫出類似的功能即可,必須要對自己的編碼意圖比較清晰,這樣脫離任何例程都是可以自己掌控編寫代碼。因此學(xué)習(xí)51單片機(jī)其實(shí)更準(zhǔn)確來說是學(xué)習(xí)微機(jī)的原理以及接口技術(shù)。而微機(jī)的原理以及接口技術(shù)對于51,arm或其它架構(gòu)的mcu都是通用的,通過51來學(xué)習(xí)微機(jī)原理會涉及到匯編語言,因?yàn)橹挥袇R編語言才能直接描述51內(nèi)部的工作狀態(tài)。筆者以過來人的身份推薦初學(xué)者從51微機(jī)原理,匯編學(xué)起。C語言只是簡化封裝了匯編語言的一些處理過程,學(xué)完匯編,c語言也自然會達(dá)到相應(yīng)的水平。此外,對于軟件出錯調(diào)試,只能跟蹤匯編代碼,查看寄存器的狀態(tài)判斷,而想學(xué)習(xí)arm,從事更深入的嵌入式開發(fā),匯編是必不可少的。

3.1. 硬件原理圖

8個LED連接到P0口,當(dāng)短接CON2后,只要P0口對應(yīng)位為0(低電平),相應(yīng)的LED則被點(diǎn)亮。此外說明一下為什么不用P0對應(yīng)位為1時點(diǎn)亮而用0,因?yàn)閭鹘y(tǒng)51單片機(jī)I/O口是弱上拉的,高電平是輸不出大電流的(相對低電平),高電平拉電流估計(jì)是ua級,但低電平灌電流幾個ma是不成問題的。對于stc系列51單片機(jī),I/O口是可以配置成推挽輸出的,這樣高低電平都是可以達(dá)到20ma(手冊數(shù)據(jù))的輸出/吸收電流。



圖3.1-1

3.2. 工程搭建

打開Keil C51,Project->NewuVersion Project,保存項(xiàng)目后,選擇cpu為Atmel的AT89C52的51單片機(jī),這里需要說明的是,Keil沒有stc系列的51單片機(jī)選擇,只要是51內(nèi)核,在Keil下可選擇任一廠家,任一款51單片機(jī)進(jìn)行代碼編寫,因?yàn)榇a都是兼容的。而不同廠商芯片之間的差異只是rom大小,ram大小,片內(nèi)外設(shè)以及一些廠家特有的特殊功能寄存器的定義。這些都可以在工程中,代碼中重新定義,編譯器會老老實(shí)實(shí)按照要求編譯代碼。選擇了cpu后,會提示是否加入51的啟動代碼到工程中,由于我們編寫的是匯編語言,此處不需要,加入后啟動代碼會與我們自己的匯編代碼定義沖突。這里需要說明的是,啟動代碼是初始化c環(huán)境需要的文件,啟動代碼會設(shè)置c代碼運(yùn)行時的堆棧,清零全局變量,靜態(tài)變量區(qū)等。這就是為什么我們在c文件中定義一個全局變量,默認(rèn)這個變量的初始值為0(C標(biāo)準(zhǔn))。

3.3. 代碼編寫

創(chuàng)建一個新文件,命名為LEDs.ASM,ASM為51匯編文件后綴,保存并加入工程。匯編的一些基本用法在代碼注釋中有說明,更多的匯編用法請google,百度。這里需要說明的是,51單片機(jī)第一條指令位置是在0H,后面相鄰的地址是分配給相應(yīng)的中斷進(jìn)入的,因此第一條指令往往會跳轉(zhuǎn)避開中斷向量地址區(qū)。以下代碼實(shí)現(xiàn)8個LED燈輪流點(diǎn)亮,點(diǎn)亮延時1s,這個匯編代碼是模仿c語言函數(shù)結(jié)構(gòu)化編程的,里面可以類似認(rèn)識到c編譯器大概是如何處理c函數(shù)并生成匯編的,當(dāng)然編譯器匯編質(zhì)量基本是無法達(dá)到人工匯編質(zhì)量的。

ORG 0H ; 表示后面緊跟的那條指令的地址是 0000H

JMP Begin; 無條件跳轉(zhuǎn)到Begin處,以避免中斷向量地址

ORG 0BH ;000BH處為定時器T0的中斷處理入口

JMP T0_INT ; 未使用T0定時器中斷,只供代碼說明

T0_INT:

; 中斷發(fā)生時會自動把當(dāng)前程序運(yùn)行地址PC壓入棧sp

; 中斷處理完后用RETI中斷返回,從棧sp中出棧到PC返回打斷程序處

RETI

LED1 EQUP0.0 ; LED1由P0口第0位控制,以下類似

LED2 EQU P0.1

LED3 EQU P0.2

LED4 EQU P0.3

LED5 EQU P0.4

LED6 EQU P0.5

LED7 EQU P0.6

LED8 EQU P0.7

ORG 100H

Begin:

MOV P0, #0xff ;P0口輸出全1,所有LED滅

LOOP:

; R6,R7為調(diào)用函數(shù)的參數(shù)傳入,參數(shù)為16位,需2字節(jié)

; _Delay_ms對應(yīng)c函數(shù)原型為void Delay_ms(intnCount)

; 共延時nCount * 1ms(12M普通8051),對于stc指令周期1T的

; 延時nCount * (1/6)ms (12M)

CLR LED1 ;直接位清0指令,清除P0口第0位,LED1亮

MOV R7, #(1000& 0xff) ; 參數(shù)為1000,普通8051延時1s

MOV R6, #((1000>>8) & 0xff) ; 16位變量

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉