1. 如何計算單片機延遲程序的延遲時間
Delay: MOV R7,#64H ;本條指令1T
LOOP: MOV R7,#0FAH ;本條指令1T執行100次
DJNZ R6,$ ;本條指令2T執行100*250次
DJNZ R7,LOOP ;本條指令2T執行100次
RET ;本條指令2T
延時時間為:1+100+2*100*250+2*100+2=50303T=100606us=100.606ms
2. 單片機延時程序時間怎麼算
晶振頻率是12MHz,說明單周期指令的執行時間是1us;DJNZ R5,$ 這條指令是自減並判斷是否為零的語句,耗時2us,因此會執行2*248*20=4960us;同理,DJNZ R4,D2 這條指令會執行20*2=40us;另外,MOV R5,248 是單周期指令,執行一次耗時1us,因此 MOV R5,248 這條指令會執行1*20=20us;最後,MOV R4,#20 這條指令執行一次,耗時 1 us ,該程序共耗時 4960us+40us+20us+1us=5021us=5.021ms;
3. 單片機延時0.5秒的程序
晶振11.0592M下的標准延時函數:
void
one_msDelay(uint16
mtime)
//1ms延時函數
{
for(;
mtime
>
0;
mtime--)
{
uint16
j
=
650;
while(--j);
}
}
循環個500次就是0.5s,你可以用示波器測一下。
4. 單片機定時器延時計算方法
用延時函數就可以實現;
首先,設置定時器工作方式,也就是TMOD,在設置TH0/1,TL0/1的初值,也就是定時時間的設置,然後設置中斷允許,並開中斷就可以;
參考例子如下:
#include<reg51.h>
void main()
{
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void timer0() interrupt 1
{
TH0=0X3F;
TL0=0XB0;
}
5. 單片機小精靈的里延時函數的1T和STC1T問題。
STC12C5A60S2單片機是STC系列 1T 的單片機,應該選擇 1T 參數。
6. 1T單片機和12T單片機的延時程序怎麼改
晶振頻率一樣嗎?如果一樣,原理上說,將1T延時常數變成12T延時常數的12倍就行了,否則按照比例調整。
但是可能不一定與之前延時完全一致,比如,有時候循環嵌套深了,計算還要考慮嵌套深度引起的附加延時,否則會出現時間偏差。
另外,如果是我,毫秒級延時多數使用定時中斷,;微秒級延時使用程序中循環延時,並且在程序頭文件中,包含晶振、分頻等因子的宏定義,為中斷、程序循環賦值,這樣修改程序簡單。
7. 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--);
}
8. 單片機程序需要考慮外圍晶元傳輸延遲時間嗎比如stc1T或stm32採用最高頻率時
假如是要非常精確的測量數據,就必須考慮輸出延遲。因為外圍晶元從啟動到輸出也要一定的時間,一般會維持在US級別。你可以去查看晶元的Datasheet
9. Stc12c5a60s2單片機 用他的延時默認情況是安1T計算延時還是按12T。怎麼網上有人說默認
STC下載軟體上對應的Y3選項STC12的「軟體延時計算器」是1T的,「定時器計算器」可以從下拉欄設置選擇1T或12T
10. 為了不修改延時函數,1t的stc單片機如何設置成12t的
12C系列的沒法設置指令執行周期為12T的,但是可以設置CPU時鍾的分頻,從而降低執行速度. 可以參考下CLK_DIV這個寄存器的設置