蓝桥杯模块学习10——串口通信(深夜学习——单片机)

这篇具有很好参考价值的文章主要介绍了蓝桥杯模块学习10——串口通信(深夜学习——单片机)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是串口通信?

51单片机——串口通信详解(STC89C51为例)_佛科院深夜学习的博客-CSDN博客

二、IAP15F2K60S2与STC89系列的区别:

1、16位自动重装载模式下波特率的计算方式不同:

蓝桥杯模块学习10——串口通信(深夜学习——单片机)

(1)波特率与SMOD无关

(2)波特率等于溢出率除4

2、AUXR辅助寄存器:(上电后默认为0x01)

蓝桥杯模块学习10——串口通信(深夜学习——单片机)

(1)T2R:控制定时器2是否允许使用,置“1”为允许

(2)T2_C/T:控制定时器2用作定时器还是计数器,置“0”为定时器(默认)

(3)T2X12:控制定时器2速度,置“0”为12T模式(传统模式);置“1”为1T模式

(4)S1ST2:串口1定时器选择位,置“0”选择定时器1;置“1”选择定时器2(默认)

3、AUXR辅助寄存器1(这里我们未使用)

蓝桥杯模块学习10——串口通信(深夜学习——单片机)
蓝桥杯模块学习10——串口通信(深夜学习——单片机)

5、使用的定时器不同

(1)串口1可以使用定时器1、定时器2为波特率发生器

(2)定时器2默认为16位自动重装载模式

(3)定时器2的时间常数保存在T2H、T2L

6、波特率对应定时器初值计算:

(1)溢出率(单位时间溢出的次数):

假设我们使用的是1T模式,溢出一次需要的时间 = (65536 - 初值)*(1/晶振频率),即

溢出率 = 1/溢出一次需要的时间 = 晶振频率/(65536 - 初值)

(2)波特率:

波特率 = 溢出率/4 =晶振频率/(65536 - 初值)/4

(3)定时器初值:

初值 = 65536 - 晶振频率/(波特率*4)(误差的绝对值要小于3%)

7、不需要外部晶振,通过STC-ISP可调节晶振频率

三、串口通信实验:

蓝桥杯模块学习10——串口通信(深夜学习——单片机)

1、代码思路:

先配置并开启定时器2,然后配置并开启串口1,最后实现数据的收发。

2、注意:

STC-ISP中的IRC频率需要设置为12MHZ

蓝桥杯模块学习10——串口通信(深夜学习——单片机)

3、主函数:

// 使用程序前,将J13调整为IO模式(2-3脚短接)
#include "Public.h"

u8 R_sign;
u8 R_dat;
    
void Uart_1_TX(u8 dat);
void Uart_1_Init();
// 主函数
void main(void)
{
    Close_All();    
    Uart_1_Init();
    Uart_1_TX(0x5a);
    Uart_1_TX(0xa5);
  while(1)
  { 
        if(R_sign)
        {
            Uart_1_TX(R_dat+1);
            R_sign = 0;
        }
  }
}
/*****************串口**********************/
/*
    输入变量:无
    输出变量:无
    功能:配置并开启定时器2和串口2
*/

void Uart_1_Init()        //9600bps@12MHz
{
    //使用了SCON、AUXR、IE、T2H、T2L寄存器
    //方式1 8位数据 波特率可变
    SM0 = 0;
    SM1 = 1;
    //定时器2速度为1T模式
    AUXR |= 0x01<<2;
    //串口1选择使用定时器2
    AUXR |= 0x01<<0;    
    //定时器初值
    T2L = 0xC7;            
    T2H = 0xFE;            
    //允许串口接受
    REN = 1;
    //开启串口中断
    ES = 1;
    //开启总中断
    EA = 1;
    //开启定时器2
    AUXR |= 0x01<<4;
}

/*
  输入变量:发送的八位数据
    输出变量:无
  功能:使用串口1发送8位数据
*/

void Uart_1_TX(u8 S_dat)
{
    SBUF = S_dat;
    while(!TI);
    TI = 0;
}

void Uart_1_IT() interrupt 4
{
    if(RI)
    {
        R_dat = SBUF;
        RI = 0;
        R_sign = 1;
    }
}

四、串口通信进阶实验:

蓝桥杯模块学习10——串口通信(深夜学习——单片机)
  1. 代码思路:

首先将无关设备关闭,然后配置并打开串口,编写发送字符串代码(记得回车换行),接着编写控制函数和读取函数文章来源地址https://www.toymoban.com/news/detail-403083.html

2.参考代码:

// 使用程序前,将J13调整为IO模式(2-3脚短接)
#include "Public.h"
u8 R_sign;
u8 R_dat;  
u8 last_led = 0xff;
void Uart_1_TX_String(u8 *S_dat);
void Uart_1_Init();
void LED_ON_Low(u8 dat);
void LED_ON_High(u8 dat);
// 主函数
void main(void)
{
    Close_All();    
    Uart_1_Init();
    Uart_1_TX_String("Welcome come to XMF system!\r\n");
  while(1)
  { 
        if(R_sign)
        {
            R_sign = 0;
            switch(R_dat>>4)
            {
                case 0x0A:
                    LED_ON_Low(R_dat);
                    break;
                case 0x0B:            
                    LED_ON_High(R_dat);
                    break;
                case 0x0C:
                    Uart_1_TX_String("The system is running!\r\n");
                    break;
            }
        }
  }
}
/*****************串口**********************/
/*
    输入变量:无
    输出变量:无
    功能:配置并开启定时器2和串口2
*/

void Uart_1_Init()        //9600bps@12MHz
{
    //使用了SCON、AUXR、IE、T2H、T2L寄存器
    //方式1 8位数据 波特率可变
    SM0 = 0;
    SM1 = 1;
    //定时器2速度为1T模式
    AUXR |= 0x01<<2;
    //定时器初值
    T2L = 0xC7;            
    T2H = 0xFE;            
    //允许串口接受
    REN = 1;
    //开启串口中断
    ES = 1;
    //开启总中断
    EA = 1;
    //开启定时器2
    AUXR |= 0x01<<4;
}


void Uart_1_IT() interrupt 4
{
    if(RI)
    {
        R_dat = SBUF;
        RI = 0;
        R_sign = 1;
    }
}

/*
  输入变量:发送的字符串
    输出变量:无
  功能:使用串口1发送字符串
*/

void Uart_1_TX_String(u8 *S_dat)
{
    while(*S_dat != '\0')
    {
        SBUF = *S_dat;
        while(TI == 0);
        TI = 0;
        S_dat++;
    }
}

/*********************LED******************/
/*
    输入变量:低四位灯亮灭数据。‘1’表示开灯,‘0’关灯
    输出变量:无
    功能:控制前四个灯亮灭,保持后四个灯灭
    注意:使用前要对u8 last_led = 0XFF;进行宏定义
*/
void LED_ON_Low(u8 dat)
{
    //由于P0口是公用的口,我们要对每次点灯的数据进行记录,不然会受其他操作的影响
    P0 = (last_led & 0xf0) | (~dat & 0x0f);
    last_led = P0;
    P2 = (P2 & 0x1f) | 0x80;
    P2 &= 0x1f;
}
/*
    输入变量:高四位灯亮灭数据。‘1’表示开灯,‘0’关灯
    输出变量:无
    功能:控制后面四个灯亮灭,保持前面四个灯灭
    注意:使用前要对u8 last_led = 0XFF;进行宏定义
*/
void LED_ON_High(u8 dat)
{
    //由于P0口是公用的口,我们要对每次点灯的数据进行记录,不然会受其他操作的影响
    P0 = (last_led & 0x0f) | (~dat & 0x0f)<<4;
    last_led = P0;
    P2 = (P2 & 0x1f) | 0x80;
    P2 &= 0x1f;
}

到了这里,关于蓝桥杯模块学习10——串口通信(深夜学习——单片机)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机学习12-串口通信

    目录 串口通信实验 通信的基本概念 串行通信与并行通信 异步通信与同步通信 单工、半双工与全双工通信 通信速率(比特率) 单片机串口介绍 串口通信简介 串口相关寄存器 串口工作方式 方式 0  方式 1 方式 2 和方式 3 串口的使用方法 硬件设计 软件编程         我们

    2024年02月11日
    浏览(36)
  • 51单片机学习--串口通信

    首先需要配置寄存器: 下面这里SCON配0x40和0x50都可以,因为暂时还不需要接受信息,所以REN置1置0都可 在main中调用SendByte函数,每按下一次复位键,接收缓冲区就会收到一个11 这就是单向发送的一个简单实例,接下来实现每隔一秒发送一个递增的数据,只需要添加一个全局变

    2024年02月14日
    浏览(32)
  • 学习笔记|串口通信的基础知识|同步/异步|RS232|常见的串口软件的参数|STC32G单片机视频开发教程(冲哥)|第二十集:串口通信基础

    百度百科:串口通信的概念 什么是通信? 例如U盘和电脑,我们电脑需要往U盘存东西,而U盘上只有四个触点,除去一个电源一个地,只剩下两个引脚了。此时我们坑定不能像点亮LED那样单纯的给他两个引脚上输出个高低电平就能写数据了对吧。总不至于输出一个高电平就能

    2024年02月07日
    浏览(39)
  • 蓝桥杯STC15F2K60S2单片机 CCP/PCA/PWM模块的学习与使用

    有道是 “一花独放不是春,万紫千红春满园” 我们不能只满足于 眼前所谓的 “够用、能用” 的少量知识,而不去深入学习探究,进而不慎封锁了自己的见识 和 更多 创新开发上的可能性。 曾经仅满足于学习了蓝桥杯单片机的三个外部晶振 定时器: 定时器0、1、2. 就认为完

    2024年02月08日
    浏览(36)
  • 使用标准库和HAL库的STM32单片机进行串口通信/解决因例程为HAL库的传感器,而其他模块都是标准库,需要将数据用串口传送给标准库的单片机的相关问题

    (本文使用STM32F103C8T6,在CubeMX里演示用的是RBT6,但实际上引脚是一样的)         本文 着重解决一个大工程中,某些传感器的例程是HAL库的,而其他模块(或算法)都是标准库,导致难以移植的问题。 本文的解决方法是:使用一片单片机用HAL库(CubeMX)配置例程,然后

    2024年02月06日
    浏览(39)
  • 【51单片机】串口通信&&使用串口通信控制LED灯

    🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Promise】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔串口通信 😎代码   🍔串口初始化 ⭐分析  🏳️‍🌈确定T1的工作方式 🎈TMOD=0X20;  🏳️‍🌈确定T1的初值 🎈

    2024年02月17日
    浏览(32)
  • 单片机串口通信程序

    本文总结了两种比较简单的关于串口发送接收的程序,以下是步骤: 定义数据: 首先要串口初始化:(以9600波特率为例) 串口中断:  在定时器0扫描里加入,或者主函数while(1)里加入: (其中++URX_tt=(1000/波特率),数要接近,否则会有小小干扰。) 接下来关于串口通信

    2024年02月10日
    浏览(35)
  • 51单片机串口通信

    串口通信(serial communication)是指外设和计算机间通过数据信号线、地线等按位进行传输数据的一种通信方式,属于串行通信方式。 接口标准:常用RS-232和RS-485 RS-232C有一种9针的非标准连接器口,简称DB9。串口通信使用的大多都是DB9接口。在串口通信中,通常我们只使用2、

    2024年02月05日
    浏览(36)
  • 51单片机-串口通信

    目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部结构 2.5.相关寄存器 2.6.工作模式(模式1) 2.7.如何配置串口中断 3.实际应用 3.1.单片机向电脑发送数据 3.2.电脑向单片机发送

    2024年02月01日
    浏览(33)
  • 单片机的串口通信

            今天,完整地总结一下普中科技的单片机的串口通信的硬件与编程,记录一下以后如果需要也比较方便捡起来。         单片机的串口部分的电路图。开发板上集成了 1 个串口通信电路,是 USB 转串口模块,它既可下载程序也可实现串口通信功能。         对这

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包