全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:9601
推到 Plurk!
推到 Facebook!

8051 使用C ,如何作 Delay 2秒?

答題得分者是:mymj
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-29 09:35:42 IP:61.218.xxx.xxx 未訂閱
請教各位前輩 8051 使用C ,如何作 Delay 2秒? 1.如何作隔離2秒亮一燈號P0_1=1 2.如用 P0及P1作四個7段顯示器,用掃描方式要如何作到隔離2秒??    #pragma oe db pw(80) SM SB CD #include         #include "Delay.h" unsigned char code sstbl[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ; unsigned char code loc[]={ 0xf7,0xfb,0xfd,0xfe} ; main() { int w0,w1,w2,w3; int add ; char i ; i=0 ; w0=0; w1=0; w2=0; w3=0; for( ; ;){ add ; if (add>=(P2*10)) { add=0; w3 ; if (w3==10) { w3=0; w2 ; } // if (w2==10) { w2=0; w1 ; } // if (w1==10) { w1=0; w0 ; } // if (w0==10) { w0=0; w1=0; w2=0; w3=0; } } //顯示 P1=0xff ; //關閉共陽 P0=sstbl[w0] ; P1=loc[0] ; P1=0xff ; //關閉共陽 P0=sstbl[w1] ; P1=loc[1] ; P1=0xff ; //關閉共陽 P0=sstbl[w2] ; P1=loc[2] ; P1=0xff ; //關閉共陽 P0=sstbl[w3] ; P1=loc[3] ; //Delay10ms() ; } } 謝謝各位前輩,想不到這還有單晶片討論,大神了
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-30 14:03:51 IP:211.75.xxx.xxx 未訂閱
用Timer去數Counter就好阿 然後如此用 msec=1000; while(msec); 中斷中如此寫 if(msec) --msec;
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-03 22:25:37 IP:61.70.xxx.xxx 未訂閱
謝謝,我看一下 發表人 - jeffreck 於 2004/05/03 22:28:22
kilo_amd
一般會員


發表:15
回覆:13
積分:10
註冊:2003-01-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-06 16:14:56 IP:163.18.xxx.xxx 未訂閱
因為我沒有使用過C來寫 都用組語的寫法 我是讓程式去跑空迴圈 所以要去考慮振蕩的頻率 恩~記得如果使用12Mhz的石英震盪器 那麼一個週期的指令碼 會消耗1us的時間 所以delay 2秒 迴圈就要跑1,000,000次 因為在組語中的佔存器只有八位元(最大即255) 因此2000000=250x200x40 所以需要三個站存器來使用 之後寫一個副程式 DELAY: MOV R5,250 L1: MOV R6,200 L2: MOV R7,40 L3: DJNZ R7,L3 DJNZ R6,L2 DJNZ R5,L1 RET
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-07 09:15:48 IP:61.70.xxx.xxx 未訂閱
引言: 用Timer去數Counter就好阿 然後如此用 msec=1000; while(msec); 中斷中如此寫 if(msec) --msec;
我用中斷寫一個間隔1秒加一的程式, 但是結果快了很多不知那錯了 pragma oe db pw(80) SM SB CD #include #include "Delay.h" int mytime ; main() { mytime=0; TMOD =0x10 ; //模式 TH0= (0xffff-50000)/256 ; TL0=(0xffff-50000)%6 ; EA=1; ET0=1 ; TR0=1 ; for(;;) { } } void timer0(void ) interrupt 1 { int mt; mytime ; if (mytime==20) { mytime=0; //Show mt ; P0=mt; P1=P0; } TH0= (0xffff-50000)/256 ; TL0=(0xffff-50000)%6 ; } 謝謝各位前輩
mymj
版主


發表:132
回覆:486
積分:608
註冊:2002-10-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-08 17:41:39 IP:203.67.xxx.xxx 未訂閱
你一定要考慮cpu clock的問題 如果使用組合語言配合計時器(timer)短短幾行就可解決問題 使用timer來作會比較準確
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-14 11:23:08 IP:61.218.xxx.xxx 未訂閱
引言: 你一定要考慮cpu clock的問題 如果使用組合語言配合計時器(timer)短短幾行就可解決問題 使用timer來作會比較準確
我是使用 C 語言要如何寫 我是用 12Mhz 的 可否指點一下
系統時間:2024-04-24 9:24:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!