![]() |
發布時間: 2021-1-8 08:40
正文摘要:定時器產生54us的方波,用Proteus仿真一周期內總是存在20us左右的誤差,試了不一樣的方法,也是一樣的結果,用示波器檢測也是一樣存在誤差。代碼仿真如下: #include<reg52.h> //頭文件 #include<intrins.h ... |
54us的定時用定時器模式2就夠了,8位重裝模式 256-53=203,而且你這種/256,%256的寫法應該是照著書上寫的。。我感覺轉成十六進制寫更好 |
wulin 發表于 2021-1-8 09:59 好的好的,謝謝了,我下午試試 |
suncat0504 發表于 2021-1-8 10:39 我明白你意思了,因為我害怕是我代碼的問題導致的誤差,所以就發這個帖子,想讓大家幫忙看看到底是不是我代碼或者其他設置方面的問題,謝謝哈 |
人人學會單片機 發表于 2021-1-8 10:24 我用示波器檢測過了,和仿真效果一樣 |
用哪門子仿真呢?直接用實物做實驗 用單位的示波器抓取。 |
由于54us定時時間較短,中斷程序中運行TH1=(65536-54)/256;TL1=(65536-54)%256;運算需要占用時間。在ms級定時中此誤差可以忽略,在us級定時其誤差就會明顯。不過芯片設計者早為你想好了應對方法:使用8位自動重裝模式,在發生中斷的同時直接把TH1中數據賦值TL1。示例如下:
![]()
|