『壹』 51單片機定時器模式1定時1us為什麼用了好幾秒啊
你的程序只有這幾行嗎看那沒有ET1=1,開定時器中斷沒有啊。
定時到了,是不能中斷的。
其實,這么設置沒有什麼意義的,因為,執行完TR1=1,這條指令,就開始計時了,只要1個機器周期就定時到。執行完TR1=1,定時就到了。但是還沒有執行EA=1;就不能中斷,還得等到ET1=1以後,才能中斷。其實,早就定時到了,但沒有執行ET1=1是不能中斷。
單片機響應中斷後,轉去執行中斷服務子程序,這需要更多的機器周期,遠遠超過1個機器周期,因此,你的設置是無理的。
而你的程序就沒有ET1=1,所以,不可能中斷的。
等了好幾秒.........為什麼啊看就應該等啊。
『貳』 51單片機c語言延時函數 Void delay 1ms(unsigned int ms){un
C程序中可使用不同類型的變數來進行延時設計。經實驗測試,使用unsigned char類型具有比unsigned int更優化的代碼,在使用時應該使用unsigned char作為延時變數。 以某晶振為12MHz的單片機為例,晶振為12MHz即一個機器周期為1us。
void delay_ms(unsigned int ms_number) // ms延時函數 (AT89C51 @ 11.0592MHz)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
void Delay()
{
unsigned char a,b,c;
for(a=0;a<?;a++)
for(b=0;b<?;b++)
for(c=0;c<?;c++);
}
void delay_ms(unsigned int ms)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
拓展資料
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
『叄』 c語言中一個標準的延時1us的函數怎麼寫
如果是單片機上,是有可能的
單片機12M晶振執行一條指令1us,所以C語言1us延時程序 用12M晶振延時1us,用—_nop_();
#include<intrins.h> //頭文件
_nop_(); //這一個語句表示1us延時
『肆』 15單片機的1us延時,要精確,11.0592MHZ,1T的,就是藍橋杯的那個板子,謝謝^_^
糾正一下,STC12C5A60S2內核是1T的,默認是沒有進行12分頻的,11.0592晶振,那麼機器周期=時鍾周期=1/11.0592=0.09042us
這個軟體延時是有點誤差,1us左右,想要精準,還是用定時器吧。
那麼1us延時如下:
void Delay1us() //@11.0592MHz
{
_nop_();
}
或者
void delay1us(void) //誤差 -0.005353009259us
{
unsigned char a;
for(a=4;a>0;a--);
}
或者
void delayus(unsigned int us)
{
while(us--);
}
『伍』 如何在11.0592MHZ的頻率下給單片機一個1US的延時。
1us?在11.0592MHZ晶振下,機器周期就是12/11.0592M約等於1us,用一條空操作指令就行噻。匯編:NOP;
C語言:用_nop_();時記得加上#include <intrins.h> 頭文件
『陸』 89C51單片機一個機器周期為1us,把下列延時程序時間精確到50000us,程序越短越好,盡量使用下面的指令。
差不多就成了,用不著那麼精確,相同類型的不同個晶振間都還存在著差異,不在乎那麼一點點,再說,如果有中斷干擾,這種延時誤差會增大
『柒』 51單片機1us延時c語言程序 while語句 晶振12MHZ
51單片機12M晶振延時1us,只需要執行一個NOP就是了。C語言中也是如此。
#include<reg51.h>
#include<intrins.h>
main()
{
_nop_(); //延時1us
while(1);
}
『捌』 51單片機12M晶振延遲1us代碼解析
12MHz頻率,延遲1us,是不可能的。
就是調用函數、什麼也不幹、馬上就返回,也不止 4us。
『玖』 求一個1ms的單片機C語言延時程序
void
delay(char
x)
{
unsigned
char
a,b,c;
for(c=x;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
學過標准C就知道了,char
和
int
是可以相互轉換的,char的取值范圍是-128~+127
unsigned
char
的是0~255
可以用unsigned
int啊,我一般都是用char的,用unsigned
int的話占的位元組比較多,運行速度也沒char那麼快,計算機會麻煩點,建議使用char