PIC單片機PWM波形產(chǎn)生程序
;本例通過編程,在pic單片機pf18f485的控制下使CCP1模塊工作在脈寬調(diào)制PWM波形方式下從RC2口上輸出分辨率達10位的
;當按下K2鍵時,輸出的PWM波形的占空比為50%,當按下K3鍵時,輸出的PWM波形的占空
;比為75%,當按下K4鍵時,輸出的PWM波形的占空比為100% ,默認輸出波形的占空比為50%
;為了強調(diào)編程技巧,鍵盤程序采用變位中斷方式
LIST P=18F458
INCLUDE "P18F458.INC"
DEYH EQU 0X20
DEYL EQU DEYH+1
JIANR EQU DEYH+2 ;存儲鍵值用寄存器
ORG 0X00
GOTO MAIN ;轉(zhuǎn)向主程序
ORG 0X08
GOTO INTSERVE ;轉(zhuǎn)向中斷服務程序
ORG 0X30
;***************PWM波形產(chǎn)生程序初始化******************
INITIAL
CLRF INTCON ;禁止總中斷和外圍中斷
BSF INTCON,RBIE ;B口變位中斷允許
BCF INTCON2,7 ;使弱上拉有效
BSF INTCON2,1 ;B口變位中斷高優(yōu)先級
BSF RCON,7 ;使能中斷優(yōu)先級
MOVLW 0XFF
MOVWF PR2 ;設置PWM的工作周期
MOVLW 0X7F
MOVWF CCPR1L ;默認占空比為50%
MOVLW 0X3C
MOVWF CCP1CON ;設置CCP1模塊為PWM工作方式,且其工作循
;環(huán)的低2位為11,高8位為01111111=7F
MOVLW 0X04
MOVWF T2CON ;打開TMR2,且使其前分頻為1
BCF TRISC,2 ;設置CCP1引腳為輸出方式
BCF TRISB,1
BCF TRISA,3
BCF TRISE,0
BCF TRISE,1
BSF TRISB,4 ;設置與鍵盤有關的各口的輸入輸出方式
BCF PORTB,1
BCF PORTA,3
BCF PORTE,0
BCF PORTE,1 ;K1,K2,K3,K4四條列線置0,為電平變化
;中斷的產(chǎn)生創(chuàng)造初始條件
MOVF PORTB,W ;讀PORTB端口,建立變位中斷的初始條件
;(由高到低時中斷)
RETURN
;*********鍵盤去抖子程序(8ms的延時)******************
KEYDELAY
MOVLW 0X0A
MOVWF DEYH
AGAIN2 MOVLW 0XFF
MOVWF DEYL
AGAIN1 DECFSZ DEYL,1
GOTO AGAIN1
DECFSZ DEYH,1
GOTO AGAIN2 ;具體程序語句參考3. 2節(jié)
RETURN
;***************鍵服務子程序******************
KEYSERVE
JIANZHI ;確定鍵值的子程序
BCF PORTB,1
BCF PORTA,3
MOVLW 0X03
MOVWF PORTE ;K1,K2置低電平,K3,K4置高電平
NOP
NOP ;使引腳電平穩(wěn)定
BTFSS PORTB,4
GOTO K1K2 ;RB4為0,表示按鍵為K1,K2中的一個
GOTO K3K4 ;RB4為1,表示按鍵為K3,K4中的一個
K1K2 BCF PORTB,1
BSF PORTA,3 ;K1置低電平,K2置高電平
NOP
NOP ;使引腳電平穩(wěn)定
BTFSS PORTB,4
GOTO K1 ;RB4為0,表示按鍵為K1
GOTO K2 ;RB4為1,表示按鍵為K2
K3K4 BCF PORTE,0
BSF PORTE,1 ;K3置低電平,K4置高電平
NOP
NOP ;使引腳電平穩(wěn)定
BTFSS PORTB,4
GOTO K3 ;RB4為0,表示按鍵為K3
GOTO K4 ;RB4為1,表示按鍵為K4,以上對鍵盤進行掃
;描,來確定是哪一個鍵按下
K1 MOVLW 0X01
MOVWF JIANR
GOTO RET
K2 MOVLW 0X02
MOVWF JIANR
BCF PORTA,3
GOTO RET
K3 MOVLW 0X03
MOVWF JIANR
GOTO RET
K4 MOVLW 0X04
MOVWF JIANR ;以上根據(jù)按下的鍵把相應的值送給JIANR
BCF PORTE,1
RET NOP
RETURN
;**********確定占空比為25%的子程序*********
PER25 MOVLW 0X3F
MOVWF CCPR1L
RETURN
;**********確定占空比為50%的子程序*********
PER50 MOVLW 0X7F
MOVWF CCPR1L
RETURN
;**********確定占空比為75%的子程序*********
PER75 MOVLW 0XBF
MOVWF CCPR1L
RETURN
;**********確定占空比為100%的子程序*********
PER100 MOVLW 0XFF
MOVWF CCPR1L
RETURN
;**************中斷程序(注:由http://www.51hei.com 單片機學習網(wǎng)斑竹ccmcu修改)***************
INTSERVE NOP
BCF INTCON,RBIF ;清除中斷標志
CALL KEYDELAY ;調(diào)用軟件延時子程序消抖動
MOVF PORTB,W ;讀PORTB的值,并同時改變中斷發(fā)生的條件可
;以屏蔽一次無用的中斷,又可以防止按鍵時間
;過長發(fā)生連續(xù)中斷
BTFSC PORTB,4
RETFIE ;判斷為干擾,則返回,并可以屏蔽一次無用的
;中斷
CALL KEYSERVE ;調(diào)用鍵服務子程序,確定鍵值
BCF PORTB,1
BCF PORTA,3
BCF PORTE,0
BCF PORTE,1 ;送低電平至K1,K2,K3,K4,以防止鍵掃描
;時改變K1,K2,K3,K4的電平,從而改變中
;斷條件
BCF INTCON,RBIF ;鍵掃描時可能會產(chǎn)生"電平變化"而使RBIF
;置1,再清除一次RBIF以求避免額外中斷
MOVLW 0X01 ;以下通過判斷是哪個鍵按下從
SUBWF JIANR,0 ;而選擇PWM波形的不同占空比
BTFSC STATUS,Z
CALL PER25 ;若是K1按下,則PWM占空比為25%
;以下同理
MOVLW 0X02
SUBWF JIANR,0
BTFSC STATUS,Z
CALL PER50
MOVLW 0X03
SUBWF JIANR,0
BTFSC STATUS,Z
CALL PER75
MOVLW 0X04
SUBWF JIANR,0
BTFSC STATUS,Z
CALL PER100
RETFIE ;中斷返回
;****************************************
MAIN NOP
CALL INITIAL ;初始化
BSF INTCON,GIE ;總中斷允許
HERE GOTO HERE ;等待中斷
END
pwm相關文章:pwm是什么
單片機相關文章:單片機教程
單片機相關文章:單片機視頻教程
單片機相關文章:單片機工作原理
pwm相關文章:pwm原理
脈寬調(diào)制相關文章:脈寬調(diào)制原理
評論