| ??? 02/18/11 04:15 Modified: 02/18/11 07:07 Read: times |
#181170 - C8051F350 target board C program |
Hi, I'm using C8051F350 target board from Silicon Laboratories. I am using timer2 and timer3 for timer process. The target board is connected to the HB-25 motor controller and a 12vdc motor. Can anyone help me?
When I put this code in my program, the motor is able to run and there is waveform generated on the oscilloscope. But unable to increase speed.
Toggle = ~Toggle;
while(TF2L==0);
TF2L=0;
This is my revised code. Motor is not running and there is no PWM signal generated on the oscilloscope.
while (1)
{
if (SW2 == 0) // if P1.0 is pressed
{
TMR2RL--; // increase Timer2 interval
if (TMR2RL <= TMR3RL) // if Timer2 interval longer than Timer3
TMR2RL++; // do not increase Timer2 interval
}
}
TMR2RL and TMR3RL values in the program code are different from the watch window.
void Timer2_Init (void)
{
TMR2CN = 0x00; // Timer2 configured for 16-bit auto-reload
CKCON |= 0x30; // Timer2 uses SYSCLK/12
TMR2RL = 0xffff; // Init reload value to 0 - Value shown in the watch window is 57249. It supposed to be 65535.
TMR2 = 0xffff; // set to reload immediately
ET2 = 1; // Enable Timer2 interrupt
TR2 = 1; // start Timer2
}
void Timer2_ISR (void) interrupt 5
{
if (TF2H == 1)
{
TF2H = 0; // reset high byte overflow flag
TF2L = 0; // reset low byte overflow flag
TR2 = 0; // disable Timer2
}
else
{
TF2L = 0; // reset low byte overflow flag
}
}
void Timer3_Init (void)
{
TMR3CN = 0x00; // Timer3 configured for 16-bit auto-reload
CKCON |= 0xc0; // Timer3 uses SYSCLK/12
TMR3RL = 0xff00; // Init reload values for 1 ms interval - Value shown in watch window is 50397. It supposed to be 65280
TMR3 = 0xffff; // set to reload immediately
EIP1 |= 0x80; // Timer3 interrupts set to high priority level
EIE1 |= 0x80; // Enable Timer3 interrupt
TMR3CN |= 0x04; // start Timer3
}
void Timer3_ISR (void) interrupt 14
{
if ((TMR3CN & 0x80) != 0) // if TF3H=1
{
TMR3CN &= 0x3f; // reset high and low byte overflow flag
TMR2RL = 0xffff; // set Timer2 to reload immediately
TMR3RL = 0xffff; // set Timer3 to reload immediately
TR2 = 1; // enable Timer2
}
else
{
TMR3CN &= 0xbf; // reset low byte overflow flag
}
}
|



