1. 怎麼根據單片機晶振計算每段程序的運算時間啊
用KEIL軟體可以計算時間,將while的起始位置和終止位置加紅點(雙擊即可);
然後左側的SEC後面的就是執行的時間。
再給你幾個延時程序做參考:
軟體延時:(asm)
晶振12MHZ,延時1秒
程序如下:
DELAY:MOV72H,#100
LOOP3:MOV71H,#100
LOOP1:MOV70H,#47
LOOP0:DJNZ70H,LOOP0
NOP
DJNZ71H,LOOP1
MOV70H,#46
LOOP2:DJNZ70H,LOOP2
NOP
DJNZ72H,LOOP3
MOV70H,#48
LOOP4:DJNZ70H,LOOP4
定時器延時:
晶振12MHZ,延時1s,定時器0工作方式為方式1
DELAY1:MOVR7,#0AH;;晶振12MHZ,延時0.5秒
AJMPDELAY
DELAY2:MOVR7,#14H;;晶振12MHZ,延時1秒
DELAY:CLREX0
MOVTMOD,#01H;設置定時器的工作方式為方式1
MOVTL0,#0B0H;給定時器設置計數初始值
MOVTH0,#3CH
SETBTR0;開啟定時器
HERE:JBCTF0,NEXT1
SJMPHERE
NEXT1:MOVTL0,#0B0H
MOVTH0,#3CH
DJNZR7,HERE
CLRTR0;定時器要軟體清零
SETBEX0
RET
C語言延時程序:
10ms延時子程序(12MHZ)
voiddelay10ms(void)
{
unsignedchari,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
1s延時子程序(12MHZ)
voiddelay1s(void)
{
unsignedcharh,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
200ms延時子程序(12MHZ)
voiddelay200ms(void)
{
unsignedchari,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
500ms延時子程序程序:(12MHZ)
voiddelay500ms(void)
{
unsignedchari,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
不過實際得到的延時會存在差異,所以最好用實驗的方法調整延時參數。
http://..com/link?url=D6NFOp_-_ctZ7gAh1VfA-VDEhKsNmWgIq
2. 單片機時間計算
255是錯誤的,定時器 高8位的1相當於256個脈沖
假設一個脈沖是1US
總時間=定時時間*中斷次數+TH0*256+TL0-15536
15536是定時50ms時所裝入的初值,一定要減去
將US換算成mS T=tcount*50+TH0*0.256+TL0/1000-15.536
另外一種方法是將定時器初值設為0,即定時65536US, 這樣總時間為
T=65536*中斷次數+TH0*256+TL0