找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

怎么在一個單片機定時器添加另一個定時器?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:478845 發(fā)表于 2019-7-12 09:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
     在網(wǎng)上查了一些資料,發(fā)現(xiàn)都是在說讓兩個定時器同時工作,但是會因為優(yōu)先級的不一樣,從而導(dǎo)致中斷程序發(fā)生的時間不一樣,所以我就想能不能在一個定時器中添加另一個定時器,或者說用一個的定時器去觸發(fā)另一個定時器?如果能的話,應(yīng)該怎樣做?不能的話,又是因為什么呢?
     本人接觸單片機時間不算太長,沒有系統(tǒng)地學(xué)習(xí)過單片機知識,所以百思不得其解,而且網(wǎng)上的資料也大都是單個定時器的觸發(fā),沒有太深入的說明。
     希望有哪位大神能夠幫我解答疑惑。萬分感謝。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:462827 發(fā)表于 2019-7-12 09:57 | 只看該作者
一個定時器可以分頻復(fù)用成很多個“定時器”的呀
回復(fù)

使用道具 舉報

板凳
ID:478845 發(fā)表于 2019-7-12 10:37 | 只看該作者
hantu 發(fā)表于 2019-7-12 09:57
一個定時器可以分頻復(fù)用成很多個“定時器”的呀

是不是相當(dāng)于在定時器中設(shè)置多個時間變量,并根據(jù)定定時器的溢出頻率來對這些時間變量進行賦值?
這不就相當(dāng)于把定時器當(dāng)做計數(shù)器來使用了么?而且在中斷程序中來對這些變量進行判斷的話,不是會同時進行么?
回復(fù)

使用道具 舉報

地板
ID:477484 發(fā)表于 2019-7-12 11:01 | 只看該作者
在一個定時器中添加另一個定時器?靠定時器工作時間?
回復(fù)

使用道具 舉報

5#
ID:56665 發(fā)表于 2019-7-12 11:09 | 只看該作者
一個定時器可以產(chǎn)生很多軟件定時器
回復(fù)

使用道具 舉報

6#
ID:123289 發(fā)表于 2019-7-12 11:30 | 只看該作者
1、定時器是硬件獨立工作的,所以各計數(shù)器彼此互不相干。
2、當(dāng)計數(shù)計滿時,發(fā)生溢出,產(chǎn)生溢出標記。這時是個關(guān)鍵點。!描述如下:
2.1、溢出即申請中斷,正常是會被響應(yīng)的,但如果中斷已被另一個高級中斷響應(yīng),且響應(yīng)還在執(zhí)行中(高級的進入中斷服務(wù)程序,還未RETI),則申請不會被受理,只能一直申請著,繼續(xù)等待。
2.2、溢出后計數(shù)還是由硬件控制,繼續(xù)進行的,不受影響,但是:只能從0開始向上計數(shù),也即只能從0000向FFFFH逐一計數(shù),通常你是想從某從數(shù)值開始起計的,如從4000H起,也就是中斷響應(yīng)后將計數(shù)器重新復(fù)位成4000H,但是現(xiàn)在中斷不能被即時受理,于是就出問題了(不會從4000H起計)。
2.3、STC的片機考慮到了這一點,你可選擇自動重裝功能(注:標準51也有,但有限制只能8位。STC的可以是16位),當(dāng)你選擇“自動重裝”時,在計數(shù)器溢出時,會被自動重裝成4000H,也就不會出問題了。自動重裝,能保證計數(shù)的起點永遠不受干擾!
2.4、如果高級中斷處理的時間太長(這在高手寫的程序中,是不會發(fā)生的,你將來也要注意這一點。),超過了你的中斷周期,很明顯,這時你的計數(shù)器又計數(shù)了一個循環(huán),即:上個溢出中斷申請未被響應(yīng),新的中斷申請又來了,這樣你就丟失了一次中斷。如果高級中斷處理的時間更長,還會丟失更多個!
2.5、高級中斷處理完成返回退出時,你的中斷才有機會被響應(yīng),這時你計數(shù)到那里了,不知道。但中斷被延時了!只要延時不超過一個周期,影響的只是本次中斷,并不影響下一個(以脈沖為例來解釋,就是本次脈沖變寬了,下次變窄了),不過總的時間(總的N個脈沖寬度還是一定的),還是準確的。
明白這一點,就會知道:
中斷服務(wù)程序必須短,否則可能會影響其它同級或低中斷。這是編程的要點,是不是高手,一看你的中斷服務(wù)程序就知道了。
所有“卡機”都是未做好這一項工作引起的。手機也一樣,電腦也一樣。
回復(fù)

使用道具 舉報

7#
ID:123289 發(fā)表于 2019-7-12 11:32 | 只看該作者
明白以上之后【在一個定時器中添加另一個定時器】就是“天真”的想法了。
回復(fù)

使用道具 舉報

8#
ID:123289 發(fā)表于 2019-7-12 12:10 | 只看該作者
其實只要一個定時器就可以處理N個定時事件,方法如下:
1、設(shè)置N個寄存器R_N(或存儲器,寄存器耗時少),和N個標記位B_N。
2、每次中斷后對R_N-1,減至0時,將R_N復(fù)位成初始值(你定),并將標記位置B_N=1。
3、主程序中,查尋B_N,當(dāng)B_N=1時,將其清0,并執(zhí)行你要處理的事件。
記。憾〞r器中斷服務(wù)程序,就是只做這些寄存器計數(shù),標記位置1的事,所以處理不需要多少時間。而要做的事件,都放在主程序中去做,不要在中斷服務(wù)程序中做。!,中斷服務(wù)程序,只做標記。!記住這些,你離高手就不遠了。當(dāng)然也有不得矣的例外。

回復(fù)

使用道具 舉報

9#
ID:160500 發(fā)表于 2019-7-12 13:03 | 只看該作者
在一個定時器中添加另一個定時器,軟件定時器可以添加,硬件的本來就有,不用添加。用一個定時器去觸發(fā)另一個定時器是可以的。
回復(fù)

使用道具 舉報

10#
ID:496604 發(fā)表于 2019-7-12 20:35 | 只看該作者
定時器分等級,按照等級設(shè)置就行了
回復(fù)

使用道具 舉報

11#
ID:93224 發(fā)表于 2019-7-12 21:16 | 只看該作者
直接操作另外一個定時器就可以了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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