怪异,我用STC12C5A16的片子学用PWM模块,现在调不了光。。。
哪位帮忙看下,我用STC12C5A16的片子来学习PWM模块运用,程序如下,但不懂干嘛亮度自动变不了。。。#include<reg52.h>
#include<intrins.h>
#define FOSC 18432000L
#define uint unsigned int
#define uchar unsigned char
typedef unsigned char BYTE;
typedef unsigned int WORD;
void PWM();
void time();
uchar timing_1s;
uchar PWM_indicate;
sfr CCON =0xD8;
sbitCCF0 =CCON^0;
sbitCCF1 =CCON^1;
sbitCR =CCON^6;
sbitCF =CCON^7;
sfr CMOD =0xD9;
sfr CL =0xE8;
sfr CH =0xF9;
sfr CCAPM0 =0xDA;
sfr CCAP0L =0xEA;
sfr CCAP0H =0xFA;
sfr CCAPM1 =0xDB;
sfr CCAP1L =0xE8;
sfr CCAP1H =0xF8;
sfr PCAPWM0=0xf2;
sfr PCAPWM1=0xf3;
void main()
{
PWM();
TMOD=0x10; //定时器1方式1
EA=1;
TR1=1;
ET1=1;
TH1=0xff;
TL1=0x9c;
while(1)
{
if(1==PWM_indicate)
{
PWM_indicate=0;
CCAP0H=0x00;
CCAP0L+=0xff;
if(0==CCAP0L)
{
CCAP0L=0x00;
}
}
}
}
void PWM()
{
CCON=0; //PCA控制寄存器
CL=0; //16位计数器,低8位和高八位
CH=0;
CMOD=0X02; //PCA工作模式寄存器选择时钟源
CCAP0H=0x00;
CCAP0L=0x00;
//设置占空比
CCAPM0=0X42; //PCA模块0工作模式设定,选择是PWM工作模式还是PCA工作模式
//CCAP1H=CCAP1L=0xff;
// PCAPWM1=0x03; //PWM寄存器
//CCAPM1=0X42;
CR=1; //PCA计数器阵列运行控制位
}
void time() interrupt 3
{
TH1=0xff;
TL1=0x9c;
timing_1s++;
if(10==timing_1s)
{
timing_1s=0;
PWM_indicate=1;
}
} 你这是典型的没看datasheet...
CCAP0L,在PWM模式下这个寄存器需要你管么?其他漏洞我没给你找,希望你仔细阅读一下芯片的datasheet.
另外一点,
如果是对这个不熟悉,那么你的测试代码应该尽量的简单,别一上来就搞个定时器中断,要不然,出了问题,你知道从哪下手吗?
页:
[1]