• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    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 ;存儲(chǔ)鍵值用寄存器
    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)先級(jí)
    BSF RCON,7 ;使能中斷優(yōu)先級(jí)
    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中的一個(gè)
    GOTO K3K4 ;RB4為1,表示按鍵為K3,K4中的一個(gè)
    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,以上對(duì)鍵盤進(jìn)行掃
    ;描,來確定是哪一個(gè)鍵按下
    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í)子程序消抖動(dòng)
    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í)可能會(huì)產(chǎn)生"電平變化"而使RBIF
    ;置1,再清除一次RBIF以求避免額外中斷
    MOVLW 0X01 ;以下通過判斷是哪個(gè)鍵按下從
    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

    評(píng)論


    相關(guān)推薦

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

    關(guān)閉
    主站蜘蛛池模板: 霍山县| 内丘县| 汉沽区| 平遥县| 柳州市| 印江| 福建省| 合作市| 日照市| 岑溪市| 吴江市| 清远市| 龙岩市| 鲜城| 莎车县| 元江| 英山县| 大关县| 平谷区| 巴林右旗| 通河县| 化州市| 毕节市| 织金县| 大荔县| 鹰潭市| 清河县| 阿坝| 肇庆市| 怀远县| 屯留县| 宜川县| 沙田区| 嘉善县| 揭西县| 新乡县| 湛江市| 越西县| 京山县| 碌曲县| 平果县|