建立串口分文件:uart.c 和 uart.h文件声明函数
#include "reg52.h"
#include "motor.h"
#include "string.h"
#define SIZE 12
sfr AUXR = 0x8E;
char buffer[SIZE]; //数组操作发送字符串
//串口初始化
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA = 1; //开启总中断
ES = 1; //开启串口中断
}
//中断函数
void UART_Rountine(void) interrupt 4
{
static int i = 0; //静态的局部变量,被初始化一次
char tmp;
if(RI){ //接收中断
RI = 0; //软件复位
tmp = SBUF; //读数据
if(tmp == 'M'){ //连接失败显示FAIL
i = 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 12
sfr AUXR = 0x8E;
char buffer[SIZE]; //数组操作发送字符串
//串口初始化
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA = 1; //开启总中断
ES = 1; //开启串口中断
}
//中断函数
void UART_Rountine(void) interrupt 4
{
static int i = 0; //静态的局部变量,被初始化一次
char tmp;
if(RI){ //接收中断
RI = 0; //软件复位
tmp = SBUF; //读数据
if(tmp == 'M'){ //连接失败显示FAIL
i = 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); //发送中断
}