每一遍,如果是1us,才能是延時約1s。但是,晶振是12MHz,一條匯編的指令就至少是1us,C語言的語句,就要更多。
創新互聯2013年開創至今,是專業互聯網技術服務公司,擁有項目成都做網站、網站建設、外貿營銷網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元博興做網站,已為上家服務,為博興各地企業和個人服務,聯系電話:13518219792
void main(){ TMOD=0x00;TH1=0x3c;TL1=0xb0;EA=1;ET1=1;TR1=1;while(1){ if(i==20){ i=0;//下面寫你要處理的的其他程序,你只要了定時1s。
記下當前時間T1,然后按F10(不進入子函數)調試,再記錄當前時間T2,則延時=T2-T1。多試幾個A,差不多調到1s就夠了。我一般都這么調。你要想明白其中原理,想自己算的話,你就看看delay的匯編代碼段自己算吧。
然后,進行宏定義,代碼如圖所示。然后聲明P1口,如下圖所示。最后,將延時語句全部添加進去,代碼按照圖中所示的直接敲入即可。最后,點擊編譯,生成HEX文件就可以了,這樣51單片機延時語句就完成了。
要看你的時鐘周期,如果是12Mhz的話,每個時鐘周期MC=6*2/12 M =1us,所以延遲是讓機器計數1000000下,上面那個公式你自己套用24Mhz的就是2000000下。c語言的循環次數你自己算,每條指令一個周期,所以樓上的程序在12Mhz下是1s延遲。
本程序來自《單片機C語言程序設計實訓100例——基于8051+Proteus仿真》沒用中斷。
1、C語言的延遲函數一般是利用無意義程序運行來控制時間從而達到延時的目的 舉個例子:for(i=0;ix;i++)for(j=0;j120;j++);這是延時x毫秒的for循環語句。值得注意的是記得最后的;一定得記得寫。
2、delay函數是一般自己定義的一個延時函數。C語言定義延時函數主要通過無意義指令的執行來達到延時的目的。下面給出一個經典的延時函數。
3、唯有Sleep函數,只有Sleep函數參數是用毫秒,比如1000毫秒等于1秒。
4、值等于當前的系統時間。//difftime(end,start)函數difftime();是double類型,用來計算運行的時間,用第一個參數的時間減去第二個參數的時間,得到的值就是運行用了多少時間。
5、delay函數是一個自己定義的延時函數,C語言定義延時函數主要通過無意義指令的執行來達到延時的目,并沒有一個軟件自帶頭文件專門有delay這個函數的。
6、延遲函數,一般建議調用系統函數。不建議循環。特別是多任務操作系統,循環會消耗系統資源。如果是Dos,indows,linux系統建立調用 Sleep()函數。其他系統,請自行查找。
1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。在test.cpp文件中,輸入C語言代碼:Sleep(1000);printf(sleep end.);。編譯器運行test.cpp文件,此時成功執行Sleep()函數在1秒后打打印內容。
2、void 表示函數無返回值 delay (int x): delay函數名,int x表示函數帶一個整型參數x。int y=0; 聲明一個整型變量y。
3、記下當前時間T1,然后按F10(不進入子函數)調試,再記錄當前時間T2,則延時=T2-T1。多試幾個A,差不多調到1s就夠了。我一般都這么調。你要想明白其中原理,想自己算的話,你就看看delay的匯編代碼段自己算吧。
4、可以通過system (pause);實現暫停,應包括stdlib.h頭文件。還可以通過使用getch()和getchar()函數實現,注意應該相應地包括conio.h和stdio.h文件,getch()為非標準函數,需要注意程序的移植性。