<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)定時(shí)器初值的計(jì)算

          51單片機(jī)定時(shí)器初值的計(jì)算

          作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏

          什么是時(shí)鐘周期?什么是機(jī)器周期?什么是指令周期

          本文引用地址:http://www.ex-cimer.com/article/201611/318666.htm時(shí)鐘周期

          時(shí)鐘周期也稱為振蕩周期,定義為時(shí)鐘脈沖的倒數(shù)(可以這樣來(lái)理解,時(shí)鐘周期就是單片機(jī)外接晶振的倒數(shù),例如12M的晶振,它的時(shí)間周期就是1/12 us),是計(jì)算機(jī)中最基本的、最小的時(shí)間單位。在一個(gè)時(shí)鐘周期內(nèi),CPU僅完成一個(gè)最基本的動(dòng)作。對(duì)于某種單片機(jī),若采用了1MHZ的時(shí)鐘頻率,則時(shí)鐘周期為1us;若采用4MHZ的時(shí)鐘頻率,則時(shí)鐘周期為250ns。由于時(shí)鐘脈沖是計(jì)算機(jī)的基本工作脈沖,它控制著計(jì)算機(jī)的工作節(jié)奏(使計(jì)算機(jī)的每一步都統(tǒng)一到它的步調(diào)上來(lái))。顯然,對(duì)同一種機(jī)型的計(jì)算機(jī),時(shí)鐘頻率越高,計(jì)算機(jī)的工作速度就越快。但是,由于不同的計(jì)算機(jī)硬件電路和器件的不完全相同,所以其所需要的時(shí)鐘周頻率范圍也不一定相同。我們學(xué)習(xí)的8051單片機(jī)的時(shí)鐘范圍是1.2MHz-12MHz。 在8051單片機(jī)中把一個(gè)時(shí)鐘周期定義為一個(gè)節(jié)拍(用P表示),二個(gè)節(jié)拍定義為一個(gè)狀態(tài)周期(用S表示)。

          機(jī)器周期

          在計(jì)算機(jī)中,為了便于管理,常把一條指令的執(zhí)行過(guò)程劃分為若干個(gè)階段,每一階段完成一項(xiàng)工作。例如,取指令、存儲(chǔ)器讀、存儲(chǔ)器寫等,這每一項(xiàng)工作稱為一個(gè)基本操作。完成一個(gè)基本操作所需要的時(shí)間稱為機(jī)器周期。一般情況下,一個(gè)機(jī)器周期由若干個(gè)S周期(狀態(tài)周期)組成。8051系列單片機(jī)的一個(gè)機(jī)器周期同6個(gè)S周期(狀態(tài)周期)組成。前面已說(shuō)過(guò)一個(gè)時(shí)鐘周期定義為一個(gè)節(jié)拍(用P表示),二個(gè)節(jié)拍定義為一個(gè)狀態(tài)周期(用S表示),8051單片機(jī)的機(jī)器周期由6個(gè)狀態(tài)周期組成,也就是說(shuō)一個(gè)機(jī)器周期=6個(gè)狀態(tài)周期=12個(gè)時(shí)鐘周期。

          指令周期

          指令周期是執(zhí)行一條指令所需要的時(shí)間,一般由若干個(gè)機(jī)器周期組成。指令不同,所需的機(jī)器周期數(shù)也不同。對(duì)于一些簡(jiǎn)單的的單字節(jié)指令,在取指令周期中,指令取出到指令寄存器后,立即譯碼執(zhí)行,不再需要其它的機(jī)器周期。對(duì)于一些比較復(fù)雜的指令,例如轉(zhuǎn)移指令、乘法指令,則需要兩個(gè)或者兩個(gè)以上的機(jī)器周期。
          通常含一個(gè)機(jī)器周期的指令稱為單周期指令,包含兩個(gè)機(jī)器周期的指令稱為雙周期指令。

          一、10MS定時(shí)器初值的計(jì)算:

          1.晶振12M

          12MHz除12為1MHz,也就是說(shuō)一秒=1000000次機(jī)器周期。10ms=10000次 機(jī)器周期。
          65536-10000=55536(d8f0)
          TH0=0xd8,TL0=0xf0
          2.晶振11.0592M

          11.0592MHz除12為921600Hz,就是一秒921600次機(jī)器周期,10ms=9216次機(jī)器周期。
          65536-9216=56320(dc00)
          TH0=0xdc,TL0=0x00

          二、50MS定時(shí)器初值的計(jì)算:

          1.晶振12M
          12MHz除12為1MHz,也就是說(shuō)一秒=1000000次機(jī)器周期。50ms=50000次 機(jī)器周期。

          65536-50000=15536(3cb0)

          TH0=0x3c,TL0=0xb0

          2.晶振11.0592M

          11.0592MHz除12為921600Hz,就是一秒921600次機(jī)器周期,50ms=46080次機(jī)器周期。

          65536-46080=19456(4c00)

          TH0=0x4c,TL0=0x00

          三、使用說(shuō)明

          以12M晶振為例:每秒鐘可以執(zhí)行1000000次機(jī)器周期個(gè)機(jī)器周期。而T 每次溢出最多65536 個(gè)機(jī)器周期。我們盡量應(yīng)該讓溢出中斷的次數(shù)最少(如50ms),這樣對(duì)主程序的干擾也就最小。 開(kāi)發(fā)的時(shí)候可能會(huì)根據(jù)需要更換不同頻率的晶振(比如c51單片機(jī),用11.0592M的晶振,很適合產(chǎn)生串口時(shí)鐘,而12M晶振很方便計(jì)算定時(shí)器的時(shí)間),使用插接式比較方便。
          對(duì)12MHz 1個(gè)機(jī)器周期 1us 12/fosc = 1us

          方式0 13位定時(shí)器最大時(shí)間間隔 = 2^13 = 8.192ms

          方式1 16位定時(shí)器最大時(shí)間間隔 = 2^16 = 65.536ms

          方式2 8位定時(shí)器最大時(shí)間間隔 = 2^8 = 0.256ms =256 us 定時(shí)5ms,計(jì)算計(jì)時(shí)器初值 M = 2^K-X*Fosc/12 12MHz 方式0: K=13,X=5ms,Fosc=12MHz 則 M = 2^13 - 5*10^(-3)*12*10^6/12= 3192 = 0x0C78 THx = 0CH,TLx = 78H,
          方式1: K=16,X=5ms,Fosc=12MHz 則 M = 2^16 - 5*10^(-3)*12*10^6/12= 60536 = 0xEC78 THx = ECH,TLx = 78H,

          50ms 12MHz THx = 3CH,TLx = B0H, 10ms THx = D8H,TLx = F0H,

          方式2: 最大時(shí)間 2^8Fosc/12 = 0.256ms

          十進(jìn)制數(shù)是怎么來(lái)的? 6MHz 一個(gè)機(jī)器周期 12/6 = 2us 定時(shí)1ms 計(jì)數(shù)初值x (2^16-x)*2us = 1000usx = 2^16 - 500 ,TH,TL 可置 -500
          12MHz 一個(gè)機(jī)器周期 12/12 = 1us 12MHz 一個(gè)機(jī)器周期 12/12 = 1us 定時(shí)50ms 計(jì)數(shù)初值x (2^16-x)*1us = 50000usx = 2^16 - 50000 ,TH,TL 可置 -500 定時(shí)器 計(jì)內(nèi)部晶振頻率
          計(jì)數(shù)器 計(jì)外部輸入CPU腳上的脈沖個(gè)數(shù) P3.4(T0) P3.5(T1) 負(fù)跳變加一
          當(dāng)晶振為6MHz時(shí),最高計(jì)數(shù)頻率500KHz


          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();