創作內容

1 GP

8051 DELAY與機械週期關西(簡易講解)

作者:廢物敗類窩囊廢漢堡│2019-10-06 22:20:44│巴幣:1,000│人氣:2698
這些都是我自己理解的如果跟書上答案有誤就有勞大佬們的糾正

機械週期是甚麼?

就是機器在處理事件狀態的一個步驟

而我們在任何程式方面都會運用到這個東西

當然也有另外的指令週期(我們這邊不區分它們差異)

書上說8051的一個機械週期為12MHZ = 1us

1us = 10的-6次s

為甚麼要理解這個呢?

因為你如果要讓8051的延遲準確執行

你就需要理解這個基本條件

好啦基本上 機械週期不用太深入去理解

講個大概就差不多了

問題是在8051的延遲(DELAY) 這塊要怎麼清楚呢?

請看以下延遲範例 :

DELAY: mov r6,#250
DL1: mov r7,#200
DL2:djnz r7,DL2
djnz r6,DL1
ret

首先我們要了解指令上的周期

所以我把它們都標註 它們指令各個週期分別為

DELAY: mov r6,#250 //T1 = 1
DL1: mov r7,#200 //T2 = 1
DL2:
djnz r7,DL2//T3 = 2
djnz r6,DL1 //T4 = 2
ret //T5 = 2

接下來我們要清楚知道這邊關西
才能算出這個範例的延遲時間

從中關西就是 DL1 給R7得到200數值後
DL2使用DJNZ這個指令操作R7 而它的機械週期為2做完後要接下一個指令週期為2

所以關西為 1+(2*200)+2

執行完 djnz R7,DL2後,接下來執行的是 djnz r6,DL1
r6的數值為 250,所以算式必須在乘上250

關西為 [1+(2*200)+2]*250

為甚麼不用再乘2了呢?

就我自行理解是 你在一個相同算式中最先乘2的週期已經達到乘2的作用

所以不需要再乘2 不然出來的數值會多正確數值的2次倍

djnz r6,DL1做這個指令前它一樣也有把數值移到R6的動作

所以mov r6,#250為一個週期
還有ret這個返回指令週期為二

總結出來的算式關西為 1+[1+(2*200)+2]*250+2

出來的數值跟如果你在程式上運行的一次結果應該為相同

功課 要求做一個0.2秒延遲 跟 0.05秒延遲


只要知道這些關西加上計算機操作

就很簡單啦

0.05秒

DELAY: mov r6,#250
DL1: mov r7,#99
DL2:djnz r7,DL2
djnz r6,DL1
ret
1+[1+(2*99)+2]*250+2

0.2秒

DELAY: mov r5,#10
DL1: mov r6,#100
DL2:
mov r7,#100
djnz r7,$
djnz r6,DL1
djnz r7,DL2
ret

1+{1+[1+(2*100)+2]*100+2}*10+2
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4551992
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 2 篇留言

舔木針
我完全看不懂 但還是幫你加油

10-07 22:16

廢物敗類窩囊廢漢堡
尼哥甲不意外10-07 22:24
多多綠二代目
我完全看不懂 但還是幫你加油

03-14 10:46

我要留言提醒:您尚未登入,請先登入再留言

1喜歡★a891030 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:看了碼的當下... 後一篇:minecraft 理想...

追蹤私訊切換新版閱覽

作品資料夾

kktwtwyufoo大家
我的小屋有小說可以看,歡迎大家來參觀 https://home.gamer.com.tw/homeindex.php看更多我要大聲說昨天22:08


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】