蓝桥杯单片机必备知识—–(12)串口通讯

蓝桥杯单片机必备知识—–(12)串口通讯

蓝桥杯单片机必备知识—–(12)串口通讯

串口初始化函数

//主程序中调用

void UartInit(void)		//9600bps@11.0592MHz
{
   
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x01;		//串口1选择定时器2为波特率发生器
	AUXR &= 0xFB;		//定时器2时钟为Fosc/12,即12T
	T2L = 0xE8;		//设定定时初值
	T2H = 0xFF;		//设定定时初值
	AUXR |= 0x10;		//启动定时器2
}

发送字符串

void sendstring(unsigned char *str)//发送字符串
{
   
	while(*str !='\0')//等待\0
		{
   
			//sendbyte(*str++);//发送下一个字符
			SBUF=*str++; //将数据放进SBUF缓冲器
			while(TI==0); //等待发送数据完成
			 TI=0; //清除发送完成标志
		}
}

串口中断

void s() interrupt 4
{
   
	if(RI)
	{
   
		str1[scount++]=SBUF;   RI=1时接收数据,将数据放入SBUF
		RI = 0;
	}
}

整个代码粘贴

#include <stc15f2k60s2.h>
#include <stdio.h>

#define uchar unsigned char
#define uint unsigned int

uchar tab[] = {
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar dspbuf[] = {
   10,10,10,10,10,10,10,10};
uchar temperature = 12;
unsigned char str1[20];
unsigned char scount = 0;
unsigned char str[20];

void load();
void sendstring(unsigned char *str);
void sendbyte(unsigned char dat);
void display();
void uart_proc();
void cls()
{
   
	P2 = (P2 & 0x1f) | 0x80;
	P0 = 0xff;
	P2 = 0x1f;
	
	P2 = (P2 & 0x1f) | 0xa0;
	P0 = 0x00;
	P2 = 0x1f;
}

void UartInit(void)		//9600bps@11.0592MHz
{
   
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x01;		//串口1选择定时器2为波特率发生器
	AUXR &= 0xFB;		//定时器2时钟为Fosc/12,即12T
	T2L = 0xE8;		//设定定时初值
	T2H = 0xFF;		//设定定时初值
	AUXR |= 0x10;		//启动定时器2
}


void main()
{
   

	cls();
	AUXR = 0xc0;
	TMOD = 0x00;
	TL0 = 0xcd;
	TH0 = 0xd4;
	TR0 = 1;
	ET1 = 1;
	ES = 1;
	EA = 1;
	UartInit();
	while(1)
	{
   
		uart_proc();
	}
}

void s() interrupt 4
{
   
	if(RI)
	{
   
		str1[scount++]=SBUF;
		RI = 0;
	}
}
void uart_proc()
{
   
	if(scount > 0)
	{
   
		//sendstring(str1); 
		if(str1[scount-1] == 0xa)
		{
   
			sendstring(str1);		
			
			if((str1[0] =='s')  && (str1[1] == 0xd))
			{
   
				sprintf(str,"#temperature:%02u\r\n",(uint)(temperature));//发送Hello
				sendstring(str);
			}
			scount = 0;
			
		}
		else
			if(scount==6)
			{
   
	      sendstring(str1);		
				scount = 0;
			}
		
	}		
}




void sendstring(unsigned char *str)//发送字符串
{
   
	while(*str !='\0')//等待\0
		{
   
			//sendbyte(*str++);//发送下一个字符
			SBUF=*str++; //将数据放进SBUF缓冲器
			while(TI==0); //等待发送数据完成
			 TI=0; //清除发送完成标志
		}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100133.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深度学习—3.Pytorch基础

    深度学习—3.Pytorch基础

    2021年10月5日
    43
  • JQuery Div scrollTop ScrollHeight

    JQuery Div scrollTop ScrollHeightjQuery里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop、scrollLeft、scrollHeight。其中scrollHeight属性,互联网上几乎搜素不到关于它的应用技巧,而我正好需要用到它。我们现在只探讨和垂直滚动有关的scrollTop、scrollHeight属性。一、滚动条有关属性的正确理解:假设有以下Html代码:

    2022年7月23日
    4
  • WebService接口测试

    WebService接口测试WebService的理解WebService就是Web服务的意思,对应的应用层协议为SOAP(相当于HTTP协议),可理解为远程调用技术。 特点:客户端发送的请求主体内容(请求报文)的格式为XML格式接口返回的响应主体内容(响应报文)的格式为XML格式WSDL的介绍就是WebService接口对应的WSDL文件,该文件通过xml格式说明如何调用,可以看作WebService的接口文档(使用说明书…

    2022年7月16日
    15
  • 【JMeter】参数Parameters和Body Data

    【JMeter】参数Parameters和Body Data在做接口并发测试的时候,才发现Jmeter中的Parameters和BodyData两种参数格式并不是简单的一个是xx=xx,另外一个是json格式的参数先看一个接口[post]/api/xx/xxxx/xxxx通知服务端文件上传完毕输入参数:httpcontenttype:application/json名称|类型|是否必须|参数限制|描述———|–

    2022年6月23日
    18
  • python 文件描述符是什么_python程序设计第三版课后答案

    python 文件描述符是什么_python程序设计第三版课后答案【案例讲解】Python为什么要使用描述符?

    2022年4月22日
    45
  • Visio2013激活_2013 visio 32位

    Visio2013激活_2013 visio 32位转载的博客,记录下来,便于后面查找。from: http://blog.csdn.net/keenweiwei/article/details/42780805/环境是win7,64bit装了visio2013,可以却不能用它来画图,在网上找了一些激活成功教程工具,大都不能解决问题。网上不靠谱的广告型文章太多了,比较头痛。所幸,终于找到正确的激活成功教程工具KMSpico_set…

    2022年10月5日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号