<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

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

        STC12C5201AD單片機的PWM功能的應用總結

        作者:劉佳喝   來源:本站原創   點擊數:  更新時間:2014年03月16日   【字體:

        52xxAD系列單片機的內部集成了兩路可編程計數陣列模塊(PCA),可用于軟件定時器、外部脈沖的捕捉、高速輸出和脈寬調制輸出(PWM)。

        這里主要是對PWM輸出功能進行介紹。
        首先要清楚與PCA/PWM應用有關的特殊功能寄存器

        符號
        描述
        地址
        位地址及其符號
        復位值
        B7
        B6
        B5
        B4
        B3
        B2
        B1
        B0
        CCON
        PCA control register
        D8H
        CF
        CR
         
         
         
         
        CCF1
        CCF0
        00xx,xx00
        CMOD
        PCA mode register
        D9H
        CIDL
         
         
         
        CPS2
        CPS1
        CPS0
        ECF
        0xxx,0000
        CCAPM0
        PCA module 0 mode register
        DAH
         
        ECOM0
        CAPP0
        CAPN0
        MAT0
        TOG0
        PWM0
        ECCF0
        X000,0000
        CCAPM1
        PCA module 1 mode register
        DBH
         
        ECOM1
        CAPP1
        CAPN1
        MAT1
        TOG1
        PWM1
        ECCF1
        X000,0000
        CL
        PCA base time low
        E9H
         
         
         
         
         
         
         
         
        0000,0000
        CH
        PCA base time high
        F9H
         
         
         
         
         
         
         
         
        0000,0000
        CCAP0L
        PCA module_0 captureregister  low
        EAH
         
         
         
         
         
         
         
         
        0000,0000
        CCAP0H
        PCA module0 capture register high
        FAH
         
         
         
         
         
         
         
         
         
        CCAP1L
        PCA module_1 capture register low
        EBH
         
         
         
         
         
         
         
         
        0000,0000
        CCAP1H
        PCA module_1 capture register high
        FBH
         
         
         
         
         
         
         
         
        0000,0000
        PCA_PWM0
        PCA PWM mode auxiliary register 0
        F2H
         
         
         
         
         
         
        EPC0H
        EPC0L
        Xxxx,xx00
        PCA_PWM1
        PCA PWM mode auxilia
        F3H
         
         
         
         
         
         
        EPC1H
        EPC1L
        Xxxx,xx00

        1、 PCA工作模式寄存器CMOD
        CIDL:空閑模式下是否停止PCA計數的控制位
              當CIDL=0時,空閑模式下PCA計數器繼續工作
              當CIDL=1時,空閑模式下PCA計數器停止工作
        CPS2\CPS1\CPS0:pca計數器脈沖源選擇控制位。
        0     0     0     0,系統時鐘SYSCLK/12
        0     0     1     1,系統時鐘SYSCLK/2
        0     1     0     2,定時器0的溢出脈沖。由于定時器0可以工作在1T模式,所以可以達到計一個時鐘就溢出,從而達到最高頻率CPU工作時時鐘SYSCLOCK,通過改變定時器0的溢出率,可以實現可調頻率的PWM輸出。
        0     1     1     3,ECI/P1.2(或P1.4)腳輸入的外部時鐘(最大速率=SYSCLK/2)
        1     0     0     4,系統時鐘 SYSCLK
        1     0     1     5,系統時鐘/4,sysclk/4
        1     1     0     6, 系統時鐘/6,
        1     1     1     7, 系統時鐘/8
        2、 PCA控制寄存器CCON
        CF:PCA計數器陣列溢出標志位。當PCA計數器溢出時,CF由硬件置位。如果CMOD寄存器的ECF位置位,則CF標志可用來產生中斷。CF位可通過硬件或軟件置位,但只可通過軟件清零。
        CR:PCA計數器陣列運行控制位,該位通過軟件置位,用來啟動計數器陣列計數,通過軟件清零,用來關閉PCA計數器。
        CCF1:pca模塊1中斷標志。當出現匹配或捕獲時該位由硬件置位,必須通過軟件清零
        CCF0:PCA模塊0中斷標志。
        3、 PCA比較/捕獲寄存器CCAPM0和CCAPM1
        ECOM0:允許比較器功能控制位。為1,允許
        CAPP0:正捕獲控制位。為1,允許
        CAPN0:負捕獲控制位。為1,允許
        MAT0:匹配控制位。
              為1時,PCA計數值與模塊的比較/捕獲寄存器的值的匹配將置位CCON寄存器的中斷標志位CCF0。
        TOG0:翻轉控制位。當tog0=1時,工作在PCA高速輸出模式,PCA計數器的值與模塊的比較/捕獲寄存器的值的匹配將使CEX0腳翻轉。(CCP0/PCA0/PWM0/P1.3)
        PWM0:脈沖調節模式
               當PWM0=1時,允許CEX0腳用作脈寬調節輸出(CCP0/PCA0/PWM0/P1.3)
        ECCF0:時能CCF0中斷。使能寄存器CCON的比較/捕獲標志CCF0,用來產生中斷。
        4、 PCA的16位寄存器——低8位CL和高8位CH
        用于保存PCA的裝載值。
        5、 PCA捕捉/比較寄存器——CCAPnL(低位字節)和CCAPnH(高位字節)
        當PCA模塊用于捕獲或比較時,它們用于保存各個模塊的16位捕捉計數值;當PCA模塊用于PWM模式時,它們用來控制輸出的占空比。其中,n=0、1,分別對應模塊0和模塊1.復位值均為00H,對應的地址分別為:
        CCAP0_EAH\ CCAP0H_FAH:
        CCAP1_EBH\CCAP1H_FAH;
         
        PCA模塊的工作模式設定表如下:
        ECOMn  CAPPn   CAPNn   MATn   TOGn    PWMn   ECCFn      模塊功能
           0     0        0        0      0        0        0     無此操作
           1     0        0        0      0        1        0     8位PWM,無中斷
           1     1        0        0      0        1        1     8位PWM輸出,由低變高可產生中斷
           1     0        1        0      0        1         1    8位PWM輸出,由高變低可產生中斷
           1     1        1        0      0        1         1     8位PWM輸出,由低變高或者有高變低均可產生中斷
           X     1        0        0      0        0         x     16位捕獲模式,由CCPn/PCAn的上升沿觸發
           X     0        1        0      0        0         x     16位捕獲模式,由CCPn/PCAn的下降沿觸發
           X     1        1        0      0        0         x     16位捕獲模式,由CCPn/PCAn的跳變觸發
           1     0        0        1      0        0         x     16位軟件定時器
           1     0        0        1      1        0        x      16位高速輸出
        6、     PCA的16位計數器——低8位CL和高8位CH
        用于保存PCA的裝載值。
        7、     PCA捕捉/比較寄存器CCAPnL(低位字節)和CCAPnH(高位字節)
        當PCA 模塊用于捕獲或比較時,它們用于保存各個模塊的16位捕捉計數值;當PCA模塊用于PWM模式時,它們用來控制輸出的占空比。其中,n=0,1分別對應模塊0和模塊1.復位值均為00H。它們對應的地址分別為:
        CCAP0L_EAH\   CCAP0H_FAH:模塊0的捕捉/比較寄存器
        CCAP1L_EBH\   CCAP1H_FBH:模塊1的捕捉/比較寄存器。
        脈寬調節模式
        Plus width modulation 是一種使用程序來控制波形占空比、周期、相位波形的技術,在三相電機驅動,D/A轉換等場合有廣泛的應用。
        STC12C5201AD系列的PCA模塊可以通過程序設定,使其工作于8位PWM模式。
        由于所有的模塊共用僅有的PCA定時器,所有它們的輸出頻率相同。各個模塊的輸出占空比是獨立變化的,與使用的捕捉寄存器EPCnL,CCAPnL有關。當寄存器CL的值小于EPCnL,CCAPnL時,輸出為低;當寄存器CL的值大于等于EPCnL,CCAPnL的值時,輸出為高。當CL得值由FF變為00溢出時,EPCnH,CCAPnH的內容裝載到EPCnL,CCAPnL中,這樣就實現無干擾的更新PWM 。要使用PWM模式,模塊CCAPMn寄存器的PWMn和ECOMn位必須置位。
        由于PWM是8位的,故PWM的頻率=PCA時鐘輸入源頻率/256
        PCA時鐘輸入源可以從以下的幾種進行選擇:SYSCLK SYSCLY/2 SYSCLK/4 SYSCLK/6 SYSCLK/8 SYSCLK/12 定時器0的溢出,ECI/P3.4的輸入。
        如果要實現可調頻率的PWM 輸出,可選擇定時器0的溢出率或則ECI腳的輸入作為PCA/PWM的時鐘輸入源
        當EPCnL=0及CCAPnL-00H時,PWM固定輸出高
        當EPCnL=1及CCAPnL=FFH時,PWM固定輸出低
        當某個I/O口作為PWM使用時,改口的狀態
        PWM之前口的狀態           PWM輸出時口的狀態
        弱上拉/準雙向          強推挽輸出/強上拉輸出,要加輸出限流電阻1K-10K
        強推挽輸出/強上拉輸出  強推挽輸出/強上拉輸出,要加輸出限流電阻1K-10K
        僅為輸入/高阻           PWM無效
        開漏                     開漏
        下面便是STC手冊中的一個C語言例子
        #include<reg51.h>
        #include “intrins.h”
        #define FOSC 12000000L
        Typedef unsigned int WORD;
        Typedef unsigned char BYTE;
        sfr CCON=0xd8;//PCA control register
        sbit CCF0=CCON^0;//PCA module_0 interrupt flag
        sbit CCF1=CCON^1;//pca module_1 interrupt flag
        sbit CR=CCON^6;//pca time run control bit
        sbit CF=CCON^7;//PCA timer overflow flag
        sfr CMOD=0xd9;//pca mode register
        sfr CL=0xe9;//PCA base time low
        sfr CH=0xf9;//PCA base time high
        sfr CCAPM0=0XDA;//PCA module_0 mode register
        sfr CCAP0L=0XEA;//PCA module_0 capture register low
        sfr CCAP0H=0XFA;//PCA module_0 capture register high
        sfr CCAPM1=0XDB;//PCA module_1 mode register
        sfr CCAP1L=0xeb;//PCA module_1 capture register low
        sfr CCAP1H=0XFB,//PCA module_1 capture register high
        sfr PCAPWM0=0XF2;
        sfr PCAPWM1=0XF3;
        void main()
        {
         CCON=0;//initial PCA control register
               //PCA timer stop running
                //clear CF flag
                //clear all module interrupt flag
        CL=0;//reset PCA base timer
        CH=0;
        CMOD=0X02;//set PCA time clock source as fosc/2
                           //disable PCA timer overflow interrupt
        CCAP0H=CCAP0L=0X80;//PWM0 port output 50% duty cycle sequare wave
        CCAPM0=0X42;//PCA module_0 work in 8_bit PWM mode
                    // and no PCA interrupt
        CCAP1H=CCAP1L=0XFF;//pwm1 port output 0% duty cycle square wave
        PCAPWM1=0X03;//
        CCAPM1=0X42;//PCA module_1 work in 8_bit PWM mode and no PCA interrupt
        CR=1;//PCA timer start run
        While(1);
        }
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮