『壹』 用單片機怎麼實現精確計時,不是定時
單片機可以用來 定時器/計數器,用來完成精確定時,也可以用來完成精確計時,比如
要 輸出 一個 按照一定頻率 的方波脈沖,則可以用 定時器中斷,來產生方波脈沖。
如果 要檢測 兩個脈沖的 時間 間隔,則可以用 計數器 來進行計數,
看兩個脈沖間隔 計數器計了 多少數,再計算出是多少時間。
只是使用 定時器/計數器 的 方法不同而已。
『貳』 51單片機怎麼實現計時
嘿嘿 還是讓俺來幫你解決吧
1 關於定時器定時時間的計算問題:
如果使用的是12M晶振計算,指令周期1uS,定時器是加1計數器,即是對內部時鍾即指令周期脈沖計數 每當1uS到時,計數器加1。
假設 定時器的初始值=X,則每到1uS 計數器的值就加1 ,則計數器值=X+1+1+...+1 值越來越大,最後達到FFFFH+1 就會產生溢出 結果計數器值回0(FFFFH+1=65536)
可以推出 定時時間=計數的1的個數×1uS=(65536—X )1 uS
結論: 定時時間跟初始值即時間常數X有關。
如果要定時0.5毫秒=500uS 根據定時時間公式 500=(65536—X )
即X=(65536-500) 一般把高8位送TH0 即 (65536-500)/256
把 (65536-500)%256即除上256後的余數 即低8位數送給TL0
每當定時時間到 計數器值都回0 必須重新送時間常數X
2每條指令的時間怎麼算? 答復:
可以查指令表 每一條指令的執行時間的周期數 都是固定的 如 NOP 為一個機器周期
MOV R6,#200; 為2個機器周期
機器周期=12/晶振頻率 如果晶振頻率=12MHZ 則機器周期=1 uS
就可以知道 ; 執行NOP指令的執行時間為 1 uS
執行MOV R6,#200指令的執行時間為 2 uS
因此 是可以精確計算出指令的延時時間的
呵呵 就介紹這些吧 滿意就 給加分吧
『叄』 單片機計時計分器的計時原理是
單片機計時,就是利用內部的定時器實現的,但是定時器最大隻能定時65毫秒(按晶振12M計算),其實可以定時50毫秒,再用中斷的方式,中斷20次,即計了20次50毫秒,就是1秒鍾了。
有了1秒,其餘的計時問題就好解決了,計時鍾,就按秒,分,小時來計時。
球類計時計分器,也同理,60秒計1分,60分計1小時。
『肆』 【單片機】單片機的定時時間是怎樣計算
單片機的定時時間的計算公式=計數值(定時值)* 機器周期= 計數值(定時值)* 12 / 晶振頻率。
上面的兩個等號是等價的,因為,單片機的機器周期=12秒/晶振頻率,因此兩個公式通用。
完成一個基本操作所需要的時間稱為機器周期。一般,一個機器周期由 若干個S周期(狀態周期)組成。80C51系列單片機一個機器周期由6個S周期組成。一個S周期(狀態周期),由2個時鍾周期組成。
若干個機器周期,組成了指令周期。根據指令不同,所需的機器周期數也不同。
(4)單片機怎麼計時擴展閱讀
幾種典型指令;
1、單位元組周期指令(比如 INC A)
2、雙位元組單周期指令(比如 ADD A,#data)
3、單位元組雙周期指令 (比如 INC DPTR)
4、單位元組雙周期指令 (比如MOVX A @DPTR)
『伍』 單片機倒計時工作原理
單片機倒計時工作原理。在程序中設置一個時間然後不斷的減少時間,時間減少為0時就是倒計時時間到了。
『陸』 單片機定時器設置步驟
搜狐網
晴 / -25°
新手入門!如何設置單片機定時器?
嵌入式資訊精選
2018-12-05
訂閱
在單片機的學習過程中,單片機定時器的合理設置和應用是非常關鍵的一步,也是剛開始接觸單片機知識的新人工程師們比較容易出錯誤的一個環節之一。在今天的文章中,我們為大家總結了單片機定時器應用過程中的兩大常見問題進行實時解析,希望能夠對各位新人工程師的學習提供一定幫助。
問題一:51單片機的T0、T1定時器四種工作方式各有什麼特點?
在單片機定時器的應用過程中,定時器在進行設置時會有四種不同的工作方式,合理選擇相應的工作方式可以幫助工程師快速完成及時設置。下面我們就來逐一講解一下這四種不同的計時方式。方式0是單片機計時器的第一種計時方式,這一方式13位計數模式。方式1則採用16位計數模式,方式2採用8位自動重裝入計數模式,這兩種技術模式也是目前在單片機應用過程中最常使用的及時方式。最後一種單片機定時器的計時方式是方式3,這一模式下只有T0有的雙8位計數模式。
『柒』 單片機如何計時
2個按鈕分別接在2個中斷口上,為單片機擴展一個數碼管,2位還是4位看你需要顯示多少了,或者使用6位,分別顯示時,分,秒
程序是:單片機啟動,初始化,循環等待
中斷0中斷,開始啟動定時器,定時50毫秒,計數20次,計數的值為秒;
秒>60,則分+1,分>60,則時+1.
分別把時分秒數據送到數碼管,數碼管刷新
中斷1中斷,中斷1服務子程序取消定時器中斷,計時停止。
電路硬體:
1、at89c51
2、常開按鈕(輕觸開關)2隻
3、共陰數碼管,6隻。
4、單片機最小系統必須的晶振1塊,電容30pF,2隻,復位電路需要的10u電解電容1隻,電阻10K一隻,開關1隻,供電另計
因為外部器件不多,就直接用P2送數碼管位碼,沒有擴展顯示晶元。
『捌』 單片機定時器的使用方法
第一步:設置特殊功能寄存器 TMOD,配置好工作模式。
第二步:設置計數寄存器 TH0 和 TL0 的初值。
第三步:設置 TCON,通過 TR0 置 1 來讓定時器開始計數。
第四步:判斷 TCON 寄存器的 TF0 位,監測定時器溢出情況。
寫程序之前,我們要先來學會計算如何用定時器定時時間。我們的晶振是 11.0592M,時鍾周期就是 1/11059200,機器周期是 12/11059200,假如要定時 20ms,就是 0.02 秒,要經過x 個機器周期得到 0.02 秒,我們來算一下 x*12/11059200=0.02,得到 x= 18432。16 位定時器的溢出值是 65536(因 65535 再加 1 才是溢出),於是我們就可以這樣操作,先給 TH0 和 TL0一個初始值,讓它們經過 18432 個機器周期後剛好達到 65536,也就是溢出,溢出後可以通過檢測 TF0 的值得知,就剛好是 0.02 秒。那麼初值 y = 65536 - 18432 = 47104,轉成 16 進制就是 0xB800,也就是 TH0 = 0xB8,TL0 = 0x00。
這樣 0.02 秒的定時我們就做出來了,細心的同學會發現,如果初值直接給一個 0x0000,一直到 65536 溢出,定時器定時值最大也就是 71ms 左右,那麼我們想定時更長時間怎麼辦呢?用你小學學過的邏輯,倍數關系就可以解決此問題。
好了,我們下面就用程序來實現這個功能。
#include
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main(){
unsigned char cnt = 0; //定義一個計數變數,記錄 T0 溢出次數
ENLED = 0; //使能 U3,選擇獨立 LED
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
TMOD = 0x01; //設置 T0 為模式 1
TH0 = 0xB8; //為 T0 賦初值 0xB800
TL0 = 0x00;
TR0 = 1; //啟動 T0
while (1){
if (TF0 == 1){ //判斷 T0 是否溢出
TF0 = 0; //T0 溢出後,清零中斷標志
TH0 = 0xB8; //並重新賦初值
TL0 = 0x00;
cnt++; //計數值自加 1
if (cnt 》= 50){ //判斷 T0 溢出是否達到 50 次
cnt = 0; //達到 50 次後計數值清零
LED = ~LED; //LED 取反:0--》1、1--》0
}
}
}
}
程序中都寫了注釋,結合前幾章學的內容,自己分析一下,不難理解。本程序實現的結果是開發板上最右邊的小燈點亮一秒,熄滅一秒,也就是以 0.5Hz 的頻率進行閃爍