备战蓝桥杯day12__串口通信进阶应用

一,程序设计的思路与框架

在上一个程序中我们实现了向上位机发送的都是为单个字符,这次需要向单片机发送一个字符串。需要建立一个发送字符串的函数。将字符串分成当个字符,使用发送单个字节的函数进行发送。

在接收上位机指令的处理是这道题目比较关键的部分,如何把接收到的信息,进行区分成多个状态指令。

二,代码部分

#include <reg52.h>
sfr AUXR=0X8E;
void SendString(unsigned char *str);
void HC138(unsigned char t)
{
	switch(t)
	{
		case 4:
			P2=(P2 & 0x1f) | 0x80;
		break;
		case 5:
			P2=(P2 & 0x1f) | 0xa0;
		break;
	}
}
void Inisystem()
{
	HC138(5);
	P0=0x00;
	HC138(4);
	P0=0xff;
	
}
void Uart()
{
  TMOD=0X20;
  TH1=0XFD;
  TL1=0XFD;
	TR1=1;
	SCON=0X50;
	AUXR=0X00;
	EA=1;
	ES=1;
}
unsigned char command=0x00;
void Service() interrupt 4
{
	if(RI==1)
	{
		command=SBUF;
		RI=0;
	}
}
void Work()
{
	if(command != 0x00)
	{
		switch(command & 0xf0)
		{
			case 0xa0:
				P0=(P0 | 0x0f) & ((~command)| 0xf0);
			command=0x00;
				break;
			case 0xb0:
				P0=(P0 | 0xf0) & (((~command)<<4)| 0x0f);
			command=0x00;
				break;
			case 0xc0:
				SendString("The system is running...");
			command=0x00;
				break;
		}
	}
}
void Send(unsigned char dat)
{
	SBUF=dat;
	while(TI==0);
	TI=0;
}
void SendString(unsigned char *str)
{
	while(*str != '\0')
	{
		Send(*str++);
	}
}
void main()	
{
	Inisystem();
	Uart();
	SendString("Welcome to XMF system!");
	while(1)
	{
		Work();
	}
}

向上位机发送字符串是题目的重点,通过SendString()这个函数来实现。接收一个字符串的首个地址,通过指针来对字符串进行操作,使用while(*str !='\0')函数来确认函数是否到了最后一位,把第一位发送到Send后,*str++移动到第二位字符的地址,往复如此直到最后一位。

Work函数实现对接收指令command进行处理,首先if判断是否接收到数据,采用switch取接收状态,所以把低四位置0。确认状态后根据把command进行处理成相应的值赋给P0。该代码执行的结果需要用LED来实现,需要开启相应的寄存器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值