请教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;
}
}
永远使用最新软件,才有最好的资源
深圳国芯人工智能有限公司-工具软件
#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);
}
https://www.stcaimcu.com/data/download/Datasheet/STC12H.pdf
可以使用管脚兼容的 STC12H1K16 来代替 STC12C5608AD系列
STC12H1K16的定时器 T0/T1/T2/T3/T4比较强大
神农鼎 发表于 2025-6-15 10:00
永远使用最新软件,才有最好的资源
深圳国芯人工智能有限公司-工具软件
感谢您回复 按您的可用了
很疑惑的说 为毛是中断6。。。。。。。。手册上写的7才是PCA中断 6是LVD 56xx的范例也是7 但确实不行
您方便的话给解惑好么 神农鼎 发表于 2025-6-15 10:02
https://www.stcaimcu.com/data/download/Datasheet/STC12H.pdf
可以使用管脚兼容的 STC12H1K16 来代替 ST ...
谢谢 已经从您给的地址下载手册 读一下先
这次用56是因为还有一批存货 功能需求又比较简单 想给用了
页:
[1]