c語(yǔ)言一毫秒的延時(shí)程序 單片機(jī)延時(shí)1秒如何計(jì)算要最詳細(xì)一點(diǎn)的要過(guò)程用C語(yǔ)言?
單片機(jī)延時(shí)1秒如何計(jì)算要最詳細(xì)一點(diǎn)的要過(guò)程用C語(yǔ)言?Unsigned char rsecondcount//seconds countUnsigned char rmintecount//minute
單片機(jī)延時(shí)1秒如何計(jì)算要最詳細(xì)一點(diǎn)的要過(guò)程用C語(yǔ)言?
Unsigned char rsecondcount//seconds count
Unsigned char rmintecount//minutes
sbit isonnesecondarch
sbit pulse|Sec=P1^0
sbit pulse|Min=P1^1
main()]{
rsecondcount=0
rmintecount=0
th1=0x3c
tl1=0xaf//計(jì)時(shí)器50ms生成中斷(ffff-3caf)us
mod 0x10//計(jì)時(shí)器1工作在模式1中,(它可以在模式2下工作,而且更簡(jiǎn)單)
tr1=1//啟用定時(shí)器1
ET1=1//開(kāi)/關(guān)
ea=1//開(kāi)全局中斷
而(1)]{
[if](isonesecondarch){
]isonesecondarch=0
//做點(diǎn)什么。如果1秒的延遲標(biāo)志為1,則清除該標(biāo)志,等待下一秒,然后執(zhí)行要執(zhí)行的程序
}
!/*定時(shí)器50ms生成一個(gè)中斷*/
無(wú)效定時(shí)器(void)中斷3
{
/*重新加載T1參數(shù)*/
th1=0x3c
tl1=0xaf
/*1秒累計(jì)*/
rsecondcount//秒計(jì)時(shí)1
如果(rsecondcount==20)//1秒到,50ms*20]{{{
!]脈沖寬度為50ms。如果有其他要求,修改T1參數(shù)和“秒分鐘”參數(shù)連接在一起
在keil中,如果模擬,在配置中將晶體振蕩器調(diào)整為12Mhz,然后在調(diào)用延遲函數(shù)的地方設(shè)置斷點(diǎn)。開(kāi)始調(diào)試程序并運(yùn)行到斷點(diǎn)。注意,在程序的左側(cè)有一個(gè)窗口來(lái)記錄當(dāng)前寄存器和一些狀態(tài)。其中,有一個(gè)變量記錄當(dāng)前運(yùn)行時(shí)間,記錄當(dāng)前時(shí)間T1,然后按F10(不進(jìn)入子函數(shù))調(diào)試,并記錄當(dāng)前時(shí)間T2,則延時(shí)=T2-T1。
再?lài)L試幾次,就可以調(diào)整到大約一秒鐘。
我通常都是這樣。
如果您想了解原理并自己計(jì)算,可以查看delay的匯編代碼部分。