dzbj 发表于 昨天 02:33

请教12C5608AD的PCA问题

需要用12C5608AD的PCA做16位定时器,
在15系上可用的程序不工作,
然后抄12C56系手册上的范例,也不行,
PCA模块的PWM模式可正常工作

有前辈指导一下么 您给个范例或者帮我看看哪错了

11.0592下5ms定时

void Init_PCA()                                                                //初始化PCA
{
      CCON=0;

      CL=0;
      CH=0;
      CMOD=0x00;                                                                //SYSclk/12

//初始化 PCA模块0

      P0TSV=0x1200;
      CCAP0L=P0TSV;
      CCAP0H=P0TSV>>8;
      CCAPM1=0x49;                                                      //设置 "PCA0模块0模式控制寄存器"=0100 1001(PCA模块1工作于16位软件定时器模式 开PCA中断)

//起动PCA计数器
      CR=1;
//      EPCAI=1;
//      EA=1;                                                            //已经打开
}



void PCA_SER() interrupt 7 using 1                        //PCA中断服务
{
      CCF0=0;
      P0TSV+=0x1200;

      CCAP0L=P0TSV;      
      CCAP0H=P0TSV>>8;

      ct_BLT++;


      if(ct_BLT==100)
      {
                ct_BLT=0;
                P35=!P35;
      }
}



神农鼎 发表于 昨天 10:00


永远使用最新软件,才有最好的资源

深圳国芯人工智能有限公司-工具软件



#include "reg51.h"
#include "intrins.h"

#define FOSC    11059200L
#define T100Hz(FOSC / 12 / 100)

typedef unsigned char BYTE;
typedef unsigned int WORD;

/*Declare SFR associated with the PCA */
sbit EPCAI      =   IE^6;

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 timer run control bit
sbit CF         =   CCON^7;         //PCA timer overflow flag
sfr CMOD      =   0xD9;         //PCA mode register
sfr CL          =   0xE9;         //PCA base timer LOW
sfr CH          =   0xF9;         //PCA base timer 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 CCAPM2      =   0xDC;         //PCA module-2 mode register
sfr CCAP2L      =   0xEC;         //PCA module-2 capture register LOW
sfr CCAP2H      =   0xFC;         //PCA module-2 capture register HIGH
sfr CCAPM3      =   0xDD;         //PCA module-3 mode register
sfr CCAP3L      =   0xED;         //PCA module-3 capture register LOW
sfr CCAP3H      =   0xFD;         //PCA module-3 capture register HIGH

sbit PCA_LED    =   P1^0;         //PCA test LED

BYTE cnt;
WORD value;

void PCA_isr() interrupt 6
{
    CCF0 = 0;                     //Clear interrupt flag
    CCAP0L = value;
    CCAP0H = value >> 8;            //Update compare value
    value += T100Hz;
    if (cnt-- == 0)
    {
      cnt = 100;                  //Count 100 times
      PCA_LED = !PCA_LED;         //Flash once per second
    }
}

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 = 0x00;                  //Set PCA timer clock source as Fosc/12
                                    //Disable PCA timer overflow interrupt
    value = T100Hz;
    CCAP0L = value;
    CCAP0H = value >> 8;            //Initial PCA module-0
    value += T100Hz;
    CCAPM0 = 0x49;                  //PCA module-0 work in 16-bit timer mode and enable PCA interrupt

    CR = 1;                         //PCA timer start run
    EPCAI = 1;
    EA = 1;
    cnt = 0;

    while (1);
}


神农鼎 发表于 昨天 10:02

https://www.stcaimcu.com/data/download/Datasheet/STC12H.pdf

可以使用管脚兼容的 STC12H1K16 来代替 STC12C5608AD系列
STC12H1K16的定时器 T0/T1/T2/T3/T4比较强大











dzbj 发表于 昨天 13:28

神农鼎 发表于 2025-6-15 10:00
永远使用最新软件,才有最好的资源

深圳国芯人工智能有限公司-工具软件


感谢您回复 按您的可用了

很疑惑的说 为毛是中断6。。。。。。。。手册上写的7才是PCA中断 6是LVD 56xx的范例也是7 但确实不行

您方便的话给解惑好么

dzbj 发表于 昨天 13:29

神农鼎 发表于 2025-6-15 10:02
https://www.stcaimcu.com/data/download/Datasheet/STC12H.pdf

可以使用管脚兼容的 STC12H1K16 来代替 ST ...

谢谢 已经从您给的地址下载手册 读一下先

这次用56是因为还有一批存货 功能需求又比较简单 想给用了
页: [1]
查看完整版本: 请教12C5608AD的PCA问题