蓝桥杯51单片机之串口通信发送接收信息【单片机开发初学者串口必会】
文章目录
- 一、上位机发送信号控制单片机
- 1、显示对应的流水灯
- 2、显示对应数码管
- 3、控制数码管显示的数字
- 二、两机收发信息
一、上位机发送信号控制单片机
1、显示对应的流水灯
实现现串口通信接收上位机的信息,控制流水灯的亮灭与亮的位置,发送流水灯控制信号,单片机接收信号并显示对应的流水灯。
#include <reg52.h>
#define uchar unsigned char;
//sbit LED = P1^4;
uchar UART_buff;
bit Money = 0;
//----------------------------------------------
void main (void)
{ SCON = 0x50; //串口方式1, 8-n-1, 允许接收. TMOD = 0x20; //T1方式2 TH1 = 0xFD; //[url=]//9600bps@11.0592MHz[/url] TL1 = 0xFD;TR1 = 1;ES = 1; //开中断. EA = 1;while(Money==0); //等待中断触发,等着再次输入信号
}
//----------------------------------------------
void ser_int (void) interrupt 4 //一旦串口打开了,就执行该中断服务函数,中断号为4
{ if(RI == 1) //如果收到消息.{ RI = 0; //清除标志. UART_buff = SBUF; //将接收的数据变为uchar类型 P1 = UART_buff; //点亮对应的流水灯if(UART_buff == '$') Money = 1; //中断返回,一旦有$符号,中断就永久触发了,不断循环收发消息 }
}
2、显示对应数码管
现串口通信接收上位机的信息,控制数码管显示的位置,发送数码管的位选信号,单片机接收信号并显示对应的数码管,显示数字为9。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
Uartinit();
void delay(uint x);sbit dula= P2^6;
sbit wela= P2^7;
uchar Uart_buff;// 串口通信初始化
void UartInit(void) //9600bps@11.0592MHz
{SCON = 0x50; //8位数据,可变波特率TMOD = 0x20; //设定定时器1为16位自动重装方式TL1 = 0xFD; //设定定时初值TH1 = 0xFD; //设定定时初值ET1= 0; //禁止定时器1中断TR1= 1; //启动定时器1ES= 1; //串口中断EA= 1; //总中断
}void main()
{Uartinit(); //执行初始化while(1) ; //等待串口中断的触发
}// 显示数码管
void display() interrupt 4
{if(RI==1) //如果接收到消息{RI= 0; //手动清零接收位Uart_buff= SBUF;wela= 1;P0= Uart_buff;wela= 0;dula= 1;P0= 0x6F; //显示数字9dula= 0; delay(500); }
}void delay(uint x) //延时x毫秒的函数
{uint i,j;for(i=x; i>0; i--){for(j=110; j>0; j--) ;}
}
3、控制数码管显示的数字
现串口通信接收上位机的信息,控制数码管显示的数字,发送数码管的段选信号,单片机接收信号并显示相应的数字,位置为左边4个位选,同时流水灯不断左移变化。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned intvoid display_ISR(); //中断显示函数
void Uart_Init(); //中断初始化函数
void delay_ms(uint x);
void light();uchar UART_buff;
sbit dula = P2^6;
sbit wela = P2^7;void Uart_Init()
{SCON = 0x50;TMOD = 0x20; //方式2TH1 = 0xFD; //定时器1重装初值TL1 = 0xFD;ET1 = 0; //关定时器1中断TR1 = 1; //启动定时器1运行ES = 1; //串口中断EA = 1; //总中断
}void main()
{uchar temp = 0xFE;Uart_Init();P1 = temp;delay_ms(500);while(1) //等待中断触发{ light(temp);}
}void light(temp)
{if(temp != 0x00) {temp = temp << 1; //左移一位,不断循环不断左移P1 = temp;delay_ms(500); }else //如果全亮了temp = 0xFF;P1 = temp;
}void display_ISR() interrupt 4
{if(RI==1) //如果收到消息{UART_buff = SBUF;RI = 0;wela = 1;P0 = 0xF0;wela = 0;dula = 1;P0 = UART_buff;dula = 0;delay_ms(1500); //延时1500ms,1.5秒}
}void delay_ms(uint x)
{uint i, j;for(i=x; i>0; i--)for(j=110; j>0; j--) ;
}
二、两机收发信息
实现不断收发信息,串口通信上的发送信息与接收信息,在上位机向单片机发送信息
然后单片机接收信息并将数据进行+2处理,再发送回上位机显示出来。
#include <reg52.h>
#define uchar unsigned char
void Uart_Init(); //初始化函数
sbit LED= P1^4;bit new=0, sended=1;
/*错误点:sended初始必须为1*/uchar UART_buff;void Uart_Init()
{SCON= 0x50;TMOD= 0x20;TH1= 0xFD;TL1= 0xFD;ET1= 0;TR1= 1;ES = 1;EA = 1;
}void main()
{Uart_Init();while(1) //正常运行,并等待中断的触发{if((new==1) && (sended==1)){/*易错遗忘点*/SBUF = UART_buff; //那就发送 new = 0; sended = 0; }}
}void ser_int (void) interrupt 4
{if(RI == 1) //如果收到信息 { RI = 0; //清除标志.new= 1; UART_buff = SBUF; //接收. if(UART_buff == '1') LED= 1; //启动一个LED灯else if(UART_buff == '0') LED= 0;else{UART_buff = UART_buff + 2;} } else { //如果送毕. TI = 0; //清除标志. sended = 1; }
}
蓝桥杯51单片机之串口通信发送接收信息【单片机开发初学者串口必会】相关推荐
- 51单片机串口通信发送以及接收代码详解1
#include <reg51.h> //实验现象:单片接收电脑发送的字符串,并发回给PC端的代码.//函数声明 void uart_init(void); void uart_seng_ ...
- 51单片机串口通信发送以及接收代码详解2
#include <reg51.h> //实验现象:在电脑端没按下发送的时候,单片一直给电脑发送aaa字符串: //实验现象:在电脑端按下发送的时候,结束字符串aaa的发送代码,执行单片接 ...
- 单片机实验八 RS232串口通信实验(接收与发送)
实验八 RS232串口通信实验(接收与发送) 一.实验目的 1.熟悉实验软件和硬件,进行正确的接线: 2.通过实验了解串口的基本原理及使用,理解并掌握对串口进行初始化: 3.使用串口调试助手做为上位机 ...
- java串口发送16进制数据_MFC串口通信发送16进制数据的方法
本文实例为大家分享了MFC串口通信发送16进制数据的具体代码,供大家参考,具体内容如下 MFC串口通信会使用m_mscomm控件. 发送数据一般是在edit control 里输入自己想发送的内容,然 ...
- delphi 串口通信发送_关于串口通信232、485、422和常见问题,就没见过能讲这么清楚的...
先讲串口通信的一些基本概念,术语.如果对串口通信比较熟悉的,就当复习,如果哪里讲的不到位,欢迎及时指出. 这里并不对串口的编程作讲解,主要是从应用的角度去讲一讲.因为更多的时候,都是产品做好了,比如触 ...
- 求android 中串口的发送接收数据代码
RT,求高手帮忙! 就是 /dev/ttyS0 和/dev/ttyS1 两个设备的通信问题.. 同求~ 这个是不是需要串口驱动啊?最近正在搞这个串口通信的案子,头疼 同样也没有搞出来,老是报:不能扫描 ...
- STM32H7xx 串口DMA发送接收(LL库)
文章目录 1 前言 2 STM32H7实现 2.1 关键步骤 2.2 注意事项 3 代码仓库 1 前言 关于串口DMA收发实现,不同CPU其套路都是类似的,不同之处在于寄存器配置.依赖BSP库等差 ...
- C#解决串口通信中接收数据时延迟处理与缓存处理的方法
转载连接: http://blog.csdn.net/yaoliang11/article/details/6885768 C#解决串口通信中接收数据时延迟处理与缓存处理的方法 时间:2011-1-2 ...
- 串口通信,接收并解析数据的方式
串口通信,接收并解析数据的方式 (点击链接阅读原文)
最新文章
- winform让子窗体始终居于父窗体的中间
- %w(数组)是什么意思?
- Linux IP 配置
- 色彩丰富的水彩纹理背景,配合排版和简单的设计元素,给任何设计带来乐趣。
- Tomcat和Weblogic的区别
- CPU的内部架构和工作原理
- 人工智能-机器学习之seaborn(读取xlsx文件,小提琴图)
- VB脚本:快速入门教程
- AIScanner文字识别软件 OCR
- 软件定义网络带来新的自动化优势和挑战
- 展望未来~走向计算机之路
- 重启服务器:docker重启,docker内部mysql怎么重启启动
- 源码解析2-GUI-绘制引擎(QPainter源码分析 )
- matlab 二次不等式约束,请教高手如何用matlab解多元二次不等式的解,有三个未知数x1,x2,x3,约束条件如下:...
- 关于相对熵(KL距离)的理解
- 微信小程序商城优势在什么地方
- 邮件的发送和接收过程-----简单邮件传输协议(SMTP)和邮件读取协议!!!
- 苹果IWatch真香,包邮送一个!
- CentOS5.5下TOMCAT6快速yum安装
- 写给人类的机器学习 2.1 监督学习
热门文章
- java字符串转json_java 字符串转成 json 数组并且遍历
- python构造自定义数据包_pytorch中的自定义数据处理详解
- mysql脚本中如何写判断_mysql中如何写判断语句
- 网页表单回车自动提交问题
- springboot中mongodb自定义类型转换器
- tensor如何实现转置_PyTorch中的傅立叶卷积:通过FFT有效计算大核卷积的数学原理和代码实现...
- delete select语句_MySQL InnoDB锁介绍及不同SQL语句分别加什么样的锁
- android 传感器 应用,Android移动设备中传感器的应用
- yolo系列外文翻译_Yolo系列其三:Yolo_v3
- proxmox换源_关于Proxmox 5.x的国内有效镜像源