236719016 发表于 2012-3-5 20:34:31

怪异,我用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;
        }
}

Pony279 发表于 2012-3-5 23:44:28

你这是典型的没看datasheet...
CCAP0L,在PWM模式下这个寄存器需要你管么?其他漏洞我没给你找,希望你仔细阅读一下芯片的datasheet.

另外一点,
如果是对这个不熟悉,那么你的测试代码应该尽量的简单,别一上来就搞个定时器中断,要不然,出了问题,你知道从哪下手吗?
页: [1]
查看完整版本: 怪异,我用STC12C5A16的片子学用PWM模块,现在调不了光。。。