蓝桥杯单片学习总结(Day12 串口通讯实验)

实验现象:

通过串口调试助手发送数字1~8,板子上面的对应指示灯亮。注意此处发送应选择文本模式发送。

实例代码:

cs 复制代码
#include <STC15F2K60S2.H>

#define BUAD	9600  //所需波特率、
#define SYSTEMCLOCK	11059200L  //系统时钟频率,L表示该数据为长整型
void uart_sendstring(unsigned char *str);
unsigned char flag;  //数据接收标志位
char rin='1';

void UartInit(void)		//9600bps@11.0592MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器1时钟为Fosc,即1T
	TMOD = 0x00;		//设定定时器1为16位自动重装方式
	TL1 = 65535-(SYSTEMCLOCK/4/BUAD);		//设定定时初值与终值,固定模板
	TH1 = (65535-(SYSTEMCLOCK/4/BUAD)>>8);		
	TR1 = 1;		//启动定时器1
	ES=1;
	EA=1;
}

void main()
{
	UartInit();
	while(1)
	{
		if(flag)
		{
			flag=0;
			switch(rin)
			{
				case '1':
				{
					P2=(P2&0x1f)|0x80;
					P0=0xfe;
					P2&=0x1f;
					uart_sendstring('1');
				}
				break;
				case '2':
				{
					P2=(P2&0x1f)|0x80;
					P0=0xfd;
					P2&=0x1f;
					uart_sendstring('2');
				}
				break;
				case '3':
				{
					P2=(P2&0x1f)|0x80;
					P0=0xfb;
					P2&=0x1f;
					uart_sendstring('3');
				}
				break;
				case '4':
				{
					P2=(P2&0x1f)|0x80;
					P0=0xf7;
					P2&=0x1f;
					uart_sendstring('4');
				}
				break;
				case '5':
				{
					P2=(P2&0x1f)|0x80;
					P0=0xef;
					P2&=0x1f;
					uart_sendstring('5');
				}
				break;
				case '6':
				{
					P2=(P2&0x1f)|0x80;
					P0=0xdf;
					P2&=0x1f;
					uart_sendstring('6');
				}
				break;
				case '7':
				{
					P2=(P2&0x1f)|0x80;
					P0=0xbf;
					P2&=0x1f;
					uart_sendstring('7');
				}
				break;
				case '8':
				{
					P2=(P2&0x1f)|0x80;
					P0=0x7f;
					P2&=0x1f;
					uart_sendstring('8');
				}
				break;
				default:
					uart_sendstring("error\r\n");  //输入其他数据返回error
					break;
			}
			ES=1;
		}
	}
}

//串口中断服务函数
void uart_Proc() interrupt 4
{
	if(RI)  //正在接收数据
	{
		RI=0;  //需要手动赋0
		rin=SBUF;  //定时持续接收数据
		ES=0;
		flag=1;
	}
}

//通过串口发送信息
void uart_sendstring(unsigned char *str)
{
	unsigned char *p;
	p=str;
	while(*p!='\0')
	{
		SBUF=*p;  //send
		while(TI==0)  //等待发送标志位
		TI=0;
		p++;	
	}
}

实验原理:

EA为总开关,ES为串行口中断开关 ,在使用串行口中断前必须闭合EA、ES,即EA=1;

ES=1;

相关推荐
psybrain5 分钟前
脑科学圈| 利用眼动追踪评估演讲情境下焦虑障碍儿童的注视行为
学习·心理学·脑科学·课堂·焦虑·儿童青少年·眼动
序属秋秋秋1 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
许白掰1 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
B1nna2 小时前
Docker学习
学习·docker·容器
promising-w8 小时前
【运算放大器专题】基础篇
嵌入式硬件·学习
宝山哥哥8 小时前
网络信息安全学习笔记1----------网络信息安全概述
网络·笔记·学习·安全·网络安全
前端开发与ui设计的老司机8 小时前
从UI设计到数字孪生实战:构建智慧教育的个性化学习平台
学习·ui
X Y O9 小时前
神经网络初步学习3——数据与损失
人工智能·神经网络·学习
霖0011 小时前
C++学习笔记三
运维·开发语言·c++·笔记·学习·fpga开发
巴伦是只猫12 小时前
【机器学习笔记 Ⅲ】1 无监督学习
笔记·学习·机器学习