91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

用定時器定時2秒,為什么實際有將近5秒,這誤差怎么破?

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

m++;

if(m>200)

{

timer=1;

m=201;

}

else

{

timer=0;

}

 

全部回復(39)
正序查看
倒序查看
001a
LV.3
2
2014-02-24 17:29
m=201;這句話你要干什么?
0
回復
2014-02-24 17:29
@001a
m=201;這句話你要干什么?
因為m是判斷key3按住的時間,超過兩秒就切換狀態,我一直按住key3時間過長的話,我怕 m加到65535后又變回0
0
回復
close3
LV.5
4
2014-02-24 17:30
@soap泡泡
因為m是判斷key3按住的時間,超過兩秒就切換狀態,我一直按住key3時間過長的話,我怕m加到65535后又變回0
timer清0放在主函數里,中斷里m的值要0,不清零下次沒法用的
0
回復
2014-02-24 17:32
@close3
timer清0放在主函數里,中斷里m的值要0,不清零下次沒法用的
m我是在鍵盤掃描程序里清0的,下面程序我貼出來了
0
回復
elio
LV.2
6
2014-02-24 17:33
看不懂樓主的程序…貼個完整的吧
0
回復
2014-02-24 17:33
@elio
看不懂樓主的程序…貼個完整的吧
判斷按住key3的時間是否超過兩秒,實際上將近5秒左右,我貼了按鍵程序
0
回復
2014-02-24 17:34
@soap泡泡
判斷按住key3的時間是否超過兩秒,實際上將近5秒左右,我貼了按鍵程序

if(key1==0)

{

Delay_ms(10);

if(key1==0)

{

if(flag==0)

{

num++;

while(!key1);

}

else

{

diandong();

while(!key1);

}

}

}

else if(key2==0)

{

Delay_ms(10);

if(key2==0)

{

if(flag==0)

{

num--;

if(num==-1)

{

num=0;

}

while(!key2);

}

else

{

zidong();

while(!key2);

}

}

}

else if(key3==0)

{

Delay_ms(10);

if(key3==0)

{

m=0;

while(!key3);

if(timer==1)

{

flag=~flag;

led1=~led1;

led2=~led2;

}

else

{

num=0;

}

}

}

0
回復
2014-02-24 17:35
@soap泡泡
if(key1==0){Delay_ms(10);if(key1==0){if(flag==0){num++;while(!key1);}else{diandong();while(!key1);}}}elseif(key2==0){Delay_ms(10);if(key2==0){if(flag==0){num--;if(num==-1){num=0;}while(!key2);}else{zidong();while(!key2);}}}elseif(key3==0){Delay_ms(10);if(key3==0){m=0;while(!key3);if(timer==1){flag=~flag;led1=~led1;led2=~led2;}else{num=0;}}}
我是準備判斷按住key3的時間,假如按一下key3就清0,按住key3超過兩秒就切換狀態
0
回復
vidas
LV.2
10
2014-02-24 17:35
@soap泡泡
我是準備判斷按住key3的時間,假如按一下key3就清0,按住key3超過兩秒就切換狀態

晶振的問題?

0
回復
daylight
LV.4
11
2014-02-24 17:36
keil里面的hz你修改了嗎?
0
回復
soap泡泡
LV.4
12
2014-02-24 17:38
@daylight
keil里面的hz你修改了嗎?
我改了11.0592
0
回復
daylight
LV.4
13
2014-02-24 17:38
@soap泡泡
我改了11.0592
改keil設置那里那個沒用的,代碼本身要改,還有你是不是下載的時候選了:單片機以雙倍速度運行
0
回復
soap泡泡
LV.4
14
2014-02-24 17:39
@daylight
改keil設置那里那個沒用的,代碼本身要改,還有你是不是下載的時候選了:單片機以雙倍速度運行
對啊,好像是的,另外代碼本身怎么改?是什么語句?
0
回復
daylight
LV.4
15
2014-02-24 17:40
@soap泡泡
對啊,好像是的,另外代碼本身怎么改?是什么語句?
首先去掉雙倍速,然后慢慢微調
0
回復
soap泡泡
LV.4
16
2014-02-24 17:40
@daylight
首先去掉雙倍速,然后慢慢微調
微調是一點點改初值嗎
0
回復
daylight
LV.4
17
2014-02-24 17:41
@soap泡泡
微調是一點點改初值嗎

是的

 

0
回復
stony_s
LV.3
18
2014-02-24 17:42
你應該是用的方式1定時的吧,它每次定時應該得重新復初值,你看看你的初值是不是在循環里邊
0
回復
soap泡泡
LV.4
19
2014-02-24 17:43
@stony_s
你應該是用的方式1定時的吧,它每次定時應該得重新復初值,你看看你的初值是不是在循環里邊
我用的是方式0,TMOD=0x11,我真不知道怎么回事,偏差這么大
0
回復
heal
LV.3
20
2014-02-24 17:44
@soap泡泡
我用的是方式0,TMOD=0x11,我真不知道怎么回事,偏差這么大
0x11不就應該是定時方式1么
0
回復
soap泡泡
LV.4
21
2014-02-24 17:47
@heal
0x11不就應該是定時方式1么
是方式1,void T0_time() interrupt 1 { TH0=(65536-10000)/256; TL0=(65536-10000)%256; m++; if(m>100) { timer=1; m=101; } else { timer=0; } TR0=0; display(num); TR0=1; }我每次都是重新賦初值的
0
回復
heal
LV.3
22
2014-02-24 17:48
@soap泡泡
是方式1,voidT0_time()interrupt1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;m++;if(m>100){timer=1;m=101;}else{timer=0;}TR0=0;display(num);TR0=1;}我每次都是重新賦初值的
你把定時初值換成50000,m循環改成40試試,看看差多少
0
回復
soap泡泡
LV.4
23
2014-02-24 17:48
@heal
你把定時初值換成50000,m循環改成40試試,看看差多少
m=40,初值為50000的時候大概3秒多,而m=200,初值為10000的時候大概4秒多,確實有點改變,為什么?
0
回復
heal
LV.3
24
2014-02-24 17:49
@soap泡泡
m=40,初值為50000的時候大概3秒多,而m=200,初值為10000的時候大概4秒多,確實有點改變,為什么?
那就是指令周期的問題了。用匯編可以算的更準確點
0
回復
heal
LV.3
25
2014-02-24 17:49
@heal
那就是指令周期的問題了。用匯編可以算的更準確點
每循環一次,m++,if等語句就執行一次,所以循環次數少的話占用時間就少了
0
回復
soap泡泡
LV.4
26
2014-02-24 17:50
@heal
每循環一次,m++,if等語句就執行一次,所以循環次數少的話占用時間就少了
那也就是這誤差是不可避免的了嗎?
0
回復
heal
LV.3
27
2014-02-24 17:51
@soap泡泡
那也就是這誤差是不可避免的了嗎?
可以通過計算,讓它準確定時2s
0
回復
soap泡泡
LV.4
28
2014-02-24 17:52
@heal
可以通過計算,讓它準確定時2s

謝謝啊

0
回復
candyman
LV.2
29
2014-02-24 17:53
嵌入匯編定時,或或直接匯編,可精確至毫秒,c定時是定不準的
0
回復
soap泡泡
LV.4
30
2014-02-24 17:54
@candyman
嵌入匯編定時,或或直接匯編,可精確至毫秒,c定時是定不準的
是c本身的問題嗎?但是偏差也太大了吧
0
回復
candyman
LV.2
31
2014-02-24 17:54
@soap泡泡
是c本身的問題嗎?但是偏差也太大了吧
因為你不曉得每條c語句的運行時間,而匯編你能準確的算出程序的運行時間,比如12M的晶振 常用的一般 單 是1毫秒 雙是 2毫秒 ,還有一個3毫秒的語句 ,
0
回復
主站蜘蛛池模板: 乡宁县| 平塘县| 米泉市| 尼勒克县| 岚皋县| 兴业县| 佛冈县| 三亚市| 富川| 高唐县| 朝阳市| 富阳市| 玉林市| 福安市| 永兴县| 安吉县| 宝清县| 日喀则市| 霍城县| 利川市| 寻甸| 卢湾区| 富源县| 顺昌县| 平江县| 临泽县| 横山县| 冀州市| 赤峰市| 杭锦旗| 台北县| 库尔勒市| 大田县| 东莞市| 奉贤区| 渝北区| 宁波市| 禹州市| 崇信县| 中西区| 宁蒗|