久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

pic單片機PWM波形產生程序(匯編)

作者:佚名   來源:本站原創   點擊數:  更新時間:2008年08月07日   【字體:

;本例通過編程,在pic單片機pf18f485的控制下使CCP1模塊工作在脈寬調制PWM波形方式下從RC2口上輸出分辨率達10位的

;PWM波形,波形的占空比可以通過鍵盤調節,當按下K1鍵時,輸出的PWM波形的占空比為25%,
;當按下K2鍵時,輸出的PWM波形的占空比為50%,當按下K3鍵時,輸出的PWM波形的占空
;比為75%,當按下K4鍵時,輸出的PWM波形的占空比為100% ,默認輸出波形的占空比為50%
;為了強調編程技巧,鍵盤程序采用變位中斷方式
 
                   LIST          P=18F458
                  INCLUDE          "P18F458.INC"
 
                   DEYH                 EQU          0X20
                   DEYL                  EQU          DEYH+1
                   JIANR                EQU          DEYH+2             ;存儲鍵值用寄存器
                   ORG                   0X00
                   GOTO                MAIN                                   ;轉向主程序
                   ORG                   0X08
                   GOTO                INTSERVE                                     ;轉向中斷服務程序
                   ORG                   0X30
;***************PWM波形產生程序初始化******************
INITIAL
                   CLRF                  INTCON                          ;禁止總中斷和外圍中斷
                   BSF                     INTCON,RBIE                          ;B口變位中斷允許
                   BCF                    INTCON2,7                       ;使弱上拉有效
                   BSF                     INTCON2,1                       ;B口變位中斷高優先級
                   BSF                     RCON,7                             ;使能中斷優先級
                   MOVLW             0XFF
                   MOVWF            PR2                                        ;設置PWM的工作周期
                   MOVLW             0X7F
                   MOVWF            CCPR1L                                ;默認占空比為50%
                   MOVLW             0X3C
                   MOVWF            CCP1CON                           ;設置CCP1模塊為PWM工作方式,且其工作循
                                                                                             ;環的低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,為電平變化
                                                                                             ;中斷的產生創造初始條件 
                   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節
                   RETURN 
;***************鍵服務子程序******************
KEYSERVE
JIANZHI                                                                             ;確定鍵值的子程序
                   BCF                    PORTB,1                 
                   BCF                    PORTA,3
                   MOVLW             0X03
                   MOVWF            PORTE                                  ;K1,K2置低電平,K3,K4置高電平
                   NOP
                   NOP                                                                  ;使引腳電平穩定
                   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                                                                  ;使引腳電平穩定
                   BTFSS                PORTB,4
                   GOTO                K1                                    ;RB4為0,表示按鍵為K1
                   GOTO                K2                                     ;RB4為1,表示按鍵為K2
 
K3K4         BCF                    PORTE,0
                   BSF                     PORTE,1                                     ;K3置低電平,K4置高電平
                   NOP
                   NOP                                                                  ;使引腳電平穩定
                   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                            ;以上根據按下的鍵把相應的值送給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.zg4o1577.cn 單片機學習網斑竹ccmcu修改)***************
INTSERVE                   NOP
                   BCF                  INTCON,RBIF                           ;清除中斷標志
                   CALL                  KEYDELAY                   ;調用軟件延時子程序消抖動
                   MOVF                PORTB,W                          ;讀PORTB的值,并同時改變中斷發生的條件可
                                                                                             ;以屏蔽一次無用的中斷,又可以防止按鍵時間
                                                                                             ;過長發生連續中斷
                   BTFSC                PORTB,4
                   RETFIE                                                     ;判斷為干擾,則返回,并可以屏蔽一次無用的
;中斷
                   CALL                  KEYSERVE                    ;調用鍵服務子程序,確定鍵值
                   BCF                    PORTB,1
                   BCF                    PORTA,3
                   BCF                    PORTE,0
                   BCF                    PORTE,1                                ;送低電平至K1,K2,K3,K4,以防止鍵掃描
                                                                                             ;時改變K1,K2,K3,K4的電平,從而改變中
;斷條件     
                   BCF                    INTCON,RBIF                           ;鍵掃描時可能會產生"電平變化"而使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
關閉窗口
主站蜘蛛池模板: 在线不卡视频 | 成人黄色三级毛片 | 91国产精品在线 | 色啪网 | 国产精品免费一区二区三区 | 岛国精品| 黄色av网站在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 综合色播| 午夜天堂精品久久久久 | 亚欧精品 | 国产精品久久久久久久久免费相片 | 在线免费观看成人 | 亚洲有码转帖 | 国产98色在线 | 日韩 | 五月天综合网 | 97久久久久久久久 | 91精品国产91久久久久久吃药 | 福利视频一区 | 久久国产亚洲 | 国产高清在线精品一区二区三区 | 视频二区 | 国产精品视频免费观看 | 国产成人精品久久二区二区91 | 国产精品久久一区 | 日本久久精品视频 | 免费在线观看黄视频 | 操久久 | 97色在线视频 | 欧美日韩综合 | 天天干天天操天天射 | 久久99精品国产99久久6男男 | 亚洲国产一区在线 | 国产成人一区二区三区 | 一区二区高清不卡 | 亚洲一区二区久久 | 午夜精品一区二区三区免费视频 | 九九热最新地址 | 国产精品一区网站 | 夜夜草天天草 | 国产精品日韩欧美 |