蓝桥杯单片机必备知识—–(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 !='
void sendstring(unsigned char *str)//发送字符串
{

while(*str !='\0')//等待\0
{

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

while(*str !='\0')//等待\0
{

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何删除对象的某个属性(对象属性方法是什么)

    基于React钩子的轻量级状态管理解决方案Ice-store的简单使用优点极简API:只有5个API,简单上手,使用方便,不需要学习Redux里的各种概念。ReactHooks:拥抱Hooks的使用体验,同时也是基于ReactHooks实现。集成异步状态:记录异步action的执行状态,简化view组件中对于loading与error状态的渲染…

  • JEECG整合SpringSession

    JEECG整合SpringSession

  • stat函数百度百科_strel函数

    stat函数百度百科_strel函数stat函数的简单使用stat函数是用来获取文件的各种属性的一个linux下的常用API函数。函数原型为intstat(constchar*path,structstat*buf);stat定义如下:structstat{dev_tst_dev;//文件的设备编号ino_tst_ino;//节点mode_tst_m…

  • 简单了解Activity工作流引擎

    简单了解Activity工作流引擎一、什么是工作流以请假为例,现在大多数公司的请假流程是这样的员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑采用工作流技术的公司的请假流程是这样的员工使用账户登录系统——点击请假——上级登录系统点击允许就这样,一个请假流程就结束了有人会问,那上级不用向公司提交请假记录?公司不用将记录录入电脑?答案…

  • sin傅里叶变换公式_傅里叶变换公式(傅里叶变换常用公式)

    sin傅里叶变换公式_傅里叶变换公式(傅里叶变换常用公式)一般傅里叶变换与反变换的公式是成对儿给出的。1、如果正变换前有系数1/2*π,则反变换前无系数2、如果正变换前无系数,则反变换前有系数1/2*π3、正、反变换前.1.傅里叶正变换2.傅里叶逆变换常用的就可以了问题是我找不到教材书了啊大概最常用的输10个左右就ok了连续傅里叶变换一般情况下,若“傅立叶变换”一词的前面未加任何限定语,则指的是“连续傅里叶变换”。“连续傅里叶变换”将平方…

  • css经典布局——双飞翼布局

    圣杯布局的出现是来自由MatthewLevine在2006年写的一篇文章《InSearchoftheHolyGrail》,在国内最早是淘宝UED的工程师(玉伯大大)对圣杯布局改进并传播开来,在中国的叫法是双飞翼布局。圣杯布局和双飞翼布局达到的效果基本相同,都是侧边两栏宽度固定,中间栏宽度自适应。主要的不同之处就是在解决中间部分…

发表回复

您的电子邮箱地址不会被公开。

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