定時(shí)器輸出PWM 實(shí)驗(yàn)
一. 實(shí)驗(yàn)?zāi)康?br>利用定時(shí)器控制產(chǎn)生占空比可變的PWM 波。
二. 實(shí)驗(yàn)設(shè)備及器件
IBM PC 機(jī) 一臺(tái)
DP-51PROC 單片機(jī)綜合仿真實(shí)驗(yàn)儀 一臺(tái)
示波器 一臺(tái)
三. 實(shí)驗(yàn)內(nèi)容
編寫(xiě)一段程序,用P1.0 口輸出PWM 波,用D1 區(qū)的按鍵KEY1 和KEY2 實(shí)現(xiàn)占
空比的增加和降低。用示波器查看P1.0 口的輸出波形。
四. 實(shí)驗(yàn)要求
學(xué)會(huì)使用單片機(jī)的定時(shí)器產(chǎn)生250Hz 的PWM 波。
五. 實(shí)驗(yàn)步驟
1. 用導(dǎo)線連接A2 區(qū)的P11 與D1 區(qū)的KEY1。
2. 用導(dǎo)線連接A2 區(qū)的P12 與D1 區(qū)的KEY2。
3. 將示波器的探針連接到A2 區(qū)的P10。
4. 用示波器觀測(cè)P1.0 口的PWM 波形。
六. 實(shí)驗(yàn)預(yù)習(xí)要求
認(rèn)真閱讀本節(jié)的實(shí)驗(yàn)內(nèi)容,提前做好實(shí)驗(yàn)準(zhǔn)備工作。
七. 實(shí)驗(yàn)參考程序
PWMH DATA 30H ;高電平脈沖的個(gè)數(shù)
PWM DATA 31H ;PWM周期
COUNTER DATA 32H
TEMP DATA 33H
ORG 8000H
AJMP MAIN
ORG 800BH
AJMP INTT0
ORG 8100H
MAIN:
MOV SP,#60H ;給堆棧指針賦初值
MOV PWMH,#02H
MOV COUNTER,#01H
MOV PWM,#15H
MOV TMOD,#02H ;定時(shí)器0 在模式2 下工作
MOV TL0,#38H ;定時(shí)器每200us 產(chǎn)生一次溢出
MOV TH0,#38H ;自動(dòng)重裝的值
SETB ET0 ;使能定時(shí)器0 中斷
SETB EA ;使能總中斷
SETB TR0 ;開(kāi)始計(jì)時(shí)
KSCAN:
JNB P1.1,K1CHECK ;掃描KEY1,
JNB P1.2,K2CHECK ;掃描KEY2,如果按下KEY2,跳轉(zhuǎn)到KEY2 處理
程序
SJMP KSCAN
K1CHECK:
JB P1.1,K1HANDLE ;去抖動(dòng),按下KEY1,跳轉(zhuǎn)到KEY1 處理程序
SJMP K1HANDLE
K1HANDLE:
MOV A,PWMH
CJNE A,PWM,K1H0 ;判斷是否到達(dá)上邊界
SJMP KSCAN ;是,則不進(jìn)行任何操作
K1H0:
MOV A,PWMH
INC A
CJNE A,PWM,K1H1 ;如果在加1 后到達(dá)最大值
CLR TR0 ;定時(shí)器停止
SETB P1.0 ;置P1.0 為高電平
SJMP K1H2
K1H1:
CJNE A,#02H,K1H2 ;如果加1 后到達(dá)下邊界
SETB TR0 ;重開(kāi)定時(shí)器
K1H2:
INC PWMH ;增加占空比
SJMP KSCAN
K2CHECK:
JB P1.2,K2HANDLE ;去抖動(dòng),按下KEY2,跳轉(zhuǎn)到KEY2 處理程序
SJMP K1HANDLE
K2HANDLE:
MOV A,PWMH
CJNE A,#01H,K2H0 ;判斷是否到達(dá)下邊界
SJMP KSCAN ;是,則不進(jìn)行任何操作
K2H0:
MOV A,PWMH
MOV TEMP,PWM
DEC A
CJNE A,#01H,K2H1 ;如果在減1 后到達(dá)下邊界
CLR TR0 ;定時(shí)器停止
CLR P1.0 ;置P1.0 為低電平
SJMP K2H2
K2H1:
DEC TEMP
CJNE A,TEMP,K2H2 ;如果到達(dá)上邊界
SETB TR0 ;啟動(dòng)定時(shí)器
K2H2:
DEC PWMH ;降低占空比
SJMP KSCAN
INTT0:
PUSH PSW ;現(xiàn)場(chǎng)保護(hù)
PUSH ACC
INC COUNTER ;計(jì)數(shù)值加1
MOV A,COUNTER
CJNE A,PWMH,INTT01 ;如果等于高電平脈沖數(shù)
CLR P1.0 ;P1.0 變?yōu)榈碗娖?br>INTT01:
CJNE A,PWM,INTT02 ;如果等于周期數(shù)
MOV COUNTER,#01H ;計(jì)數(shù)器復(fù)位
SETB P1.0 ;置P1.0 為高電平
INTT02:
POP ACC ;出棧
POP PSW
RETI;
END
八. 實(shí)驗(yàn)思考題
(1)請(qǐng)用戶思考一下,用另一種方式實(shí)現(xiàn)定時(shí)器產(chǎn)生PWM 波。
評(píng)論