我的陀机不知道为什么接上电源,地和控制信号还是不转,用电源线碰一下就动一下,我用的电源是手机的直充,输出是5v880ma,我用另外一个5v450ma的它就不停的抖,
#include<reg52.h>
sbit pwm1=P1^0;//陀机1的控制端
sbit pwm2=P1^1;//陀机2的控制端
int aa1=0,b=30,c=50; //aa1:陀机脉宽基准次数,b:陀机1的角度控制,c:陀
机2的角度控制
int q=0;
/*******************************************************************
*
* 名称 : chuankouchu()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
********************************************************************
***/
void chuankouchu()
{
T2CON=0x30;//t2z作波特率发生器
TL2=0xdc;
TH2=0xff;
RCAP2L=0xdc;
RCAP2H=0xff;
SCON=0x50;//串口工作在方式1,并且REN=1
TR2=1;
EA=1;
ES=1;
}
/*******************************************************************
*
* 名称 : chuankouzhongduan()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
********************************************************************
***/
//串口中断程序
chuankouzhongduan()interrupt 4
{
chuankoushuju[q]=SBUF;
if(0xff==chuankoushuju[0])//检测是否数据包头
q++;
if(q==5)
q=0;
RI=0;
}
/*******************************************************************
*
* 名称 : dinshi0()
* 功能 : 初次化定时器0晶振11.0592,定时0.05ms,
* 输入 : 无
* 输出 : 无
********************************************************************
***/
void dinshi0()
{
TMOD=0X02;
TL0=0xd1;
TH0=0Xd1;
EA=1;
ET0=1;
TR0=1;
}
/*******************************************************************
*
* 名称 :tuojiPWM()
* 功能 : PWM脉宽控制函数,0.05ms为基准
* 输入 : 无
* 输出 : 无
********************************************************************
***/
tuojiPWM()interrupt 1
{
++aa1;//每0.05毫秒+1
if(aa1==b)
pwm1=!pwm1;
if(aa1==c)
pwm2=!pwm2;
if(aa1==400)//够400个0.05ms,即一个周期(20ms),重新计数
{
pwm1=!pwm1;
pwm2=!pwm2;
aa1=0;
}
}
//主程序
void main()
{
chuankouchu();//串口初始化
dinshi0();//初始化T1(陀机)
while(1)
{
if(chuankoushuju[4]==0xff)//检测数据包尾
{
a=chuankoushuju[2];//把接收到的数据处理
a=a<<8;
b=chuankoushuju[3];
switch(a=a+b)//根据接收到的内容做相应得动作
{
case 0x0005:
if(b<50)//50对应180度因为是50个0.05ms
b=b+10;break;//陀机角度加
case 0x0006:
if(b>10)//10对应0度,因为是10个0.05ms
b=b-10;break;//陀机角度减
}
chuankoushuju[4]=0;//清数据包头,尾
chuankoushuju[0]=0;
}
}
}
这里我只贴出陀机的部分,其他前进后退那些没贴出,
|