熟悉STC的PCA模块的同学进来帮帮忙 实在想不明白的问题
这次设计使用STC12C5608AD第一次用PCA模块 使用高速输出模式,使用demo程序,一开始频率很低,加了定义时钟分频CLK_DIV=0x00;,工作正常输出4khz 40khz 400hz都正常 修改T100KHZ的值即可改变延时值改变频率 原程序是输出100k 所以变量起的这个名字
程序需要控制几个端口状态,现在只要在程序里修改任何其余端口的状态 比如FIL_B=0, 即使状态不变 比如FIL_A=1原本就高电平 还是高电平 有这句就出故障输出频率变为45.76HZ 不管以前什么频率端口状态可正常改变就是pca输出频率变了 实在搞不明白
后来发现使用P1=0xDF这类改变端口状态,可以正常工作 ,pca也正常, 现在只能这样调试看看硬件是否正常
可要改变端口的有10多个,而且各自独立,不使用位操作很麻烦 现在情况可能是一出现位操作就不正常 。。。
第一次用PCA模块可能还不熟悉大家给看看
#include <intrins.h>
#include <absacc.h>
#include <STC12C5608.h>
#define FOSC 12000000L //12MHZ晶振
#define T100KHz (FOSC / 4 / 4000)//延时值
typedef unsigned char BYTE;
typedef unsigned int WORD;
sbit FIL_B=P1^5; //控制端口
sbit FIL_A=P2^5;
sbit AMP_B=P1^7;
WORD value;
void PCA_isr()interrupt 7 using 1
{
CCF3 = 0; //Clear interrupt flag
CCAP3L = value;
CCAP3H = value >> 8; //Update compare value
value += T100KHz;
}
void main()
{
AMP_B=1; //此处放置端口状态后 pca输出频率会变化为45.76HZ,无论原来频率多少
CLK_DIV=0x00;
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 timer clock source as Fosc/2
//Disable PCA timer overflow interrupt
value = T100KHz;
CCAP3L = value;
CCAP3H = value >> 8;
value += T100KHz;
CCAPM3 = 0x4d; //PCA module-3 work in 16-bit timer mode
//and enable PCA interrupt,
CR = 1; //PCA timer start run
EPCA_LVD = 1;
EA = 1;
while (1)
{
}
} 是不是 stc单片机 位操作和传统51不一样??
感觉 stc很像avravr不支持位操作stc位操作是否特殊处理过?
以后选择还是慎用 stc 有很多潜在问题 STC12C5608AD芯片PCA的中断号为6而不是7
voidPCA_LVD_Routine(void) interrupt 6;
实在不敢恭维宏晶的Datasheet!
页:
[1]