• 51单片机学习笔记3 C51数据类型及最小系统


    在这里插入图片描述

    一、 C51数据类型

    1. 基本类型

    • 数值类型:整型(hort,int,long)、浮点型(float,double)
    • 字符类型 char
    • 构造类型:数组、结构体、共用体、枚举
    • 指针
    • 空类型 void
    数据类型关键字位数数范围
    无符号字符型unsigned char80~255
    有符号字符型char8-128~127
    无符号整型unsigned int160~65535
    有符号整型int16-32768~32767
    无符号长整型unsigned long320~ 2 32 − 1 2^{32}-1 2321
    有符号长整型long32 − 2 31 -2^{31} 231 ~ 2 31 − 1 2^{31}-1 2311
    单精度浮点型float323.4e-38~3.4e38
    双精度浮点型double641.7e-308~1.7e308

    2. C51扩充数据类型

    类型长度值域说明
    bit0/1位变量声明
    sbit0/1特殊功能位声明
    sfr8位=1字节0~255特殊功能寄存器声明
    Sfr1616位=2字节0-65535Srf的16位数据声明
    *1~3字节对象的地址

    示例:

    sfr SCON=0x98;
    sbit T1=SCON^1;    # 取SCON第一位
    
    • 1
    • 2

    3. C51运算量

    (1)常量

    • 整型常量,如 长整型:L结尾;
    • 浮点型常量
    • 字符型常量:单引号定义,如'a';
    • 字符串型常量:双引号定义,如: “DA”,字符串结尾处会有\0

    (2)变量

    变量是用来存储和处理数据的标识符。

    (3)位运算符

    • & 按位与
    • | 按位或
    • ^ 按位异或
    • ~ 按位取反
    • << 左移
    • >> 右移

    (4)逗号运算符

    表达式1, 表达式2, ……表达式n

    表达式从左到右运算,返回最右边一个表达式的值。

    4. 数组

    unsigned char x[5];
    unsigned int y[3]={1,2,3};
    char string1[10];
    
    • 1
    • 2
    • 3

    二、特殊数据操作方式

    1. sfr

    SFR(Special Function Registers,特殊功能寄存器)是嵌入式系统中一种特殊类型的寄存器,它们被设计用来控制单片机的各种功能和外设。在8051系列单片机中,SFR被广泛应用,用于控制IO口、定时器、串口等硬件模块的工作。

    1. 用途

      • SFR用于控制和配置单片机的各种硬件功能,包括IO口的输入输出控制、定时器的工作模式设置、串口通信的参数配置等。
      • 它们是单片机内部的特殊寄存器,可以直接由CPU访问和操作。
    2. 特点

      • SFR通常具有较短的位宽度,通常为1位或者几位,用于控制特定硬件模块的某些特定功能。
      • 它们在单片机的内存映射中占据了特定的地址空间,可以通过读写该地址来访问对应的SFR。
      • 有些SFR具有只读属性,用于读取硬件状态或者状态标志,而有些具有可读写属性,用于配置硬件工作模式。
    3. 常见的SFR

      • GPIO口控制寄存器:用于控制IO口的输入输出状态和电平,如P0、P1、P2、P3等。
      • 定时器控制寄存器:用于配置定时器的工作模式、计数值、中断使能等,如TMOD、TCON等。
      • 串口控制寄存器:用于配置串口通信的波特率、数据格式、中断使能等,如SCON、SBUF等。
      • 中断控制寄存器:用于控制中断的使能和优先级,如IE、IP等。

    2. sbit

    sbit是用于声明单片机特殊功能寄存器(Special Function Registers,SFR)中的位(bit)的关键字。

    例如IO口、定时器、串口等。sbit关键字用于声明SFR中的某一位,使得程序员可以通过该位进行控制和操作。

    例如,假设有一个SFR称为P1,代表单片机的一个IO口,而我们想要操作该口的第0位,我们可以使用sbit进行声明,如下所示:

    sbit LED = P1^0; // 声明P1寄存器中的第0位,并将其命名为LED
    
    • 1

    这样,我们就可以通过操作LED变量来控制或者读取P1口的第0位的值了,例如:

    LED = 1; // 将P1口的第0位设置为高电平
    
    • 1

    除了 sbit 外,在 C51 编程中还有其他一些特殊的数据操作方式,用于访问特定的数据结构或者硬件资源。以下是一些常见的特殊数据操作方式:

    3. sfrbit

    • sfrbit 关键字用于声明特殊功能寄存器的位,类似于 sbit,但用于声明在 SFR 中的位。
    • 例如:sfrbit P1_0 = 0x90 ^ 0; 声明了一个名为 P1_0 的位,对应于 SFR P1 中的第 0 位。

    4. sfr16

    • sfr16 关键字用于声明一个 16 位的特殊功能寄存器,通常用于声明定时器/计数器等功能。
    • 例如:sfr16 TMR0 = 0x8C; 声明了一个名为 TMR0 的 16 位 SFR,其地址为 0x8C

    5. sfr16bit

    • sfr16bit 关键字用于声明 16 位特殊功能寄存器中的位。
    • 例如:sfr16bit TMR0_1 = 0x8C ^ 1; 声明了一个名为 TMR0_1 的位,对应于 16 位 SFR TMR0 中的第 1 位。

    二、51 最小系统构成

    1. 晶振电路

    在这里插入图片描述

    晶振一般选择12M或11.0592Mhz,

    • 12M更容易计算机器周期,
    • 串口通讯中使用11.0592MHz更适合,在串行通信设置波特率时误差为0.
      晶振起振时一瞬间会产生电感,2端加无极性旁路电容,用来消除起振电感,容量一般选择 10-33p。

    2. 复位电路

    复位条件:在RST/VPD引脚端出现 >=10ms时间的高电平时复位。 高电平要>=3V。
    一般有两种实现方式;

    • 上电复位
    • 手动按键复位

    (1)上电复位运行过程

    在这里插入图片描述

    上电时,电容通交流、断直流,rst会直连5V高电平。
    然后电容开始充电,充电完成后,电容对直流隔断,rst通过r2连到地低电平。

    (2)按键复位

    按下开关时,电容放电,放电过程电容通交流,RST相当于连5V高电平。由于R1的阻值很小(有的电路设计里不用这个R1,但直接对电容短接放电可能不太好),rst也可以通过这个通路连接高电平。

    3. 电源电路

    在这里插入图片描述

    4. 下载电路

    供电脑使用USB转TTL连接电路板。这里使用CH340C芯片,它自带晶阵,芯片7、8脚是空的。
    如果使用CH340G需要外接晶振。

    在这里插入图片描述

    CH340C的13、14脚要对应普中开发板下载程序使用,通过Q5三极管控制Q3MOS的通断。
    当DTR高电平、RTS低电平,三极管导通,MOS会导通,VCC通电。
    当DTR低电平、RTS高电平,三极管截止,Q3的G脚被R20拉低,MOS管截止,VCC没有电源。
    这个电路可以在使用普中开发板的下载程序省掉冷启动的过程。

  • 相关阅读:
    如何快速选购腾讯云NVIDIA GPU云服务器实例?
    获取HTML元素的offsetParent属性
    关于 mysql 中没有string_agg函数问题
    (Spring笔记)基于注解的SpringMVC开发步骤
    HTML——列表,表格,表单内容的讲解
    webpack与vite的对比
    关于kafka-python的若干问题
    Matlab中的handle 类
    单链表基本练习-删除
    mysql基础知识篇(四)
  • 原文地址:https://blog.csdn.net/xundh/article/details/127991928