Wifi小车之 – 综合调试篇

之前路由连接51板串口发送字符的测试不成功,想起liuhuiviking的博文提到要串接一个1k的电阻,电阻这个小东西啊,几分钱一只,但不知道哪里有卖,只有求助万能的淘宝。收到电阻之后马上接起来,发现还是不行,后来尝试了好多方法,终于在一块6块钱的最小系统板上测试成功,而且是不用串接电阻的。之前失败的原因,可能是我那块30块的开发板上面集成了USB-TTL,而且USB兼供电,可能会对串口接收产生冲突吧。

买电阻的时候顺便也买了一个15块钱的9g舵机,经过一轮查找资料,编写代码和测试,终于完成了舵机的51程序,在我那块30元的开发板P0口测试成功(P0有1k上拉电阻),但是在我那块6元的最小板死活都不行,P0, P1, P3都试过,1k,5K都试过。最后无意中改用电池供电的时候居然成功了(P0口上拉5k电阻)!估计是6元的最小板用料比较省,电源的滤波不行,而舵机对电源的要求比较高,所以导致用USB线供电时怎么都不行。

到此51最小系统的程序就全部测试完,准备开始组装小车啦。

源代码如下:

 

/*预处理命令*/

#include  //包含单片机寄存器的头文件

#define uchar unsigned char

#define uint unsigned int

#define motor P1

/***L298N接法

IN1 > P10

IN2 > P11

IN3 > P12

IN4 > P13***/

uchar serVal, hvc, lvc, angleValue;

sbit steeringGearSignal=P0^0;

bit PWMCTL=0;

 

/********************************************************************

* 名称 : Com_Init()

* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Com_Init()

{

motor=0xff;

TMOD=0x20;   //用定时器设置串口波特率

TH1=0xfd;   //256-11059200/(32*12*9600)=253 (FD)

TL1=0xfd;

TR1=1;

REN=1;          //串口初始化

SM0=0;

SM1=1;

EA=1;           //开启总中断

ES=1;

}

/********************************************************************

* 名称 : Timer0Init()

* 功能 : 舵机PWM中断初始化

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Timer0Init()

{

//0度=0.5ms, 45度=1ms, 90度=1.5ms, 135度=2ms, 180度=2.5ms

//0.1ms初始值 FFA3, (12n/11059200=0.1/1000, n=92, X=65535-92=65443 > FFA3)

steeringGearSignal=0;

angleValue=15;//初始90度

TMOD |= 0x01;  //使用模式1,16位定时器,使用”|”符号可以在使用多个定时器时不受影响

TH0=0xFF;      //给定初值,0.1ms中断

TL0=0xA3;

EA=1;            //总中断打开

ET0=1;           //定时器中断打开

TR0=1;           //定时器开关打开

}

 

/********************************************************************

* 名称 : SteeringGear()

* 功能 : 舵机PWM中断

* 输入 : 无

* 输出 : 无

***********************************************************************/

void SteeringGear() interrupt 1

{

TH0=0xFF;//重置计时器初始值

TL0=0xA3;

 

if (PWMCTL)//正在输出高电平

{

if(++hvc>=angleValue){//开始输出低电平

PWMCTL=!PWMCTL;

lvc=0;

steeringGearSignal=0;

}else

steeringGearSignal=1;

}else{//正在输出低电平

if(++lvc>=200){//开始输出高电平

PWMCTL=!PWMCTL;

hvc=0;

steeringGearSignal=1;

}else

steeringGearSignal=0;

}

}

 

/********************************************************************

* 名称 :SteeringGearUp()

* 功能 : 舵机向上转。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void SteeringGearUp()

{

if(angleValue>5)

angleValue–;

serVal=0xFF; //清除缓存,不然会一下子调到尽头

}

 

/********************************************************************

* 名称 :SteeringGearDown()

* 功能 : 舵机向下转。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void SteeringGearDown()

{

if(angleValue<25)

angleValue++;

serVal=0xFF; //清除缓存,不然会一下子调到尽头

}

 

/********************************************************************

* 名称 : ser()

* 功能 : 串口中断接收数据

* 输入 : 无

* 输出 : 无

***********************************************************************/

void ser() interrupt 4

{

RI=0;

serVal=SBUF;

}

 

/*********************************************************************************

** 函数名称 : main(void)

** 函数功能 : 主函数

*********************************************************************************/

void main()

{

Com_Init();//串口初始化

Timer0Init();//舵机初始化

 

while(1)

{

switch(serVal-48) //ASCII字符码

{

case 0: motor=0xff; break; //11111111,停止

case 1: motor=0xf5; break; //11110101,前进

case 2: motor=0xf7; break; //11110111,左转

case 3: motor=0xfa; break; //11111010,后退

case 4: motor=0xfd; break; //11111101,右转

case 5: SteeringGearUp(); break;

case 6: SteeringGearDown(); break;

default:break;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值