#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
uchar Buffer[7] = {0}; //从串口接收的数据
uint i,j;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit out = P0^0;
/*char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节 */
/**********************************************************
us延时子函数 (500us)
**********************************************************/
void delayus(unsigned char x)
{
unsigned char i;
while (x--)
{
for (i = 0; i < 58; i++)
;
}
}
/**********************************************************
归中子函数 (0度
**********************************************************/
void Prog0(void)
{
unsigned char m;
for(m=0; m<30; m++)
{
out = 1;
delayus(3); //延时1.5ms
out = 0;
delayus(37); //延时18.5ms
}
}
/**********************************************************
逆时针转动子函数 1ms
**********************************************************/
void Prog1(void)
{
unsigned char m;
for(m=0; m<40; m++)
{
out = 1; //延时1ms
delayus(2);
out = 0;
delayus(38); //延时19ms
}
}
/**********************************************************
顺时针转动子函数 2ms
**********************************************************/
void Prog2(void)
{
unsigned char m;
for(m=0; m<40; m++)
{
out = 1;
delayus(4); //延时2ms
out = 0;
delayus(36); //延时18ms
}
}
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Int(void) interrupt 4
{
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
Buffer[0] = SBUF; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
RI = 0;
}
EA = 1;
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使串口中断
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Com_Init(void)
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
}
/********************************************************************
* 名称 :Moto_Forward()
* 功能 : 电机正转启动前进
* 输入 : 1
* 输出 : 无
***********************************************************************/
void Moto_Forward()
{
P1_0=1;
P1_1=0;
}
/********************************************************************
* 名称 :Moto_Backward()
* 功能 : 电机反转启动后退
* 输入 : 4
* 输出 : 无
***********************************************************************/
void Moto_Backward()
{
P1_0=0;
P1_1=1;
}
/********************************************************************
* 名称 :Moto_FLeft()
* 功能 : 电机正转前进舵机左转1.0ms-60度,前左
* 输入 : 3
* 输出 : 无
***********************************************************************/
void Moto_FLeft()
{
P1_0=1;
P1_1=0;
}
/********************************************************************
* 名称 :Moto_FRight()
* 功能 : 电机正转前进舵机右转2.0ms60度,前右
* 输入 : 2
* 输出 : 无
***********************************************************************/
void Moto_FRight()
{
P1_0=1;
P1_1=0;
}
/********************************************************************
* 名称 :Moto_Stop()
* 功能 : 电机停止
* 输入 : 0
* 输出 : 无
***********************************************************************/
void Moto_Stop()
{
P1_0=0;
P1_1=0;
}
/********************************************************************
* 名称 :Moto_BLeft()
* 功能 : 电机反转前进舵机左转1.0ms-60度,退左
* 输入 : 6
* 输出 : 无
***********************************************************************/
void Moto_BLeft()
{
P1_0=0;
P1_1=1;
}
/********************************************************************
* 名称 :Moto_BRight()
* 功能 : 电机正转前进舵机右转2.0ms60度,退右
* 输入 : 5
* 输出 : 无
***********************************************************************/
void Moto_BRight()
{
P1_0=0;
P1_1=1;
/*Delay_1ms(100); */
}
/********************************************************************
主程序
***********************************************************************/
void main()
{
Delay_1ms(100);
Com_Init();//串口初始化
Prog0();
while(1)
{
switch(Buffer[0])
{
case 0: Prog0();Moto_Stop(); break;
case 1: Prog0();Moto_Forward(); break;
case 4: Prog0();Moto_Backward(); break;
case 3: Prog1();Moto_FLeft(); break;
case 2: Prog2();Moto_FRight(); break;
case 6: Prog1();Moto_BLeft(); break;
case 5: Prog2();Moto_BRight(); break;
}
}
}
解析应该怎么写啊 |