|
org 0
mov TMOD, #0x01 ; 定時(shí)器0工作在模式1下
mov TH0, #0xFF ; 設(shè)置計(jì)數(shù)器初值,計(jì)數(shù)值為256-24=232
mov TL0, #0xE8
setb TR0 ; 啟動(dòng)定時(shí)器0
setb P1.0 ; 將P1.0引腳輸出高電平
mov R7, #40 ; 設(shè)置占空比為40%
mov R6, #60 ; 設(shè)置循環(huán)計(jì)數(shù)值為60,即輸出周期為1/108kHz=9.259us
Loop:
djnz R6, Loop ; 循環(huán)計(jì)數(shù)器減1,如果不為0則跳轉(zhuǎn)到Loop標(biāo)簽處
clr P1.0 ; 輸出低電平
mov R6, #60 ; 重新設(shè)置循環(huán)計(jì)數(shù)值為60
djnz R7, High ; 占空比計(jì)數(shù)器減1,如果不為0則跳轉(zhuǎn)到High標(biāo)簽處
mov R7, #40 ; 如果占空比計(jì)數(shù)器為0,則重新設(shè)置占空比為40%
High:
setb P1.0 ; 輸出高電平
mov TH0, #0xFF ; 重新設(shè)置計(jì)數(shù)器初值
mov TL0, #0xE8
setb TR0 ; 啟動(dòng)定時(shí)器0
ret ; 返回
該程序使用了定時(shí)器0來(lái)控制方波的頻率和占空比。首先,將定時(shí)器0設(shè)置為模式1,即16位定時(shí)器,然后設(shè)置計(jì)數(shù)器初值為232,使其每計(jì)數(shù)一次需要9.259us,從而實(shí)現(xiàn)108kHz的方波輸出。同時(shí),使用占空比計(jì)數(shù)器R7來(lái)控制方波的占空比,每輸出一個(gè)周期就將占空比計(jì)數(shù)器減1,當(dāng)計(jì)數(shù)器為0時(shí)重新設(shè)置占空比。最后,使用循環(huán)計(jì)數(shù)器R6來(lái)控制方波的輸出周期,每輸出一個(gè)周期就將循環(huán)計(jì)數(shù)器減1,當(dāng)計(jì)數(shù)器為0時(shí)輸出低電平,然后重新設(shè)置循環(huán)計(jì)數(shù)器和占空比計(jì)數(shù)器,再次輸出高電平,從而實(shí)現(xiàn)方波的輸出。 |
|