在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機程序執(zhí)行流程詳細分析

單片機 ? 來源:未知 ? 作者:李倩 ? 2018-03-21 17:40 ? 次閱讀

單片機執(zhí)行程序的過程,側(cè)重硬件過程

為了加深初學(xué)者對51單片機指令的理解,現(xiàn)在把指令執(zhí)行的過程在此詳細說明,希望對你有啟發(fā)!單片機執(zhí)行程序的過程,實際上就是執(zhí)行我們所編制程序的過程。即逐條指令的過程。計算機每執(zhí)行一條指令都可分為三個階段進行。即取指令-----分析指令-----執(zhí)行指令。取指令的任務(wù)是:根據(jù)程序計數(shù)器PC中的值從程序存儲器讀出現(xiàn)行指令,送到指令寄存器。分析指令階段的任務(wù)是:將指令寄存器中的指令操作碼取出后進行譯碼,分析其指令性質(zhì)。如指令要求操作數(shù),則尋找操作數(shù)地址。

計算機執(zhí)行程序的過程實際上就是逐條指令地重復(fù)上述操作過程,直至遇到停機指令可循環(huán)等待指令。一般計算機進行工作時,首先要通過外部設(shè)備把程序和數(shù)據(jù)通過輸入接口電路和數(shù)據(jù)總線送入到存儲器,然后逐條取出執(zhí)行。但單片機中的程序一般事先我們都已通過寫入器固化在片內(nèi)或片外程序存儲器中。因而一開機即可執(zhí)行指令。下面我們將舉個實例來說明指令的執(zhí)行過程:開機時,程序計算器PC變?yōu)?000H。然后單片機在時序電路作用下自動進入執(zhí)行程序過程。執(zhí)行過程實際上就是取出指令(取出存儲器中事先存放的指令階段)和執(zhí)行指令(分析和執(zhí)行指令)的循環(huán)過程。例如執(zhí)行指令:MOV A,#0E0H,其機器碼為“74H E0H”,該指令的功能是把操作數(shù)E0H送入累加器,0000H單元中已存放74H,0001H單元中已存放E0H。當(dāng)單片機開始運行時,首先是進入取指階段,其次序是:

1. 程序計數(shù)器的內(nèi)容(這時是0000H)送到地址寄存器;2. 程序計數(shù)器的內(nèi)容自動加1(變?yōu)?001H);3. 地址寄存器的內(nèi)容(0000H)通過內(nèi)部地址總線送到存儲器,以存儲器中地址譯碼電跟,使地址為0000H的單元被選中;4. CPU使讀控制線有效;5. 在讀命令控制下被選中存儲器單元的內(nèi)容(此時應(yīng)為74H)送到內(nèi)部數(shù)據(jù)總線上,因為是取指階段,所以該內(nèi)容通過數(shù)據(jù)總線被送到指令寄存器。至此,取指階段完成,進入譯碼分析和執(zhí)行指令階段。

由于本次進入指令寄存器中的內(nèi)容是74H(操作碼),以譯碼器譯碼后單片機就會知道該指令是要將一個數(shù)送到A累加器,而該數(shù)是在這個代碼的下一個存儲單元。所以,執(zhí)行該指令還必須把數(shù)據(jù)(E0H)從存儲器中取出送到CPU,即還要在存儲器中取第二個字節(jié)。

其過程與取指階段很相似,只是此時PC已為0001H。指令譯碼器結(jié)合時序部件,產(chǎn)生74H操作碼的微操作系列,使數(shù)字E0H從0001H單元取出。因為指令是要求把取得的數(shù)送到A累加器,所以取出的數(shù)字經(jīng)內(nèi)部數(shù)據(jù)總線進入A累加器,而不是進入指令寄存器。至此,一條指令的執(zhí)行完畢。

單片機中PC="0002H",PC在CPU每次向存儲器取指或取數(shù)時自動加1,單片機又進入下一取指階段。這一過程一直重復(fù)下去,直至收到暫停指令或循環(huán)等待指令暫停。CPU就是這樣一條一條地執(zhí)行指令,完成所有規(guī)定的功能。

51單片機程序執(zhí)行流程詳細分析

單片機是沒有操作系統(tǒng)的東西,在keil中編寫的代碼都是裸機代碼,即你寫的代碼就類似是操作系統(tǒng),深入編寫裸機代碼有助于了解硬件的特性。

若不是硬件特性已定的情況之下的其它流程都是代碼作祟。忽然想到來探探51單片機的執(zhí)行流程。這個念頭起源于最初見到每個51程序里面的主函數(shù)里面最終都掛一個while(1);語句。為何要加一句while死循環(huán)讓程序停留在main函數(shù)中呢。將while(1);語句去掉有什么影響么?

寫一個很簡單的程序試一下。

執(zhí)行以上程序,由P1端口控制的流水燈閃了一下。程序最終進入while(1);里糾纏去了,這個到好解釋。

現(xiàn)將while(1);語句屏蔽掉。我還以為程序不能被正確執(zhí)行了呢,因為退出了main主函數(shù),就像Render需要循環(huán)來實現(xiàn)一樣(盡管剛剛閃燈的程序不在循環(huán)之內(nèi),但我還是不由產(chǎn)生了這一錯覺)。程序執(zhí)行的結(jié)果是:流水燈不停的閃爍!

看到這個現(xiàn)象后的猜想及動作^-^:

(1) 這塊板壞了吧!(在帶操作系統(tǒng)如linux字符界面下運行一個不帶死循環(huán)的C語言文件完畢后就會返回到linux shell程序中)。趕緊換個板再測試一下,顯然還是一樣的結(jié)果。

(2) 單片機中將一直執(zhí)行main函數(shù)中的最后一個(些)語句?(基于帶OS平臺下運行標(biāo)準(zhǔn)C語言文件的經(jīng)驗,可從來沒有想過是main函數(shù)被多次調(diào)用或多次進入)

(3) 單片機內(nèi)將C語言指令取出來加載到單片機內(nèi),單片機內(nèi)自動生成一個主程序循環(huán)執(zhí)行C語言中main函數(shù)的內(nèi)容?(雖然很荒唐,還是想了)

(4) 趕快谷歌百度一下單片機的執(zhí)行流程(雖然在谷歌百度時以“51單片機程序執(zhí)行流程”搜索,沒有搜到相關(guān)內(nèi)容)。換樸實的搜索詞:“51單片機 main”。然后就出現(xiàn)跟我一樣帶有疑問的問題:為什么main函數(shù)中不加while(1);語句之后程序會反復(fù)執(zhí)行呢?回答的關(guān)鍵詞包括“程序跑飛、看門狗、復(fù)位”。

(5) 趁上嵌入式的機會將“51單片機程序執(zhí)行流程”搬出來并向老師講述了我所寫程序的得到的現(xiàn)象,包括我怎么驗證呀等等。

老師的回答:Keil C51程序自動加載了一個名為”STARTUP.A51”的文件,在這個文件里面進行了一系列的初始化操作后進入用戶編寫的C語言程序入口main函數(shù)中,main函數(shù)執(zhí)行完畢后,STARTUP.A51文件后有一句跳轉(zhuǎn)到程序入口main函數(shù)的語句,所以會再次進入C語言主程序main函數(shù)中執(zhí)行相關(guān)內(nèi)容。

然后我用keil軟件模擬了運行一下以上那一段代碼:

程序開始運行就在程序入口main函數(shù)的第一條語句之處,Disassembly窗口是c語言代碼與匯編代碼相對應(yīng)的窗口,前面是地址,后面的是C語言對應(yīng)的匯編語句。下面的窗口是相應(yīng)文件的運行代碼的位置,由黃色箭頭指向當(dāng)前正要執(zhí)行的代碼。然后點擊單步運行工具條,指導(dǎo)跳出main函數(shù)為止,程序跳轉(zhuǎn)到STARTUP.A51中的以下代碼位置:

繼續(xù)點擊單步調(diào)試直到進入一個循環(huán)中:

這里是一個循環(huán),根據(jù)DJNZ指令的功能:每執(zhí)行一次DJNZ RO, IDATALOOP就將R0的值減1,若R0的值不為0則就跳到IDATALOOP地址去。很顯然這是一個循環(huán),那么RO的值是多少呢,在以下窗口顯示:

可見r0的初值為0x7f,這里將要循環(huán)0x7f(128)次,具體在這里r0值的含義可查看一下子的。那么在這個循環(huán)之后程序又將去哪里呢?跳過這個循環(huán)后程序運行的地方如下:

再單步運行一次:

根據(jù)Disassembly的內(nèi)容,此條語句執(zhí)行了就又要回到main函數(shù)中去了,執(zhí)行一下試試:

是的!

所以,在51單片機中,程序的執(zhí)行流程就是會不斷( 以r0的值作為延遲條件, 具體含義可繼續(xù)探索 )的進入main函數(shù)中執(zhí)行main函數(shù)中的代碼。

為什么我們在linux等上面運行不帶死循環(huán)的C語言代碼后程序就會自行終止呢?這是不同的操作流程:

(1) C51單片機不帶OS(操作系統(tǒng)),代碼的執(zhí)行形勢在此看來就由STARTUP.A51來安排了,沒有一個更大的程序來管理怎么調(diào)用main函數(shù)。

(2) 像Linux這類的平臺是帶了OS的,運行一個C語言程序?qū)inux來說就是一個任務(wù),除了運行C語言程序這個任務(wù)外還有其它的任務(wù)。當(dāng)運行一個C語言程序完畢時,此次的任務(wù)也算是完成了。如在linux shell界面運行一個文件名為“hello.c”功能為輸出“hello world!”的C語言程序,過程如下:

編譯:gcc hello.c –o hello

運行:./hello

在運行hello可執(zhí)行文件時,可以當(dāng)做是shell調(diào)用了hello這個可執(zhí)行程序。在hello運行完畢后,將返回值等返回給shell界面。整個C語言文件的生死全有l(wèi)inux shell程序管理。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6044

    文章

    44628

    瀏覽量

    638991

原文標(biāo)題:51單片機程序執(zhí)行流程詳細分析

文章出處:【微信號:aidanpianji,微信公眾號:單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    uboot代碼詳細分析

    [url=]uboot代碼詳細分析[/url]
    發(fā)表于 01-29 13:51

    詳細分析一下USB協(xié)議

    本文跟大家一起詳細分析一下USB協(xié)議。
    發(fā)表于 05-24 06:16

    學(xué)習(xí)目錄-STC-51單片機(15系列,51的升級版)精選資料分享

    上拉電阻與下拉電阻用途單片機特殊功能寄存器表(AT89C51)C51單片機定時器/計數(shù)器中斷功能詳細分析(一)C
    發(fā)表于 07-16 06:31

    詳細分析stm32f10x.h

    每日開講---學(xué)習(xí)STM32不得不看的剖析(詳細分析stm32f10x.h)摘要: 學(xué)習(xí)STM32不得不看的剖析(詳細分析stm32f10x.h)。/**這里是STM32比較重要的頭文件*******************************************
    發(fā)表于 08-05 07:44

    詳細分析嵌入式Linux系統(tǒng)啟動流程

    在嵌入式Linux專題(一)中已經(jīng)對嵌入式Linux系統(tǒng)的架構(gòu)及啟動流程有了初步的介紹,本文將詳細分析嵌入式Linux系統(tǒng)啟動流程
    發(fā)表于 11-05 09:25

    探探51單片機執(zhí)行流程

    單片機是沒有上操作系統(tǒng)的東西,在keil中編寫的代碼都是裸機代碼,深入編寫裸機代碼有助于了解硬件的特性。若不是硬件特性已定的情況之下的其它流程都是代碼作祟。忽然想到來探探51單片機
    發(fā)表于 11-18 07:29

    51單片機流水燈程序

    51單片機流水燈程序 51單片機流水燈程序
    發(fā)表于 12-21 15:52 ?170次下載

    51單片機匯編語言教程_單片機延時程序分析

    51單片機匯編語言教程:5課單片機延時程序分析
    發(fā)表于 01-19 15:26 ?0次下載

    近期的幾個單片機例程及詳細分析

    近期的幾個單片機例程及詳細分析,感興趣的可以看看。
    發(fā)表于 06-21 17:02 ?3次下載

    51單片機有哪些常用程序51單片機4個常用程序匯總

    本文檔的主要內(nèi)容詳細介紹的是51單片機有哪些常用程序51單片機4個常用
    發(fā)表于 09-05 16:30 ?27次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>有哪些常用<b class='flag-5'>程序</b>?<b class='flag-5'>51</b><b class='flag-5'>單片機</b>4個常用<b class='flag-5'>程序</b>匯總

    51單片機匯編程序有哪些?51單片機匯編程序詳細資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是51單片機匯編程序有哪些?51單片機匯編
    發(fā)表于 09-06 16:31 ?55次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>匯編<b class='flag-5'>程序</b>有哪些?<b class='flag-5'>51</b><b class='flag-5'>單片機</b>匯編<b class='flag-5'>程序</b>集<b class='flag-5'>詳細</b>資料免費下載

    51單片機程序執(zhí)行流程是怎么樣的

    單片機是沒有上操作系統(tǒng)的東西,在keil中編寫的代碼都是裸機代碼,深入編寫裸機代碼有助于了解硬件的特性。若不是硬件特性已定的情況之下的其它流程都是代碼作祟。忽然想到來探探51單片機
    發(fā)表于 08-19 17:31 ?2次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>程序</b><b class='flag-5'>執(zhí)行</b><b class='flag-5'>流程</b>是怎么樣的

    51單片機程序執(zhí)行流程詳細資料說明

    單片機是沒有上操作系統(tǒng)的東西,在keil中編寫的代碼都是裸機代碼,深入編寫裸機代碼有助于了解硬件的特性。若不是硬件特性已定的情況之下的其它流程都是代碼作祟。忽然想到來探探51單片機
    發(fā)表于 06-24 17:43 ?1次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>程序</b><b class='flag-5'>執(zhí)行</b><b class='flag-5'>流程</b><b class='flag-5'>詳細</b>資料說明

    51單片機程序執(zhí)行流程詳細分析

    單片機是沒有上操作系統(tǒng)的東西,在keil中編寫的代碼都是裸機代碼,深入編寫裸機代碼有助于了解硬件的特性。若不是硬件特性已定的情況之下的其它流程都是代碼作祟。忽然想到來探探51單片機
    發(fā)表于 11-11 20:21 ?9次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>程序</b><b class='flag-5'>執(zhí)行</b><b class='flag-5'>流程</b><b class='flag-5'>詳細分析</b>

    學(xué)習(xí)目錄-STC-51單片機(15系列,51的升級版)

    上拉電阻與下拉電阻用途 單片機特殊功能寄存器表(AT89C51) C51單片機定時器/計數(shù)器中斷功能詳細分析(一) C
    發(fā)表于 11-23 16:51 ?0次下載
    學(xué)習(xí)目錄-STC-<b class='flag-5'>51</b><b class='flag-5'>單片機</b>(15系列,<b class='flag-5'>51</b>的升級版)
    主站蜘蛛池模板: 亚洲日本一区二区三区 | 日韩免费一级 | 一区二区三区视频在线观看 | 嫩草影院在线入口 | 欧美+日本+国产+在线观看 | 国模大胆一区二区三区 | 久久这里只有精品1 | 精品成人在线观看 | 成年女人毛片免费观看97 | 天天看天天爽天天摸天天添 | 中文字幕第13亚洲另类 | 永久免费影视在线观看 | 六月丁香婷婷激情 | 免费观看高清视频 | 色综合视频在线观看 | 大色综合色综合网站 | 三级网址在线播放 | 黄色a三级免费看 | 2021久久精品99精品久久 | 福利片在线观看免费高清 | 国产成人三级经典中文 | 天天久久影视色香综合网 | 在线午夜| 美女扒开尿口给男人桶爽视频 | 韩国三级hd | 亚洲香蕉网久久综合影院3p | 成熟女人免费一级毛片 | 可以免费看黄的网站 | 免费视频在线看 | 狠狠躁夜夜躁人人躁婷婷视频 | 色黄网| 韩国三级中文字幕hd | 午夜在线网站 | 久草婷婷 | 在线人成精品免费视频 | 日韩精品免费一区二区三区 | 国产精品怡红院永久免费 | 免费精品99久久国产综合精品 | 黄色免费网站在线 | china国语对白刺激videos chinese国产videoxx实拍 | 亚洲高清网站 |