欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3022|回復: 9
收起左側

單片機定時器時間誤差修正問題求助!

[復制鏈接]
ID:149451 發表于 2020-4-11 09:28 | 顯示全部樓層 |閱讀模式
在應用一個定時器做時間基準是,想修正晶振、程序產生的誤差,是否可以采用在進入中斷程序后重裝初始值前加個delay_us(  )延時來呢?
如11.0592的晶振,
void timer0_isr() interrupt 1
{
delay_us(  );
TH0=(65536-43520)/256;   // 46080慢2秒/分
TL0=(65536-43520)%256; // 43520快0.5秒/分

countTime++;            
}
回復

使用道具 舉報

ID:401564 發表于 2020-4-11 11:56 | 顯示全部樓層
用12MHZ或者24MHZ的晶振它不香嗎?
如果不是要用到精確的波特率,直接上12MHZ的,一個周期1uS多好計算呀
回復

使用道具 舉報

ID:123289 發表于 2020-4-11 11:59 | 顯示全部樓層
這個方法可行,但不靠譜。
理由:
1、如果有更高級的中斷發生于delay_us(  )期間,則時間延時就錯了。
2、delay_us(  )會占用中斷服務時間,使得其它低級中斷及主程序受到延遲。
3、T0的變速率(CLK)很快,而delay_us(  )相對“慢”。即只能用delay_us(  )做“粗調”。當然,你可以改變T0的復位值,做細調。
回復

使用道具 舉報

ID:123289 發表于 2020-4-11 12:00 | 顯示全部樓層
更好的方法是:
不說了,你的思路已對路了,相信你自己能想到。
回復

使用道具 舉報

ID:213173 發表于 2020-4-11 16:25 | 顯示全部樓層
加一個修正系數
char x;//x=+127~-128

TH0=(65536-43520+x)/256;   // 46080慢2秒/分
TL0=(65536-43520+x)%256; // 43520快0.5秒/分
回復

使用道具 舉報

ID:149451 發表于 2020-4-11 18:02 | 顯示全部樓層
Y_G_G 發表于 2020-4-11 11:56
用12MHZ或者24MHZ的晶振它不香嗎?
如果不是要用到精確的波特率,直接上12MHZ的,一個周期1uS多好計算呀

12M的也同樣會存在誤差,我問的是如何消除或減至最小的問題
回復

使用道具 舉報

ID:149451 發表于 2020-4-11 18:04 | 顯示全部樓層
yzwzfyz 發表于 2020-4-11 11:59
這個方法可行,但不靠譜。
理由:
1、如果有更高級的中斷發生于delay_us(  )期間,則時間延時就錯了。

僅就單個簡單程序使用。應該不存在其他問題
回復

使用道具 舉報

ID:149451 發表于 2020-4-11 18:06 | 顯示全部樓層
我以為括號里應該是256的整數倍,x可以在+127~-128嗎?
回復

使用道具 舉報

ID:213173 發表于 2020-4-11 21:06 | 顯示全部樓層
w1179benp 發表于 2020-4-11 18:06
我以為括號里應該是256的整數倍,x可以在+127~-128嗎?

TH0=(65536-43520)/256;
TL0=(65536-43520)%256;

65536-43520=22016=
回復

使用道具 舉報

ID:213173 發表于 2020-4-11 21:13 | 顯示全部樓層
w1179benp 發表于 2020-4-11 18:06
我以為括號里應該是256的整數倍,x可以在+127~-128嗎?

TH0=(65536-43520)/256;
TL0=(65536-43520)%256;
65536-43520=22016=0x5600
0x5600的高8位賦值TH0=0x56
0x5600的低8位賦值TL0=0x00
不存在括號里應該是256的整數倍的問題
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表