找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2459|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

stc15單片機(jī)pca用T0分頻,只能用16位自動(dòng)重載模式嗎

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:92556 發(fā)表于 2020-8-21 22:52 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式



想要實(shí)時(shí)改變輸出的頻率,比如用按鍵調(diào)節(jié)不同的頻率

想使用T0,模式1,改變重載數(shù)值,的方法來(lái)改變,輸出頻率但是不行,

只能象下面一樣用16位自動(dòng)重載模式嗎


//本示例在Keil開(kāi)發(fā)環(huán)境下請(qǐng)選擇Intel的8058芯片型號(hào)進(jìn)行編譯
//若無(wú)特別說(shuō)明,工作頻率一般為11.0592MHz


#include "STC15W401AS.h"

//-----------------------------------------------

#define FOSC 11059200L

#define CCP_S0 0x10               //P_SW1.4
#define CCP_S1 0x20               //P_SW1.5
//-----------------------------------------------
#define uint unsigned int
#define uchar unsigned char
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1
{
    //P10 = ! P10;                    //將測(cè)試口取反
}

/* Timer2 interrupt routine */
void tm2_isr() interrupt 12
{
    //P11 = ! P11;                    //將測(cè)試口取反
}
float PL;
int Xt1,Xt0;
        float t1,t0;
        uchar hZ1,l1,h0,l0;

//-----------------------------------------------

void Init_usart1()
{   
          SCON=0X50;
          T2L=(65536-(FOSC/4/19200));   //這個(gè)單片機(jī)沒(méi)有定時(shí)器1,因此,用定時(shí)器2作為波特率發(fā)生器。
    T2H=(65536-(FOSC/4/19200))>>8;
    AUXR=0x14;                //T2為1T模式,并啟動(dòng)定時(shí)器2
    AUXR|=0x01;               //選擇定時(shí)器2為串口1的波特率發(fā)生器
    ES=1;                     //使能串口1中斷
    EA=1;
}

void dutyANDf(void)
{


        t1=0.5/PL;                             //高電平時(shí)長(zhǎng)
        t0=(1/PL)-t1;                        //低電平時(shí)長(zhǎng)
        Xt1=65536-1000000*t1;        //高電平的時(shí)長(zhǎng)轉(zhuǎn)換成的定時(shí)器16位數(shù)
        Xt0=65536-1000000*t0;;  //低電平的時(shí)長(zhǎng)轉(zhuǎn)換成的定時(shí)器16位數(shù)

        hZ1=(uchar)(Xt1>>8);     //高電平高八位保存
        l1=(uchar)Xt1;                //高電平低八位保存
       // h0=(uchar)(Xt0>>8);     //低電平高八位保存
       // l0=(uchar)Xt0;                //低電平低八位保存


}


/* main program */
void main()
{
                P1M1 &= ~1; //P1.x 設(shè)置為推挽輸出
    P1M0 |=  1;
       
               
                ACC=P_SW1;                    //讀取外圍設(shè)備控制切換寄存器
    ACC&=~(CCP_S0|CCP_S1);        //CCP_S0=0 CCP_S1=0,設(shè)置PWM0輸出在P1.1引腳。
    P_SW1=ACC;                    //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
    CCON=0;                       //初始化PCA控制器                                                                      //??CF                                    //????????
    CL=0;                         //復(fù)位PCA寄存器高低位
    CH=0;                         //
    CMOD=0x84;                    //設(shè)置PCA時(shí)鐘源為T(mén)0的溢出,且禁止所有PCA定時(shí)器溢出中斷(PCA不作定時(shí)器功能)

       
                /*****************************PWM0 - P1.1***************************************/               
    PCA_PWM0=0x80;                //PCA模塊0為6位模式                                       
    CCAP0H=CCAP0L=0x20;           //PWM0占空比50% ((40H-20H)/40H)
               
//        CCAP0H=CCAP0L=0x00;           //PWM0占空比50% ((40H-20H)/40H)
          CCAPM0=0x42;                  //允許CCAPM1比較器功能和PWM功能       
                /*****************************PWM1 - P1.0***************************************/       
               
                PCA_PWM1=0x80;                //PCA模塊0為6位模式                                       
    CCAP1H=CCAP1L=0x30;           //PWM1占空比25% ((40H-30H)/40H)
          CCAPM1=0x42;                  //允許CCAPM2比較器功能和PWM功能               
               
               
                AUXR |= 0x80;                   //定時(shí)器0為1T模式
                 TMOD = 0x00;                    //設(shè)置定時(shí)器為模式0(16位自動(dòng)重裝載)

         TH0 = (65535-156)/256;
                 TL0 = (65535-156)%256;                   //初始化計(jì)時(shí)值
    TR0 = 1;                        //定時(shí)器0開(kāi)始計(jì)時(shí)

               
    CR=1;                         //啟動(dòng)PCA運(yùn)行
    while (1);


}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2020-8-22 06:03 | 只看該作者
自動(dòng)重載模式同樣可以隨時(shí)改變重載數(shù)值,自動(dòng)重載模式比非自動(dòng)重載模式定時(shí)更精準(zhǔn)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:92556 發(fā)表于 2020-8-26 00:36 | 只看該作者
wulin 發(fā)表于 2020-8-22 06:03
自動(dòng)重載模式同樣可以隨時(shí)改變重載數(shù)值,自動(dòng)重載模式比非自動(dòng)重載模式定時(shí)更精準(zhǔn)。

好的,,謝謝回復(fù)  我用定時(shí)器,中斷實(shí)現(xiàn)了實(shí)時(shí)改頻率,有空再按你說(shuō)的試下,,
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表