串口控制:
建立串口分文件: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); //发送中断
}