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

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

相关文章

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

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