色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

51單片機程序執行流程詳細分析

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

單片機執行程序的過程,側重硬件過程

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

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

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

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

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

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

51單片機程序執行流程詳細分析

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

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

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

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

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

看到這個現象后的猜想及動作^-^:

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

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

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

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

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

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

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

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

繼續點擊單步調試直到進入一個循環中:

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

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

再單步運行一次:

根據Disassembly的內容,此條語句執行了就又要回到main函數中去了,執行一下試試:

是的!

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

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

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

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

編譯:gcc hello.c –o hello

運行:./hello

在運行hello可執行文件時,可以當做是shell調用了hello這個可執行程序。在hello運行完畢后,將返回值等返回給shell界面。整個C語言文件的生死全有linux shell程序管理。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6040

    文章

    44606

    瀏覽量

    637283

原文標題:51單片機程序執行流程詳細分析

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

收藏 人收藏

    評論

    相關推薦

    uboot代碼詳細分析

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

    詳細分析一下USB協議

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

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

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

    詳細分析stm32f10x.h

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

    詳細分析嵌入式Linux系統啟動流程

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

    探探51單片機執行流程

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

    51單片機流水燈程序

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

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

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

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

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

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

    本文檔的主要內容詳細介紹的是51單片機有哪些常用程序51單片機4個常用
    發表于 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單片機匯編程序詳細資料免費下載

    本文檔的主要內容詳細介紹的是51單片機匯編程序有哪些?51單片機匯編
    發表于 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單片機程序執行流程是怎么樣的

    單片機是沒有上操作系統的東西,在keil中編寫的代碼都是裸機代碼,深入編寫裸機代碼有助于了解硬件的特性。若不是硬件特性已定的情況之下的其它流程都是代碼作祟。忽然想到來探探51單片機
    發表于 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'>執行</b><b class='flag-5'>流程</b>是怎么樣的

    51單片機程序執行流程詳細資料說明

    單片機是沒有上操作系統的東西,在keil中編寫的代碼都是裸機代碼,深入編寫裸機代碼有助于了解硬件的特性。若不是硬件特性已定的情況之下的其它流程都是代碼作祟。忽然想到來探探51單片機
    發表于 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'>執行</b><b class='flag-5'>流程</b><b class='flag-5'>詳細</b>資料說明

    51單片機程序執行流程詳細分析

    單片機是沒有上操作系統的東西,在keil中編寫的代碼都是裸機代碼,深入編寫裸機代碼有助于了解硬件的特性。若不是硬件特性已定的情況之下的其它流程都是代碼作祟。忽然想到來探探51單片機
    發表于 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'>執行</b><b class='flag-5'>流程</b><b class='flag-5'>詳細分析</b>

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

    上拉電阻與下拉電阻用途 單片機特殊功能寄存器表(AT89C51) C51單片機定時器/計數器中斷功能詳細分析(一) C
    發表于 11-23 16:51 ?0次下載
    學習目錄-STC-<b class='flag-5'>51</b><b class='flag-5'>單片機</b>(15系列,<b class='flag-5'>51</b>的升級版)
    主站蜘蛛池模板: 新图解av吧| 精彩国产萝视频在线| 大陆老太交xxxxxhd在线| 国产精品无码麻豆放荡AV| 久久一级视频| 日日操夜夜摸| 在线播放毛片| 丰满五十老女人性视频| 久久热在线视频精品店| 婷婷五月久久丁香国产综合| 曰本少妇高潮久久久久久| 国产精品福利电影| 欧美 亚洲综合在线一区| 亚洲国产中文字幕在线视频综合| FREE性丰满白嫩白嫩的HD| 灰原哀被啪漫画禁漫| 手机在线观看无码日韩视频| 99re6在线视频国产精品欧美| 国产综合欧美区在线| 丝袜足控免费网站xx91| 99国产精品偷窥熟女精品视频| 狠狠色综合7777久夜色撩人| 四虎永久在线精品国产免费| www.精品久久| 男人就爱吃这套下载| 伊人精品国产| 精品国产一区二区三区久久影院| 无码人妻精品一区二区蜜桃在线看 | 精品AV国产一区二区三区| 无限资源好看片2019免费观看| seba51久久精品| 蜜芽最新域名解析网站| 伊人久久精品99热超碰| 精品国产福利在线视频| 亚洲黄色高清| 国精产品一区一区三区M| 午夜亚洲国产理论片二级港台二级| 囯产精品久久久久久久久蜜桃| 日韩精品无码免费专区| 成人在线观看免费视频| 日韩大胆视频|