A. 設單片機系統採用6M晶振,寫出用定時器1方式2實現1ms的延時程序
6M晶振,方式2定時1mS的時間太長,不能直接實現,(最大定時應該是512uS)下面是500uS定時示常式序,可在中斷函數中計數每2次得1S。
void Timer1Init(void) //500微秒@6.000MHz
{
AUXR &= 0xBF; //定時器時鍾12T模式
TMOD &= 0x0F; //設置定時器模式
TMOD |= 0x20; //設置定時器模式
TL1 = 0x06; //設置定時初值
TH1 = 0x06; //設置定時重載值
TF1 = 0; //清除TF1標志
TR1 = 1; //定時器1開始計時
}
B. C51單片機,誰幫我寫個1ms的延時
void delay(uint i) //調用子程序所需時間)
{
uchar j,k;
for (j=i; j>0; j--)
for(k=0;k<30;k++);
}
在程序調用函數就可以得到1ms的程序,具體調用如下:
delay(10); //延時1.011ms
C. 51單片機中,寫個延時函數,延時1ms,該怎麼寫,為什麼
用匯編語言寫可以精確計算,但有時想拼出整數的ms或10ms也不容易,計算方法如下圖說明:
而C語言靠經驗和實驗得來的,如下面程序
如果不準(與晶振頻率有關),調K的值,,軟體模擬查看,直到大致准確,想更精確用定時器
void delay(unsigned char i)//延時程序
{
unsigned chari,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
D. 單片機延時1ms問題
首先,不知道你的晶振頻率是多少,然後不知道你使用的是哪種類型的單片機。
我根據KEILC的測試:for循環這個語句是雙周期指令2個機器周期,j=0;j<33;j++。這有三步單周期指令,每次三個機器周期。。。所以時間是(3j+2) 乘以循環次數i。就是時間微秒
上述指令在12MHZ的晶振頻率,AT89S52的單片機測試情況下為0.0001060秒。也就是1MS
E. 求一個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