This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

..how to stop PCA..

hello all,
I m working with AT89C51CC01.
My task is to generate PWM as required n stop when not required.
For this i had make one program in Keil uVision4. Check the code as follows.

#include <stdio.h>
#include "reg_c51.h"

void Init(void)
{
        CCON = 0x00;
        CR = 0x00;
        P1 = 0x00;
}
void Init_PWM_Open(void)
{
        CMOD = 0x02; // Setup PCA timer
        CL = 0x00;
        CH = 0x00;
        CCAPM2 = 0x42; //  PWM mode.
        CCAPM4 = 0x42; //  PWM mode.
        CR = 1; // Start PCA Timer.
}
void main()
{
        Init();
        while(1)
        {
                        if(P2_0 == 1)
                        {       Init_PWM_Open();        }
                        else
                        {       Init(); }
        }
}


what i expect from this code is::
when P2_0 is 1 then in PCA module 2 n 4 have start to generate PWM..n then when P2_0 is 0 then all pins of P1 must be 0.

But the problem is when i start to run program all Pins of P1 is 0..then when P2_0 is 1 then it generate PWM..but after that when i make P2_0 to 0 then both pins of P1 (module 2 n 4) r remains 1, while i had in Init() write P1 = 0x00 so must port P1 is 0.
I want to generate PWM n then when the state of P2_0 is changed then i want to use PCA modules as normal pins of P1.

In datasheet of AT89C51CC01 write that one can stop PCA with CR bit.
I had also stop CR in Init() CR = 0x00;..but it´s not give expected o/p.

if u have keil uvision4 s/w then check the performance of this code using simulator.

please help me for this problem or give any other idea or suggestion as early as possible.
Thanks in advance.

Parents Reply Children
No data