找回密码
 立即注册
查看: 14|回复: 4

请教12C5608AD的PCA问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-06-15 13:28:14

2

主题

8

回帖

68

积分

注册会员

积分
68
发表于 昨天 02:33 | 显示全部楼层 |阅读模式
需要用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;
        }
}



回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:98
  • 最近打卡:2025-06-15 09:46:00

733

主题

1万

回帖

1万

积分

管理员

积分
16603
发表于 昨天 10:00 | 显示全部楼层

永远使用最新软件,才有最好的资源
截图202506151009537516.jpg
深圳国芯人工智能有限公司-工具软件

截图202506150959499889.jpg

#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);
}


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:98
  • 最近打卡:2025-06-15 09:46:00

733

主题

1万

回帖

1万

积分

管理员

积分
16603
发表于 昨天 10:02 | 显示全部楼层
https://www.stcaimcu.com/data/download/Datasheet/STC12H.pdf

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

截图202506151004316388.jpg


截图202506151005543483.jpg

截图202506151007019126.jpg

截图202506151007318694.jpg

截图202506151008147096.jpg
截图202506151008373304.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-06-15 13:28:14

2

主题

8

回帖

68

积分

注册会员

积分
68
发表于 昨天 13:28 | 显示全部楼层
神*** 发表于 2025-6-15 10:00
永远使用最新软件,才有最好的资源

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

感谢您回复 按您的可用了

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

您方便的话给解惑好么
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-06-15 13:28:14

2

主题

8

回帖

68

积分

注册会员

积分
68
发表于 昨天 13:29 | 显示全部楼层
神*** 发表于 2025-6-15 10:02
https://www.stcaimcu.com/data/download/Datasheet/STC12H.pdf

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

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

这次用56是因为还有一批存货 功能需求又比较简单 想给用了
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 03:45 , Processed in 0.140170 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表