串口初始化自己独立的见解--第九天

2024-05-11 04:36

本文主要是介绍串口初始化自己独立的见解--第九天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.SM0,SM1 我们一般用     8位UART,波特率可变 (方式1的工作方式)

        SCON :SM2 一般不用,SM0 =0 ,SM1 = 1

        PCON :   有两位 我们不动它,不加速,初始值

       TMOD:8位自动重装定时器,当溢出时将TH1存放的值自动重装入TL1   高四位清零,

                TMOD &=0x0F   :高四位清0

                TMOD |=0x20; 由此变成 M1,M0 为 1 0         8位自动重装模式

        定时器:

                由波特率计算

                TH1 = 0xFD;

                TL1 = 0xFD;  //9600波特率的初值

                TR1 = 1   ; //启动定时器

2.波特率计算

12T:

        2^0 / 32 x 11059200 / 12 (256-t)   = 9600

SCON:

     

TMOD:

波特率计算

串口实现字符串输出

1.自定义初始化串口

void UartInit(void)
{AUXR = 0x01;SCON = 0x40;TMOD &= 0x0F;TMOD |= 0x20;TH1 =0xFD;TL1 =0xFD;TR1 = 1;
}

2.利用串口中断来延迟输出,因为通过手册我们可以知道,发数据的过程中,移位寄存器操作也是消耗时间的,所以我们可以加软件延迟或者中断来抵消这一部分时间

用        TI 

        

void sendByte(char data_msg)
{
    
    SBUF = data_msg;
    while(!TI);       //(TI==0)   
        TI = 0;

}

void sendString(char *str)
{
    while(*str != '\0'){
        sendByte(*str);
        str++;  //指针偏移
    }
}
 

void main()
{
    
    
    UartInit();
    while(1)
    {
        Delay1000ms();
        
        sendString("caoshupei shuai\r\n");   //不加 \r 和 \n 会乱行
    }
}

串口通信编程,PC端发送指令控制LED

1.REN使能端必须让它等于1才能接受数据

B7 B6 B5 B4 B3 B2 B1 B0

0     1   0   1    0    0   0   0

      SM1   0  REN 

2.RI接收中断请求标志位。在方式0,当接收到第八位结束时,硬件自动置位RI = 1;

        响应中断后必须软件复位,即       RI= 0;

2.1 用外部中断函数,不会卡死,同时打开ES外部串口中断和总中断EA;

这篇关于串口初始化自己独立的见解--第九天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978516

相关文章

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

poj 2594 二分图最大独立集

题意: 求一张图的最大独立集,这题不同的地方在于,间接相邻的点也可以有一条边,所以用floyd来把间接相邻的边也连起来。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <sta

poj 3692 二分图最大独立集

题意: 幼儿园里,有G个女生和B个男生。 他们中间有女生和女生认识,男生男生认识,也有男生和女生认识的。 现在要选出一些人,使得这里面的人都认识,问最多能选多少人。 解析: 反过来建边,将不认识的男生和女生相连,然后求一个二分图的最大独立集就行了。 下图很直观: 点击打开链接 原图: 现图: 、 代码: #pragma comment(

最大流=最小割=最小点权覆盖集=sum-最大点权独立集

二分图最小点覆盖和最大独立集都可以转化为最大匹配求解。 在这个基础上,把每个点赋予一个非负的权值,这两个问题就转化为:二分图最小点权覆盖和二分图最大点权独立集。   二分图最小点权覆盖     从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。 建模:     原二分图中的边(u,v)替换为容量为INF的有向边(u,v),设立源点s和汇点t

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号