#include "STC12C5A60S2.H"
//run
sbit left_go=P2^1;
sbit left_xia=P2^2;
sbit right_go=P2^4;
sbit right_xia=P2^3;
sbit Left_motor_pwm=P2^0; //左电机控速PWMA
sbit Right_motor_pwm=P2^5; //右电机控速PWMB
unsigned char speed_val_left=0 ; //左电机占空比push_val_left/20
unsigned char speed_val_right=0; //
unsigned char pwm_val_left=0 ;
unsigned char pwm_val_right=0 ;
/**************************************
//左正传
left_shang2=1;
left_xia1=0;
//左反
left_shang2=0;
left_xia1=1;
//左停止
left_shang2=0;
left_xia1=0;
//右正传
right_shang1=0;
right_xia2=1;
//右反
left_shang2=0;
left_xia1=1;
//右停止
left_shang2=0
left_xia1=0;
**************************************/
void Timer0Init(void) ;
void run();
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 144;
do
{
while (--j);
} while (--i);
}
void main ()
{
P2=0XC0; //关电机
speed_val_right=10;
Timer0Init() ;
Delay10ms() ;
while(1)
{
run();
}
}
void Timer0Init(void) //1000微秒@11.0592MHz
{
//AUXR |= 0x80; //定时器时钟1T模式
TMOD =0x01; //定时器工作方式1
TH0=0XFC; //1ms定时,装入初值
TL0=0X66;
TR0=1; //启动T0工作
ET0=1; //允许T0中断
EA =1; //开总中断
}
void tm0_isr() interrupt 1
{
static unsigned char cnt=0;
TH0=0XFC; //1ms定时,装入初值
TL0=0X66;
cnt++;
//pwm_val_left++;
if(cnt<=speed_val_right)
{
Right_motor_pwm=1;
}
else
{
Right_motor_pwm=0;
}
if(cnt>=20)
{
cnt=0;
}
if(cnt<=speed_val_left)
{
Left_motor_pwm=1;
}
else
{
Left_motor_pwm=0;
}
if(cnt>=20)
{
cnt=0;
}
}
void run()
{
left_xia=0;
left_go=1;
right_go=1;
right_xia=0;
speed_val_left=10;
}
我的目的是想根据不同的值来实现不同的速度调节,但是没搞出来!!!
上述代码的疑问是:例如93行,不应该有关闭PWM的时刻吗?此时不应该电机不转吗?但是为什么一直在转,根本没有电机停止的时候?而且现象是速度++到一定值,以这个速度转?2分钟都不会从头开始是为什么呢?
这个速度为什么会变大呢?我不理解的地方:
看PWM图还是没有搞懂为什么会调速!!!因为不同的占空比有不同的速度,这里cnt(PWM)的值在++,但是本质上图还是上面的图,并没有说cnt++到30或者++到15,都是++到20的,这样《20的占空比就应该没有改变呀!!,那么小车一开始出现的加速是怎么回事???
————————————————————————————向给位大佬请教
————————————————————————————————————一个小菜狗
标签:疑惑,P2,cnt,right,val,void,PWM,left From: https://blog.51cto.com/u_16039976/7340672