C51——串口发字符串控制小车

以下为分文件,需要进行整合

main.c

//#include "reg52.h"//代码里边没有,sbit i/o口,可以不要声明
//#include "intrins.h"//代码里边没有_nop_();可以不要该声明
#include "motor.h"
#include "delay.h"
#include "uart.h"

void main()
{
	Delay1000ms();
	UartInit();

	  while(1);
}

motor.c

#include "reg52.h"

sbit right1=P3^2;
sbit right2=P3^3;
sbit left1=P3^4;
sbit left2=P3^5;

void goback()
{
  left1=1;
	left2=0;
	right1=1;
	right2=0;
}
void goforward()
{
  left1=0;
	left2=1;
	right1=0;
	right2=1;
}
void goleft()
{
  left1=0;
	left2=0;
	right1=0;
	right2=1;
}
void goright()
{
  left1=0;
	left2=1;
	right1=0;
	right2=0;
}
void stop()
{
  left1=0;
	left2=0;
	right1=0;
	right2=0;
}

motor.h

void goback();

void goforward();

void goleft();

void goright();

void stop();

uart.c

#include "reg52.h"
#include "motor.h"
#include "string.h"

#define SIZE 12
sfr AUXR=0x8E;//不认识AUXR,报错需要声明
char buffer[SIZE];
void UartInit(void)		//9600bps@11.0592MHz
{
	AUXR=0x01;
	SCON=0x50;//配置串口工作方式1,ren能接收01000000
	TMOD&=0x0F;
	TMOD|=0x20;//定时器1的工作方式8位自动重装配置
	TH1=0xFD;
	TL1=0xFD;//9600波特率的初值
	TR1=1;//启动定时器
	EA=1;//打开总中断
	ES=1;//允许串口中断
}
void uart_toutine()interrupt 4
{
  static int i = 0;
	char tmp;

	if(RI)
	{
  	RI = 0;
			tmp = SBUF;
			if(tmp=='M'){//WIFI GOT IP中既包含W、又包含F,底下条件满足FI,D5亮
				i = 0;
			}
			buffer[i++] = tmp;
      if(buffer[0] == 'M'){
        switch(buffer[1]){
          case '1':
					  goforward();
					  break;
					case '2':
					  goleft();
					  break;
					case '3':
					  goright();
					  break;
					case '4':
						goback();
					  break;
					default:
						stop();
					  break;
        }
      }
	}
	if(i == 12){
	memset(buffer, '\0', SIZE);
  i = 0;
  }

}

uart.h

void UartInit();		//9600bps@11.0592MHz

delay.c

#include "intrins.h"

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

delay.h

	void Delay1000ms();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在C51上实现串口字符串传输,你需要按照以下步骤进行操作: 1. 配置串口:配置串口的波特率、数据位、校验位、停止位等参数,以便与外部设备通信。 2. 编写发送函数:编写函数来发送字符串,该函数将字符串分解为单个字符,并使用串口发送每个字符,直到整个字符串发送完毕。 3. 编写接收函数:编写函数来接收串口数据,该函数将接收到的字符存储在缓冲区中,直到接收到完整的字符串。 以下是一个基本的C51程序示例,用于实现串口字符串传输: ```c #include <reg51.h> // 配置串口参数 void init_serial() { TMOD = 0x20; // 设置定时器1的工作方式2 TH1 = 0xfd; // 设置波特率为9600,TH1 = 256 - (11059200)/(12*32*9600) = 253 SCON = 0x50; // 设置串口工作方式为8位数据位,无校验位,1位停止位 TR1 = 1; // 启动定时器1 } // 发送单个字符 void send_char(unsigned char c) { SBUF = c; // 将字符写入串口缓冲区 while(!TI); // 等待发送完成 TI = 0; // 清除发送完成标志位 } // 发送字符串 void send_string(unsigned char *s) { while(*s) // 依次发送字符串中的每个字符 { send_char(*s++); } } // 接收单个字符 unsigned char receive_char() { while(!RI); // 等待接收完成 RI = 0; // 清除接收完成标志位 return SBUF; // 返回接收到的字符 } // 接收字符串 void receive_string(unsigned char *s) { unsigned char c; do { c = receive_char(); // 依次接收每个字符 *s++ = c; } while(c != '\0'); // 当接收到结束符时停止接收 } void main() { unsigned char buffer[50]; init_serial(); // 初始化串口 send_string("Hello!"); // 发送字符串 receive_string(buffer); // 接收字符串 while(1); // 程序循环 } ``` 这个程序只是一个基本示例,你可以根据你的具体需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值