日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

51單片機定時時間如何校正?

想寫個準確的 定時程序,可是走走走時間會有誤差.請教高手指點.
全部回復(9)
正序查看
倒序查看
chirituzi
LV.1
2
2008-04-12 18:33
2496441207996329.rar
送你一個軟件,51 定時器定時設(shè)定軟件,很好用的!
0
回復
2008-04-16 19:56
@chirituzi
2496441207996329.rar送你一個軟件,51定時器定時設(shè)定軟件,很好用的!
多謝,這個51定時常數(shù)計算軟件真的方便多了.
0
回復
njyd
LV.8
4
2008-04-19 20:28
  定時器從發(fā)出中斷到響應會有個時間間隔,有長有短.
  定時器到時后會繼續(xù)往前走,所以你在響應定時中斷,重寫定時數(shù)前,要讀出定時器中的數(shù),再將定時數(shù)減去這個數(shù)后寫入,當然還要考慮計算和寫入的時間.
  定時器中斷要設(shè)在最高等級,其他中斷都要比它低.
0
回復
2008-04-21 21:24
@njyd
  定時器從發(fā)出中斷到響應會有個時間間隔,有長有短.  定時器到時后會繼續(xù)往前走,所以你在響應定時中斷,重寫定時數(shù)前,要讀出定時器中的數(shù),再將定時數(shù)減去這個數(shù)后寫入,當然還要考慮計算和寫入的時間.  定時器中斷要設(shè)在最高等級,其他中斷都要比它低.
多謝,我就是不清楚:“響應定時中斷,重寫定時數(shù)前,要讀出定時器中的數(shù)”這句話的意思,請大師解釋詳細點.
0
回復
whatcall
LV.5
6
2008-04-21 23:08
我覺得用51自身的定時器來實現(xiàn)計時,誤差是不可避免的. 定時器依賴于晶振的精度,一般的晶振的精度都不會好過0.5%. 那么每走100秒就會有最大0.5秒的誤差.一小時就有18秒的誤差. 如果要精確計時,需要外部提供精確的計時脈沖(通常是用32.768KHz)或直接擴展一片外部RTC芯片. 當然如果只是做粗略炎是之用,倒不必像你說的那樣精確.
0
回復
njyd
LV.8
7
2008-04-24 22:09
@水石頭草
多謝,我就是不清楚:“響應定時中斷,重寫定時數(shù)前,要讀出定時器中的數(shù)”這句話的意思,請大師解釋詳細點.
51系列的定時器作為16位使用時,定時數(shù)據(jù)不會自動寫入,要編段程序來寫.
有段時間沒干這個了,印象中是加一計數(shù),就是一直加到0000H發(fā)出中斷信號.
比如假設(shè)你每次定時的數(shù)據(jù)是20000,重寫入的數(shù)就是65536-20000,這就是你每次響應定時器中斷要重寫入定時器的數(shù).因為只能兩個八位分別寫入,這45536要轉(zhuǎn)換成16進制的高低兩個字節(jié).
  定時器發(fā)出中斷后還繼續(xù)在加一,也許到你響應中斷時已經(jīng)加到了000CH,那么你就讀出這個0CH加到45536的低字節(jié)上(對于你的20000來說就是減),再寫入定時器.當然這要保證你響應中斷不會太遲,如果有可能太遲定時器計數(shù)可能進位到高字節(jié),這樣就要把高低字節(jié)都讀出加到45536上.
0
回復
2008-04-25 19:45
@njyd
51系列的定時器作為16位使用時,定時數(shù)據(jù)不會自動寫入,要編段程序來寫.有段時間沒干這個了,印象中是加一計數(shù),就是一直加到0000H發(fā)出中斷信號.比如假設(shè)你每次定時的數(shù)據(jù)是20000,重寫入的數(shù)就是65536-20000,這就是你每次響應定時器中斷要重寫入定時器的數(shù).因為只能兩個八位分別寫入,這45536要轉(zhuǎn)換成16進制的高低兩個字節(jié).  定時器發(fā)出中斷后還繼續(xù)在加一,也許到你響應中斷時已經(jīng)加到了000CH,那么你就讀出這個0CH加到45536的低字節(jié)上(對于你的20000來說就是減),再寫入定時器.當然這要保證你響應中斷不會太遲,如果有可能太遲定時器計數(shù)可能進位到高字節(jié),這樣就要把高低字節(jié)都讀出加到45536上.
老大能不能舉個例,寫個小程序說明一下呢?
0
回復
njyd
LV.8
9
2008-05-02 14:20
@水石頭草
老大能不能舉個例,寫個小程序說明一下呢?
XX:      PUSH PSW       ;計時中斷
         MOV PSW,#8     ;設(shè)置工作寄存器1區(qū)
         PUSH ACC                                      
         CLR TR0        ;停止定時器計數(shù),以防止操作過程中定時器低位向高位進位.
         MOV A,#DSL     ;讀出定時數(shù)據(jù)低八位
         ADD A,TL0      ;加上定時器中低八位數(shù)據(jù)
         MOV TL0,A      ;寫入定時器低八位
         MOV A,#DSH     ;讀出定時數(shù)據(jù)高八位
         ADDC A,TH0     ;加上定時器中低八位數(shù)據(jù),帶低八位相加后的進位
         MOV TH0,A      ;重置定時數(shù)高八位
         SETB TR0       ;重啟定時器計數(shù)
     ……
     ……
         RETI

    因這這段操作也要占用時間,但只要把定時器中斷定為最高級,這段時間是固定的,只要調(diào)整一下計算所得的定時數(shù)據(jù)就行了.
    用51的定時器計時精度還是有限的,取決于晶振頻率,頻率越低精度越差,但用此方法可以在此限制下最大限度地提高計時精度.
0
回復
2008-05-02 22:35
@njyd
XX:      PUSHPSW      ;計時中斷        MOVPSW,#8    ;設(shè)置工作寄存器1區(qū)        PUSHACC                                              CLRTR0        ;停止定時器計數(shù),以防止操作過程中定時器低位向高位進位.        MOVA,#DSL    ;讀出定時數(shù)據(jù)低八位        ADDA,TL0      ;加上定時器中低八位數(shù)據(jù)        MOVTL0,A      ;寫入定時器低八位        MOVA,#DSH    ;讀出定時數(shù)據(jù)高八位        ADDCA,TH0    ;加上定時器中低八位數(shù)據(jù),帶低八位相加后的進位        MOVTH0,A      ;重置定時數(shù)高八位        SETBTR0      ;重啟定時器計數(shù)    ……    ……        RETI    因這這段操作也要占用時間,但只要把定時器中斷定為最高級,這段時間是固定的,只要調(diào)整一下計算所得的定時數(shù)據(jù)就行了.    用51的定時器計時精度還是有限的,取決于晶振頻率,頻率越低精度越差,但用此方法可以在此限制下最大限度地提高計時精度.
頂,終于能吃透,多謝大蝦們.多謝.
0
回復
發(fā)