欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機寫的一個秒表程序,但是發(fā)現單片機時間比手機秒表時間走得慢
[打印本頁]
作者:
陳昌毅
時間:
2019-12-5 23:42
標題:
51單片機寫的一個秒表程序,但是發(fā)現單片機時間比手機秒表時間走得慢
完整代碼如下。還望各位知道的告知小弟一聲是什么原因。
普中的板子
#include <REGX52.H>
sbit L1=P3^1;
sbit L2=P3^0;
unsigned char t_005s;
unsigned char t_s;
unsigned char t_m;
//==============================
void delay(unsigned int j)
{
while(j--);
}
unsigned char code smg_duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
unsigned char code smg_wei[]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c};
void display()
{
P2=smg_wei[0];
//delay(1000);
P0=smg_duan[t_005s%10];
delay(100);
P2=smg_wei[1];
//delay(1000);
P0=smg_duan[t_005s/10];
delay(100);
P2=smg_wei[2];
//delay(1000);
P0=smg_duan[16];
delay(100);
P2=smg_wei[3];
//delay(1000);
P0=smg_duan[t_s%10];
delay(100);
P2=smg_wei[4];
//delay(1000);
P0=smg_duan[t_s/10];
delay(100);
P2=smg_wei[5];
//delay(1000);
P0=smg_duan[16];
delay(100);
P2=smg_wei[6];
//delay(1000);
P0=smg_duan[t_m%10];
delay(100);
P2=smg_wei[7];
//delay(1000);
P0=smg_duan[t_m/10];
delay(100);
}
//=============================
void InitTimer0()
{
TMOD=0x01;
TH1=(65535-50000)/256;
TH1=(65535-50000)%256;
ET0=1;
EA=1;
TR0=1;
}
void ServiceTimer0() interrupt 1
{
TH1=(65535-50000)/256;
TH1=(65535-50000)%256;
t_005s++;
if(t_005s==20)
{
t_s++;
t_005s=0;
if(t_s==60)
{
t_m++;
t_s=0;
}
if(t_m==99)
{
t_m=0;
}
}
}
//=============================
void Scnkey()
{
if (L1==0)
{
delay(500);
if(L1==0)
{
TR0=~TR0;
}
while(L1==0)
{
display();
}
}
if (L2==0)
{
InitTimer0();
delay(500);
if(L2==0)
{
t_005s=0;
t_s=0;
t_m=0;
}
while(L2==0)
{
display();
}
}
}
void main()
{
while(1)
{
Scnkey();
display();
}
}
作者:
axjuan
時間:
2019-12-6 02:58
請參考一下這篇文章
http://www.raoushi.com/mcu/696.html
一般如果是用循環(huán)延時使用12M的晶振要方便些,如果是定時器則是用11.0592的要方便和精確一些.
作者:
wulin
時間:
2019-12-6 06:13
這是因為晶振頻率精度不高或程序不合理引起的誤差。
作者:
man1234567
時間:
2019-12-6 07:58
你取的時基與單片機運行速度有關,可精確計算或用外部時鐘。
作者:
pcbboy
時間:
2019-12-6 08:11
延時函數調整一下,延時太長時間會影響視覺效果。
作者:
HC6800-ES-V2.0
時間:
2019-12-6 08:32
很正常。單片機計時很準的。但你沒有考慮到:當計時達到后,還要執(zhí)行一些語句,也是要用時間的,一次沒有感覺,累積多了,誤差就出來了。真的要走時準確,還得用儀器測量整個程序的運行時間,調整定時器才行。
作者:
moluxiyan
時間:
2019-12-6 08:43
那么多delay能不慢嗎
作者:
xianfajushi
時間:
2019-12-6 08:51
正常,用外部時鐘信號好點,若獲取標準時鐘矯正最佳。
作者:
51hei**1140
時間:
2019-12-6 08:52
那就減少單片機延時
作者:
csmyldl
時間:
2019-12-6 09:12
把中斷程序內 t_005s++;后面的語句移到主循環(huán),或者修改定時時間小于50ms達到比較精確的目的
作者:
xuyaqi
時間:
2019-12-6 09:22
如果誤差不大應該調整定時器系數。
作者:
小黑MZ
時間:
2019-12-6 09:53
計算好延遲,有時候影響很大。晶振對好,不同晶振也會不同。計時器搞好
作者:
飛機翻筋斗
時間:
2019-12-6 09:58
TH1=(65535-50000)/256;
TH1=(65535-50000)%256;
這兩個什么鬼
作者:
jeffwu
時間:
2019-12-6 10:02
delay的時間沒算你機器周期,稍微調整一下就可以了
作者:
sfwrtb
時間:
2019-12-6 10:08
第一確認晶振是否是外部晶振,即晶振是否準確。
第二程序中使用了大量的延時函數會對你的時間造成非常大的影響,建議修改去掉試試。
作者:
廣鐵JOKER
時間:
2019-12-6 10:35
因為單片機執(zhí)行語句需要一定時間,尤其是循環(huán)語句,不同的嵌套方式,就像長循環(huán)和短循環(huán)在內和在外都會有很大影響,一般把長循環(huán)放在內,短循環(huán)放在外,可以減少CPU跨切循環(huán)層的次數,減小響應延時。
作者:
yzwzfyz
時間:
2019-12-6 17:03
本帖最后由 yzwzfyz 于 2019-12-14 01:13 編輯
普通晶振即使精度不夠,但穩(wěn)定度也還是相當高的,時鐘做到日差1秒之內沒有問題。
關鍵看你的程序架構是否合理。
作者:
李言浩
時間:
2019-12-6 21:43
程序有點問題,delay太多了,占內部空間
作者:
兩笙山世
時間:
2019-12-7 12:28
程序運行也是需要時間的,一個循環(huán)下來,肯定與計算的時間不同
作者:
zaw1234567890
時間:
2019-12-7 12:32
主要是振蕩器的原因引起的,和手機的秒表沒有什么可比性,其實手機的秒表也不一定精確
作者:
kui13575728208
時間:
2019-12-7 14:43
你程序寫的不合理 有延時
作者:
天風情
時間:
2019-12-7 15:28
選好晶振,用定時器處理。時序要求越高,越忌用延時,尤其是長延時
作者:
jxa1989
時間:
2019-12-7 17:12
晶振的頻率以及單片機執(zhí)行指令的時間是有誤差的
作者:
chenming8815
時間:
2019-12-7 17:45
建議:調整中斷定時器的時間,盡量長些,例如500ms,這樣CPU響應時間就可以忽略了。精度會很高。另外定時值要精準,不要有誤差。這個需要選擇晶振頻率,及定時值配合,使得定時時間沒有誤差。最后,運行一小時,一天看看有沒有誤差,如果有,在程序里面就一個小時后調整一邊。這樣長期跑起來很小誤差。
作者:
wj_yuq
時間:
2019-12-8 22:54
還要考慮這一堆程序代碼運行時需要的指令周期,會累積進去,讓兩個不同的走得一樣(同步)很麻煩的,所以須“不二法門”。
作者:
shellering
時間:
2019-12-9 09:21
一個是。。本身會有點誤差。。誤差累積起來就會有點差別了
還有一個就是 你的delay太多了。delay在調用的時候 實質上會比你想象的還要多耗時,(因為有誤差,所以和第一點一樣),誤差累積起來,就會不準了
作者:
653247108
時間:
2019-12-9 15:14
跟硬件有關系,也就是跟一個機器周期的時間有關系,所以會有誤差
作者:
李澤訓
時間:
2019-12-10 13:20
因為你程序的原因,
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1