首页 > 其他分享 >蓝桥杯单片学习总结(Day12 串口通讯实验)

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

时间:2024-07-18 19:54:50浏览次数:9  
标签:P2 break P0 uart sendstring 蓝桥 Day12 串口 0x1f

实验现象:

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

 实例代码:

#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)		//[email protected]
{
	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;

标签:P2,break,P0,uart,sendstring,蓝桥,Day12,串口,0x1f
From: https://blog.csdn.net/2302_80724534/article/details/140531453

相关文章

  • AMD R2000 Bilby 单板 串口在Grub和Linux下的使用
    Ubuntu20启动时,自动加载了UART驱动,系统启动信息含有UART的相关信息。[2.418748]printk:console[ttyS4]disabled[2.418757]AMDI0020:00:ttyS4atMMIO0xfedc9000(irq=3,base_baud=3000000)isa16550A[2.418820]printk:console[ttyS4]enabled[......
  • 第十五届蓝桥杯单片机模拟考试实战题目
    目录一、硬件框图二、功能描述2.1基本功能描述2.2显示功能1.测距界面2.参数界面3.记录界面4.显示要求2.3按键功能2.4旋钮模式2.5LED指示灯功能2.6初始状态三、代码实现1>主函数:2>测距驱动函数3>PCF8591驱动函数4>矩阵按键驱动函数5>CT107D头文件四、题目链......
  • C#调用C++库,进行串口通信
    1、添加C++接口实现,将dll放置在运行路径下。dll文件下载:https://files.cnblogs.com/files/ZM191018/SerialPortLib.7z?t=1721271982&download=true[DllImport("SerialPortLib.dll",CharSet=CharSet.Unicode,CallingConvention=CallingConvention.StdCall)]......
  • 【QT开发】串口通信管理QSerialPort类详解及实战应用
    QSerialPort是Qt提供的一个功能强大、简单易用的串口通信类。通过本文的学习,您应该对QSerialPort的基本使用、高级应用技巧及相关注意事项有了全面的理解。在实际项目中,QSerialPort可以帮助实现与外部设备的串口通信,确保数据的可靠传输和接收。希望本文能帮助您更好地......
  • 07:串口通信二
    串口编程1、与波特率之相关的寄存器2、PCON寄存器3、SCON寄存器4、配置的代码分析5、向PC发送一段字符串6、PC机向单片机发送字符控制LED1灯的亮灭1、与波特率之相关的寄存器如图,与串口通信相关的寄存器主要是SCON和PCON寄存器。2、PCON寄存器SMOD:为1时,通信方式1......
  • 串口、IIC、SPI的优缺点
    串口、IIC、SPI的优缺点串口(SerialPort)串口通信是一种基本的串行通信方式,它通过串行数据线(TX和RX)进行数据的发送和接收。串口通信通常用于微控制器与PC或其他设备之间的通信。特点:简单易用,硬件实现成本低。通信速率较低,适合长距离通信。可以实现全双工通信(同时发送和接收......
  • 题解:P10417 [蓝桥杯 2023 国 A] 第 K 小的和
    分析这道题不是板子么。先对序列排序,然后二分答案,设当前答案为\(x\),枚举\(a\)中的数,然后二分查找\(b\)中不大于\(x-a\)的元素个数,累加判断是否不大于\(k\)。然后稍微调一调端点就过了。Code#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#incl......
  • [蓝桥杯 2018 省 B] 递增三元组(两种解法)
    [蓝桥杯2018省B]递增三元组题目描述给定三个整数数组A=[A1......
  • P8704 [蓝桥杯 2020 省 A1] 填空问题 题解
    题目传送门A.跑步训练我们经过仔细观察,可以发现每222分钟就会消耗300300......
  • 从零开始备战蓝桥杯——一天一个小算法第一天(排序篇)
    今天使我们学习算法的第一天,算法内容为冒泡排序和选择排序。冒泡排序思想:两两相邻数字排序,小的放在前面大的放在后面。从左往右遍历,不断重复第一步,这样可以永远保证大的在最后面重复上述操作,可以得到一个数组从小到大的排序。事例:假设我们有n个数字。第一次比较遍历全......