蓝桥杯单片机必备知识—–(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)
上一篇 2021年4月13日 下午4:00
下一篇 2021年4月13日 下午7:00


相关推荐

  • windows下用pycharm安装tensorflow简易教程

    windows下用pycharm安装tensorflow简易教程2019.4.14更新下面的内容挺老了,建议批判性阅读,各种版本一直在变化,最好的教程,果然还是tensorflow和pytorch的英文原网。Windows下面办公还行,不是很适合开发,也就跑跑小代码。我现在一般在windows上使用SSH连接远程linux的服务器,直接使用远程配置的解释器环境(pycharm有相应SSH功能,配置一下就好),这样可以方便的开着音乐,边看资料边coding…

    2022年6月18日
    48
  • WebIDE:Firefox中的Web IDE「建议收藏」

    WebIDE:Firefox中的Web IDE「建议收藏」Mozilla在其浏览器的每日构建版本中增加了一个IDE,用于在FirefoxOS设备和模拟器上创建、编辑、运行和调试Web应用程序,而且计划将该IDE扩展到移动设备上的所有主流浏览器。\WebIDE基于先前的FirefoxOS应用程序管理器构建,但包含了部署和调试工具,以及基于CodeMirror的代码编辑器和tern.js代码分析框架。为了简化开发设置,该IDE为开发人员提供了基于模板的样…

    2022年10月17日
    5
  • 方兴未艾的语音合成技术与应用

    方兴未艾的语音合成技术与应用https mp weixin com s biz MzI0ODcxODk5 amp mid amp idx 2 amp sn ac626c1dff46 amp scene 21 wechat redirect nbsp 方兴未艾的语音合成技术与应用 nbsp https mp weixin com s

    2026年3月20日
    2
  • dos命令数据库导入sql文件

    dos命令数据库导入sql文件

    2021年7月17日
    112
  • Java学习笔记–StringTokenizer的使用「建议收藏」

    Java学习笔记–StringTokenizer的使用「建议收藏」拓展:Pattern.split替代String.splithttp://www.cnblogs.com/gnivor/p/4386978.htmlStringTokenizer是一个用来分隔St

    2022年7月2日
    32
  • BAT机器学习面试1000题系列(第1~305题)

    BAT机器学习面试1000题系列整理:July、元超、立娜、德伟、贾茹、王剑、AntZ、孟莹等众人。本系列大部分题目来源于公开网络,取之分享,用之分享,且在撰写答案过程中若引用他人解析则必注明原作者及来源链接。另,不少答案得到寒小阳、管博士、张雨石、王赟、褚博士等七月在线名师审校。说明:本系列作为国内首个AI题库,首发于七月在线实验室公众号上:julyedulab,并部分更新…

    2022年4月6日
    34

发表回复

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

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