設(shè)計脈寬占空比50%,25%可調(diào)的脈沖發(fā)生器
單片機實驗設(shè)計:要求使用8951系列單片機,設(shè)計脈寬占空比50%,25%可調(diào)的脈沖發(fā)生器,周期2秒。
P1.1輸出PWM。
P3.3接開關(guān),低電平時占空比50%、高電平時占空比25%。
問題補充:晶振是6MHz。
;=================================================
最佳答案:
;下列程序,經(jīng)過編譯、仿真,符合要求。
;-------------------------------------
ORG 0000H
JMP START
ORG 000BH
JMP T0_INT
;-------------------------------------
START:
MOV TMOD, #01H
MOV TH0, #9EH
MOV TL0, #58H ;50ms@6MHz
SETB TR0
SETB ET0
SETB EA
MOV R2, #10
LOOP:
CLR PSW.5
CLR P1.1 ;輸出0,這是一個周期的開始
JNB PSW.5, $ ;等待500ms
CLR PSW.5
JNB PSW.5, $ ;再等待500ms
CLR PSW.5
MOV C, P3.3 ;輸入,如果P3.3為低
CPL C
MOV P1.1, C ;就輸出高,這就是50%占空比
JNB PSW.5, $ ;繼續(xù)等待500ms
CLR PSW.5
SETB P1.1 ;如果到這里才輸出高,就是25%占空比
JNB PSW.5, $ ;輸出高500ms
SJMP LOOP
;-------------------------------------
T0_INT: ;50ms執(zhí)行一次
MOV TH0, #9EH ;重新賦初始值
MOV TL0, #58H ;50ms@6MHz
DJNZ R2, T0_END ;不到10次,轉(zhuǎn)到退出
; ;下列指令都是每隔500ms執(zhí)行一次
MOV R2, #10 ;重新設(shè)置
SETB PSW.5 ;每隔500ms,設(shè)置一次1
T0_END:
RETI
;-------------------------------------
END
;-------------------------------------
編譯后的機器語言,僅僅用了74字節(jié)