女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

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

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

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

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

單片機(jī) ? 來源:未知 ? 作者:李倩 ? 2018-03-21 17:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

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

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

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

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

寫一個(gè)很簡(jiǎn)單的程序試一下。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

再單步運(yùn)行一次:

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

是的!

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

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

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

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

編譯:gcc hello.c –o hello

運(yùn)行:./hello

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

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

    關(guān)注

    6067

    文章

    44969

    瀏覽量

    649360

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

文章出處:【微信號(hào):aidanpianji,微信公眾號(hào):?jiǎn)纹瑱C(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    uboot代碼詳細(xì)分析

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

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

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

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

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

    詳細(xì)分析stm32f10x.h

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

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

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

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

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

    51單片機(jī)流水燈程序

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

    51單片機(jī)匯編語言教程_單片機(jī)延時(shí)程序分析

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

    近期的幾個(gè)單片機(jī)例程及詳細(xì)分析

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

    51單片機(jī)有哪些常用程序51單片機(jī)4個(gè)常用程序匯總

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

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

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

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

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

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

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

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

    上拉電阻與下拉電阻用途 單片機(jī)特殊功能寄存器表(AT89C51) C51單片機(jī)定時(shí)器/計(jì)數(shù)器中斷功能詳細(xì)分析(一) C
    發(fā)表于 11-23 16:51 ?0次下載
    學(xué)習(xí)目錄-STC-<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>(15系列,<b class='flag-5'>51</b>的升級(jí)版)

    機(jī)房托管費(fèi)詳細(xì)分析

    機(jī)房托管費(fèi)是一個(gè)復(fù)雜而多變的話題,它受到多種因素的影響,以下是對(duì)機(jī)房托管費(fèi)用的詳細(xì)分析,主機(jī)推薦小編為您整理發(fā)布機(jī)房托管費(fèi)詳細(xì)分析
    的頭像 發(fā)表于 02-28 09:48 ?408次閱讀
    主站蜘蛛池模板: 阜新市| 马鞍山市| 郴州市| 分宜县| 阜康市| 南丰县| 连州市| 永春县| 靖边县| 庆元县| 钟山县| 盱眙县| 沂源县| 东丽区| 安多县| 林西县| 巨野县| 凭祥市| 兴业县| 云林县| 建阳市| 重庆市| 柞水县| 三河市| 莫力| 洮南市| 漳浦县| 塔河县| 淮南市| 稷山县| 南京市| 托克托县| 开化县| 北宁市| 文安县| 会宁县| 塘沽区| 瑞丽市| 绥阳县| 名山县| 阳西县|