C51--小车——串口/蓝牙控制及点动

串口控制:

建立串口分文件:uart.c 和 uart.h文件声明函数

#include "reg52.h"
#include "motor.h"
#include "string.h"#define SIZE 12sfr AUXR = 0x8E;char buffer[SIZE];				//数组操作发送字符串//串口初始化
void UartInit(void)		//9600bps@11.0592MHz
{PCON &= 0x7F;		//波特率不倍速SCON = 0x50;		//8位数据,可变波特率AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12TAUXR &= 0xFE;		//串口1选择定时器1为波特率发生器TMOD &= 0x0F;		//清除定时器1模式位TMOD |= 0x20;		//设定定时器1为8位自动重装方式TL1 = 0xFD;		//设定定时初值TH1 = 0xFD;		//设定定时器重装值ET1 = 0;		//禁止定时器1中断TR1 = 1;		//启动定时器1EA = 1;			//开启总中断ES = 1;			//开启串口中断
}//中断函数
void UART_Rountine(void) interrupt 4
{static int i = 0;		//静态的局部变量,被初始化一次char tmp;if(RI){			//接收中断RI = 0;		//软件复位tmp = SBUF;		//读数据if(tmp == 'M'){	//连接失败显示FAILi = 0;}buffer[i] = tmp;i++;if(buffer[0] == 'M'){			switch(buffer[1]){case '1':go_Forward();break;case '2':go_Back();break;case '3':go_Left();break;case '4':go_Right();break;default:go_Storp();break;}		}if(i == 12){memset(buffer,'\0',SIZE);i = 0;}}if(TI);			//发送中断
}

声明函数:串口初始化


void UartInit();

蓝牙控制:

用串口控制的代码,连接蓝牙模块HC-08,即可控制

点动控制:

主函数执行停止,在串口中断函数中判断位置加入延时

主函数:


#include "motor.h"
#include "Delay.h"
#include "uart.h"void main()
{UartInit();while(1){go_Storp();}
}

串口:

#include "reg52.h"
#include "motor.h"
#include "string.h"
#include "Delay.h"#define SIZE 12sfr AUXR = 0x8E;char buffer[SIZE];				//数组操作发送字符串//串口初始化
void UartInit(void)		//9600bps@11.0592MHz
{PCON &= 0x7F;		//波特率不倍速SCON = 0x50;		//8位数据,可变波特率AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12TAUXR &= 0xFE;		//串口1选择定时器1为波特率发生器TMOD &= 0x0F;		//清除定时器1模式位TMOD |= 0x20;		//设定定时器1为8位自动重装方式TL1 = 0xFD;		//设定定时初值TH1 = 0xFD;		//设定定时器重装值ET1 = 0;		//禁止定时器1中断TR1 = 1;		//启动定时器1EA = 1;			//开启总中断ES = 1;			//开启串口中断
}//中断函数
void UART_Rountine(void) interrupt 4
{static int i = 0;		//静态的局部变量,被初始化一次char tmp;if(RI){			//接收中断RI = 0;		//软件复位tmp = SBUF;		//读数据if(tmp == 'M'){	//连接失败显示FAILi = 0;}buffer[i] = tmp;i++;if(buffer[0] == 'M'){			switch(buffer[1]){case '1':go_Forward();Delay10ms();break;case '2':go_Back();Delay10ms();break;case '3':go_Left();Delay10ms();break;case '4':go_Right();Delay10ms();break;default:go_Storp();break;}		}if(i == 12){memset(buffer,'\0',SIZE);i = 0;}}if(TI);			//发送中断
}