本帖最后由 wulin 于 2019-1-13 10:21 编辑
特殊功能寄存器的配置通常用字节设置,多数不支持位操作。
给你一个PWM呼吸灯示例参考,MCU型号15W404AS,按默认CCP0输出端P1.1。注意特殊功能寄存器的配置与STC15W4K32有所区别。
#include <STC15F2K60S2.H>//15系列头文件
#define uint unsigned int
#define uchar unsigned char
//sbit key1=P4^2;
//sbit key2=P4^4;
sbit LED=P1^0;
uchar num=0x00;
bit a=0;
uint b;
void PWM_Init()
{
CCON = 0; //初始化PCA控制寄存器
//PCA定时器停止
//清除CF标志
//清除模块中断标志
CL = 0; //复位PCA寄存器
CH = 0;
CMOD = 0x02; //设置PCA时钟源,PWM频率=12MHZ/2/256=23.4375KHZ
//PWM频率=11.0592MHZ/2/256=21.600KHZ
PCA_PWM0 = 0x00; //PCA模块0工作于8位PWM
CCAP0H = CCAP0L = 0xff; //PWM0的初始占空比为100%
CCAPM0 = 0x42; //PCA模块0为8位PWM模式
CR = 1; //PCA定时器开始工作
}
void scan()
{
static uint count1=0,count2=0;
if(a==0)
{
count1++;
if(count1>=2000)
{
count1=0;
if(num<0xff)
{
num++;
if(num==0xff)
{
a=1;
b=5000;
while(b--);
}
}
}
}
else
{
count2++;
if(count2>=2000)
{
count2=0;
if(num>0)
{
num--;
if(num==0)
{
a=0;
b=5000;
while(b--);
}
}
}
}
}
void main()
{
P1M0 = 0x02; //P1.1推挽输出
P1M1 = 0x00; //P1.1推挽输出
PWM_Init();
while(1)
{
scan();
CCAP0H=num;
}
} |