新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)PWM波形產(chǎn)生程序

        PIC單片機(jī)PWM波形產(chǎn)生程序

        作者: 時(shí)間:2012-12-31 來源:網(wǎng)絡(luò) 收藏

        ;本例通過編程,在pic單片機(jī)的控制下使CCP1模塊工作在脈寬調(diào)制方式下從RC2口上輸出分辨率達(dá)10位的

        ;,波形的占空比可以通過鍵盤調(diào)節(jié),當(dāng)按下K1鍵時(shí),輸出的的占空比為25%,
        ;當(dāng)按下K2鍵時(shí),輸出的PWM波形的占空比為50%,當(dāng)按下K3鍵時(shí),輸出的PWM波形的占空
        ;比為75%,當(dāng)按下K4鍵時(shí),輸出的PWM波形的占空比為100% ,默認(rèn)輸出波形的占空比為50%
        ;為了強(qiáng)調(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)向中斷服務(wù)程序
        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 ;設(shè)置PWM的工作周期
        MOVLW 0X7F
        MOVWF CCPR1L ;默認(rèn)占空比為50%
        MOVLW 0X3C
        MOVWF CCP1CON ;設(shè)置CCP1模塊為PWM工作方式,且其工作循
        ;環(huán)的低2位為11,高8位為01111111=7F
        MOVLW 0X04
        MOVWF T2CON ;打開TMR2,且使其前分頻為1
        BCF TRISC,2 ;設(shè)置CCP1引腳為輸出方式
        BCF TRISB,1
        BCF TRISA,3
        BCF TRISE,0
        BCF TRISE,1
        BSF TRISB,4 ;設(shè)置與鍵盤有關(guān)的各口的輸入輸出方式
        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端口,建立變位中斷的初始條件
        ;(由高到低時(shí)中斷)
        RETURN
        ;*********鍵盤去抖子程序(8ms的延時(shí))******************
        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
        ;***************鍵服務(wù)子程序******************
        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,以上對鍵盤進(jìn)行掃
        ;描,來確定是哪一個鍵按下
        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ù)按下的鍵把相應(yīng)的值送給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 單片機(jī)學(xué)習(xí)網(wǎng)斑竹ccmcu修改)***************
        INTSERVE NOP
        BCF INTCON,RBIF ;清除中斷標(biāo)志
        CALL KEYDELAY ;調(diào)用軟件延時(shí)子程序消抖動
        MOVF PORTB,W ;讀PORTB的值,并同時(shí)改變中斷發(fā)生的條件可
        ;以屏蔽一次無用的中斷,又可以防止按鍵時(shí)間
        ;過長發(fā)生連續(xù)中斷
        BTFSC PORTB,4
        RETFIE ;判斷為干擾,則返回,并可以屏蔽一次無用的
        ;中斷
        CALL KEYSERVE ;調(diào)用鍵服務(wù)子程序,確定鍵值
        BCF PORTB,1
        BCF PORTA,3
        BCF PORTE,0
        BCF PORTE,1 ;送低電平至K1,K2,K3,K4,以防止鍵掃描
        ;時(shí)改變K1,K2,K3,K4的電平,從而改變中
        ;斷條件
        BCF INTCON,RBIF ;鍵掃描時(shí)可能會產(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相關(guān)文章:pwm是什么


        單片機(jī)相關(guān)文章:單片機(jī)教程


        單片機(jī)相關(guān)文章:單片機(jī)視頻教程


        單片機(jī)相關(guān)文章:單片機(jī)工作原理


        pwm相關(guān)文章:pwm原理


        脈寬調(diào)制相關(guān)文章:脈寬調(diào)制原理


        關(guān)鍵詞: PIC單片機(jī) PWM波形 pf18f485

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 梁河县| 邵阳市| 灵山县| 泾源县| 苏州市| 阿图什市| 卢龙县| 南靖县| 凌云县| 临泽县| 滁州市| 晋宁县| 昭苏县| 澎湖县| 泰州市| 武平县| 邹平县| 临桂县| 腾冲县| 水富县| 荣成市| 德安县| 蚌埠市| 洞头县| 河间市| 临汾市| 聂拉木县| 正定县| 镇雄县| 巴彦淖尔市| 准格尔旗| 宜君县| 九江市| 天柱县| 诸城市| 宜良县| 黔东| 珲春市| 安乡县| 咸阳市| 迁西县|