找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12947|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

定時(shí)器中斷的值是怎么計(jì)算出來的?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
TH0=0xff ;             //50us延時(shí)常數(shù)
    TL0=0xce ;            //頻率調(diào)節(jié)


定時(shí)器的計(jì)數(shù)值0xff和0xce是怎么算出來的?

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:130508 發(fā)表于 2016-8-10 19:00 | 只看該作者
有人能回答一下嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:7485 發(fā)表于 2016-8-10 21:36 | 只看該作者
具體地說,定時(shí)器溢出產(chǎn)生中斷的條件是“計(jì)數(shù)溢出”。如果設(shè)置成16位定時(shí)器,溢出的條件就是0xffff+1(65535+1)如果你需要在100個(gè)時(shí)鐘以后產(chǎn)生中斷,那你就減去100,過100個(gè)時(shí)鐘后會(huì)溢出。65536-100的結(jié)果轉(zhuǎn)換成16進(jìn)制,高、低字節(jié)就是0xff和0x9c 。如果你的晶振是12M,這就是100us,如果是其他的你要換算。
回復(fù)

使用道具 舉報(bào)

地板
ID:135253 發(fā)表于 2016-8-11 07:01 | 只看該作者
1,首先看你定時(shí)器工作方式,通俗說,也就是到什么值的時(shí)候溢出,產(chǎn)生中斷
例如工作方式1,16位,數(shù)到65535后溢出,假設(shè)你的初值為55535,你就要數(shù)10000下

2,單片機(jī)頻率,假設(shè)12M頻率,那么你每數(shù)一下時(shí)間就是1US,那么10000下就是10ms定時(shí)
回復(fù)

使用道具 舉報(bào)

5#
ID:135253 發(fā)表于 2016-8-11 07:05 | 只看該作者
TH0=0xff ;           
TL0=0xce ;           
因?yàn)?6位2進(jìn)制數(shù)   0ffceH=65486,你看用65536-65486是不是50???與三樓一個(gè)意思
回復(fù)

使用道具 舉報(bào)

6#
ID:111634 發(fā)表于 2016-8-11 22:32 | 只看該作者
本帖最后由 zl2168 于 2016-8-11 22:33 編輯




以上摘自張志良編著80C51單片機(jī)實(shí)用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9




書中電路和程序設(shè)計(jì)有詳細(xì)說明,程序語句條條有注解。




回復(fù)

使用道具 舉報(bào)

7#
ID:136575 發(fā)表于 2016-8-12 14:17 | 只看該作者
TH0=(65536-50)/256=255=0xff; TLO=(65536-50)%256=206=0xce
回復(fù)

使用道具 舉報(bào)

8#
ID:136621 發(fā)表于 2016-8-12 18:26 | 只看該作者
#在這里快速回復(fù)#定時(shí)器1   (16位定時(shí)器)寄存器 TCCR1B = 0x04 設(shè)定 256預(yù)分頻
回復(fù)

使用道具 舉報(bào)

9#
ID:136621 發(fā)表于 2016-8-12 18:27 | 只看該作者
定時(shí)器1   (16位定時(shí)器)寄存器 TCCR1B = 0x04 設(shè)定 256預(yù)分頻
要利用定時(shí)器定時(shí)1秒
1,4000000 / 256 = 15625    說明定時(shí)器每當(dāng) 1/15625 秒 就會(huì)觸發(fā)一次中斷
2,65535 - 15625 = 49910    計(jì)算出要累加多少次才能在1秒后出發(fā)定時(shí)器1的溢出中斷
3,49910 <==> C2 F6           將計(jì)算后的值換算成16進(jìn)制 4, TCNT1H = 0xC2              對寄存器賦值        TCNT1L = 0xF6  
================================================= 例如用16位定時(shí)器TIMER1,4MHZ晶振,256分頻,100ms定時(shí),如何求得初值賦給TCNT1? 65536-(4M/256)*0.1=63973.5
其中,4M是晶體頻率,0.1是定時(shí)時(shí)長單位秒。 對于8位的定時(shí)器
T=(2^8-計(jì)數(shù)初值)*晶振周期*分頻數(shù)=(2^8-計(jì)數(shù)初值)/晶振頻率*




       var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);   









分頻數(shù)計(jì)數(shù)初值=2^8-T/晶振周期/分頻數(shù)=2^8-T*晶振頻率/分頻數(shù)
因?yàn)锳VR一指令 一周期   
IAR For AVR 精確延時(shí)   
C語言中,想使用精確的延時(shí)程序并不容易。IAR 中有這樣的一個(gè)函數(shù) __delay_cycles(),該函數(shù)在頭文件intrinsics.h中定義,函數(shù)的作用就是延時(shí)N個(gè)指令周期。根據(jù)這個(gè)函數(shù)就可以實(shí)現(xiàn)精確的延時(shí)函數(shù)了(但不能做到100%精確度)。 實(shí)現(xiàn)的方法:
建立一個(gè)delay.h的頭文件: #ifndef __IAR_DELAY_H #define __IAR_DELAY_H #include <intrinsics.h>
#define XTAL 8 //可定義為你所用的晶振頻率(單位Mhz)  #define delay_us(x) __delay_cycles ( (unsigned long)(x * XTAL) )  #define delay_ms(x) __delay_cycles ( (unsigned long)(x * XTAL*1000) )




var cpro_psid ="u2572954"; var cpro_pswidth =966; var cpro_psheight =120;









#define delay_s(x) __delay_cycles ( (unsigned long)(x * XTAL*1000000) ) #endif  
注意: __delay_cycles(x),x必須是常量或則是常量表達(dá)式,如果是變量則編譯報(bào)錯(cuò)!   
關(guān)于溢出中斷不管是哪個(gè)單片機(jī)都是不斷累加,使其寄存器溢出觸發(fā)中斷,然后跳轉(zhuǎn)到中斷函數(shù)處執(zhí)行中斷服務(wù)程序。對于定時(shí)器初值的設(shè)定可以加深對定時(shí)器的工作原理的理解。
       ATMega16 里面有8位和16位兩種定時(shí)器,他們何時(shí)會(huì)溢出這個(gè)是固定的,也就是到達(dá)他們的計(jì)數(shù)范圍的最大值就會(huì)產(chǎn)生中斷,8位的定時(shí)器的最大計(jì)數(shù)范圍是0~256(2的8次方),就是累加到256后他就會(huì)產(chǎn)生中斷,16位的定時(shí)器最大計(jì)數(shù)范圍是0~65536(2的16次方),累加到65536時(shí)他就會(huì)產(chǎn)生中斷。      而我們所謂的計(jì)數(shù)初值是就是要設(shè)定定時(shí)器在什么地方開始計(jì)數(shù),以8位定時(shí)器為例比如:初值為100,所以定時(shí)器從100開始累加,累加了156次,加到256后產(chǎn)生中斷,這就是中間消耗的時(shí)間和指令周期就是我們要去設(shè)定的時(shí)間;再比如:初值是200,所以定時(shí)器從200開始累加,累加了56次,加到256后產(chǎn)生中斷,可以看到第一定時(shí)要累加156次才會(huì)中斷而第二次只要[code][/code]
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表