#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 spee服务器托管网d_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=20)
{
cnt=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的占空比就应该没有改变呀!!,那么小车一开始出现的加速是怎么回事???
————————————————————————————向给位大佬请教
—————————服务器托管网———————————————————————————一个小菜狗
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
文章目录 导文 循环链表的概念 循环链表具有以下几个特点: 实现一个循环列表 导文 循环链表是一种特殊的链表数据结构,其中最后一个节点指向链表的头节点,形成一个循环的环状结构。与普通链表不同,循环链表没有明确的结束点,可以通过任意节点开始遍历整个链表。 循环链…