51单片机应用
目录
编辑
1. C51的数据类型
1.1 C51中的基本数据类型
1.2 特殊功能寄存器类型
2. C51的变量
2.1 存储种类
1. C51的数据类型
C51是一种基于8051架构的单片机,它支持以下基本数据类型:
- 位(Bit):可以表示一个二进制位,只能取0或1。
- 无符号字符(unsigned char):占1个字节(8位),取值范围为0~255。
- 有符号字符(signed char):占1个字节(8位),取值范围为-128~127。
- 无符号整型(unsigned int):占2个字节(16位),取值范围为0~65535。
- 有符号整型(signed int):占2个字节(16位),取值范围为-32768~32767。
- 单精度浮点型(float):占4个字节(32位),可表示小数位数较多的实数。
此外,C51还支持其他数据类型,如布尔型(bool)、无符号长整型(unsigned long)、有符号长整型(signed long)、双精度浮点型(double)等。
例如:
C51支持以下数据类型:
-
char:表示字符类型,占用一个字节。
-
unsigned char:表示无符号字符类型,占用一个字节。
-
int:表示整型,通常为16位,可能占用2个字节或4个字节。
-
unsigned int:表示无符号整型,通常为16位,可能占用2个字节或4个字节。
-
long:表示长整型,通常为32位,占用4个字节。
-
unsigned long:表示无符号长整型,通常为32位,占用4个字节。
-
float:表示单精度浮点类型,通常为32位,占用4个字节。
-
double:表示双精度浮点类型,通常为64位,占用8个字节。
-
bit:表示位类型,占用一个位,通常用于表示单个开关状态。
-
sbit:表示SFR位类型,占用一个位,通常用于访问特殊功能寄存器的位。
在C51中,数据类型的占用空间可以通过编译器选项进行控制,如使用“--short”选项可将int类型占用空间降低到2个字节。
1.1 C51中的基本数据类型
C51中的基本数据类型和标准C语言中的数据类型基本相同,包括以下几种:
-
整型:包括int、short、long等类型,用于表示整数。
-
字符型:包括char类型,用于存储字符。
-
浮点型:包括float和double类型,用于表示浮点数。
-
无符号整型:包括unsigned int、unsigned short、unsigned long等类型,用于表示无符号整数。
-
位域:用于表示一个整数中的几位二进制位。
-
枚举类型:用于定义一组有限的常量值。
-
指针类型:用于存储内存地址。
-
void类型:用于表示无类型。
需要注意的是,在C51中,int类型通常是16位的,long类型通常是32位的。此外,C51还支持一些特殊的数据类型,如bit类型(用于表示单个二进制位)、sfr类型(用于访问外设寄存器)等。
1.2 特殊功能寄存器类型
特殊功能寄存器(Special Function Register, SFR)是用于控制微处理器或微控制器内部各种特殊功能的寄存器。根据其功能和作用不同,特殊功能寄存器可以分为以下几种类型:
-
控制寄存器:用于控制微处理器或微控制器的各种操作、模式和状态,例如中断控制寄存器、时钟控制寄存器等。
-
状态寄存器:用于存储某些标志位或状态信息,例如标志寄存器、状态字寄存器等。
-
数据寄存器:用于存储数据信息,例如通用寄存器、端口寄存器等。
-
地址寄存器:用于存储指令或数据的地址信息,例如程序计数器、堆栈指针等。
-
偏移寄存器:用于存储某些偏移量或计时信息,例如定时器寄存器、计数器寄存器等。
-
存储器映射寄存器:用于存储外部存储器的地址映射信息,例如存储器映射寄存器、DMA控制寄存器等。
以上是常见的特殊功能寄存器类型,不同的微处理器或微控制器可能会有不同的特殊功能寄存器类型和数量。
使用sfr或sfr16可以直接对特殊寄存器进行读写操作,而无需关注具体寄存器的地址和操作方式。
例如,使用sfr类型来访问P0口(端口0)的输入状态:
sfr P0 = 0x80; //定义P0特殊功能寄存器地址
unsigned char p0_input = P0; //读取P0口输入状态
使用sfr16类型来访问定时器1的计数值:
sfr16 T1 = 0x8F00; //定义T1特殊功能寄存器地址
unsigned int t1_count = T1; //读取定时器1的计数值
总之,sfr和sfr16类型为C51编程提供了简化特殊功能寄存器操作的便利性。
2. C51的变量
一般情况下,C51变量的定义格式为:数据类型 变量名;其中,数据类型指变量的类型,如整型、浮点型、字符型等;变量名指变量的名称,可自定义,但需符合命名规范,不可与关键字重复。例如,定义一个整型变量count可以写为:int count;
[存储种类] 数据类型说明符 [存储器类型] 变量名1 [= 初值], 变量名2[=初值],...
2.1 存储种类
C51(或基于C51核心的单片机)的存储种类主要包括:
-
ROM(只读存储器) - 存储程序代码和常量数据。可以是内部ROM或外部ROM。
-
RAM(随机访问存储器) - 存储变量数据和运行时堆栈。可以是内部RAM或外部RAM。
-
EEPROM(可擦写可编程只读存储器) - 存储需要频繁修改的数据,如配置信息和状态变量。可以是内部EEPROM或外部EEPROM。
-
Flash(快闪存储器) - 用于储存程序代码或数据,可进行快速擦除和编程操作。可以是内部Flash或外部Flash。
-
XDATA(外部数据存储器) - 用于访问较大的数据块,如大型数组和结构体。可以是外部SRAM或外部Flash。
以上是C51的主要存储种类,其具体配置及大小取决于具体的芯片型号和应用需求。
51系列单片机片内有许多特殊功能寄存器,包括IO口寄存器、定时器寄存器、中断寄存器、串口寄存器、ADC/DAC寄存器等。这些寄存器一般都是用于控制器的各种外设和模块,例如控制IO口的输入输出状态、设置定时器的计时条件和模式、配置中断的触发方式和优先级、设置串口的波特率和工作模式、控制ADC/DAC的输入输出等。掌握这些特殊功能寄存器的使用方法,可以帮助程序员更加灵活地控制单片机的各项功能。

51单片机应用从零开始(六)·逻辑运算-CSDN博客
更多推荐:
时光の尘_千题千解·Java面试宝典,Linux学习,C++学习-CSDN博客

相关文章:
51单片机应用
目录 编辑 1. C51的数据类型 1.1 C51中的基本数据类型 1.2 特殊功能寄存器类型 2. C51的变量 2.1 存储种类 1. C51的数据类型 C51是一种基于8051架构的单片机,它支持以下基本数据类型: 位(Bit):可以表…...
系列三、ThreadLocal vs synchronized
一、ThreadLocal vs synchronized 虽然ThreadLocal与synchronized关键字都能用于处理多线程并发访问变量的问题,但是两者处理问题的角度和思路是不一样的。区别如下: 小总结:虽然上一篇中的案例都实现了线程隔离,但是使用ThreadLo…...
封装Redis工具类
基于StringRedisTemplate封装一个缓存工具类,满足下列需求: 方法1:将任意Java对象序列化为json并存储在string类型的key中,并且可以设置TTL过期时间 方法2:将任意Java对象序列化为json并存储在string类型的key中&…...
使用 millis() 函数作为延迟的替代方法(电位器控制延迟时间)
接线图: 代码: unsigned long currentMillis 0; unsigned long previousMillis_LED1 0; unsigned long LED1_delay0; unsigned long previousMillis_LED2 0; unsigned long LED2_delay0; #define LED1 3 #define LED2 9 #define P1 A2 …...
MySQL之BETWEEN AND包含范围查询总结
一、时间范围 查询参数格式与数据库类型相对应时,between and包含头尾,否则依情况 当数据库字段中存储的是yyyy-MM-dd格式,即date类型: 用between and查询, 参数yyyy-MM-dd格式时,包含头尾,相当…...
4.3、Linux进程(2)
个人主页:Lei宝啊 愿所有美好如期而遇 通过系统调用创建进程--fork函数 结果是什么呢? 为什么会出来三个打印呢? 就是因为父进程调用了fork函数创建出了子进程的task_struct,但是一个进程不止task_struct,还有代码和数据,他们…...
element-ui组件输入框之放大镜(搜索图标)
element-ui组件输入框之放大镜(搜索图标 前言一、解决suffix-icon"el-icon-search"绑定事件问题 前言 在使用element-ui组件时想给输入框组件中的放大镜图标也就是搜索图标绑定事件,可以进行如下操作: 一、解决suffix-icon"el-icon-sear…...
[oeasy]python001_先跑起来_python_三大系统选择_windows_mac_linux
先跑起来 🥊 Python 什么是 Python? Python [ˈpaɪθɑ:n]是 一门 适合初学者 的编程语言 类库 众多 几行代码 就能 出 很好效果 应用场景丰富 在 各个应用领域 都有 行内人制作的 python 工具类库 非常专业、 好用 特别是 人工智能领域 pytho…...
吴恩达《机器学习》9-4-9-6:实现注意:展开参数、梯度检验、随机初始化
一、实现注意:展开参数 在上一个视频中,讨论了使用反向传播算法计算代价函数的导数。在本视频中,将简要介绍一个实现细节,即如何将参数从矩阵展开为向量。这样做是为了在高级最优化步骤中更方便地使用这些参数。 二、梯度检验 在神经网络中…...
软信天成:如何利用大数据提高客户体验?
当今社会,市场均势正在发生变化,消费者拥有更多的选择和更高的决定权,传统的市场营销技巧注重提高品牌认知度和吸引潜在客户,现在早已过时。经济不确定性弥漫,数字化转型仍是大多数企业的优先选择,新的竞争…...
Vue 路由缓存 防止路由切换数据丢失 路由的生命周期
在切换路由的时候,如果写好了一丢数据在去切换路由在回到写好的数据的路由去将会丢失,这时可以使用路由缓存技术进行保存,这样两个界面来回换数据也不会丢失 在 < router-view >展示的内容都不会被销毁,路由来回切换数据也…...
基于ubuntu20.04安装ros系统搭配使用工业相机
基于ubuntu20.04安装ros系统搭配使用工业相机 1. ROS系统安装部署1.1更新镜像源1.1.1 备份源文件1.1.2 更新阿里源1.1.3 更新软件源 1.2 ros系统安装1.2.1 添加ros软件源1.2.2 添加秘钥1.2.3 更新软件源1.2.4 配置及更换最佳软件源1.2.5 ROS安装1.2.6 初始化rosdep1.2.7 设置环…...
网络运维与网络安全 学习笔记2023.11.20
网络运维与网络安全 学习笔记 第二十一天 今日目标 交换网路径选择、Eth-Trunk原理、动态Eth-Trunk配置 Eth-Trunk案例实践、MUX VLAN原理、MUX VLAN配置 交换网路径选择 STP的作用 在交换网络中提供冗余/备份路径 提供冗余路径的同时,防止环路的产生 影响同网…...
银行业数据分析算法应用汇总
数据分析在银行业的应用及具体案例 一、欺诈检测二、客户细分三、风险建模四、营销优化五、信用评分六、客户流失预测七、推荐引擎八、客户生命周期价值预测 一、欺诈检测 欺诈检测即通过分析交易模式,检测可能的欺诈行为,主要有以下几个方面 1.跨机构开…...
搜索引擎trick:成为搜索高手的秘籍
诸神缄默不语-个人CSDN博文目录 文章目录 1. 搜索指令1.1 "完全匹配搜索"1.2 -1.3 site1.4 filetype1.5 * 模糊搜索1.6 intitle1.7 inurl1.8 related1.9 inanchor 2. 组合搜索技巧3. 搜索引擎的选择4. 使用高级搜索功能4.1 时间限定搜索4.2 语言限定搜索4.3 使用搜索…...
基于springboot实现冬奥会科普平台系统【项目源码+论文说明】计算机毕业设计
基于SpringBoot实现冬奥会科普平台系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理平台应运而生&…...
用C++标准库生成制定范围内的整数随机数
2023年11月22日,周三上午 #include <iostream> #include <random>int main() {std::random_device rd; // 随机设备,用于获取种子值std::mt19937 gen(rd()); // 使用 Mersenne Twister 引擎作为随机数生成器std::uniform_int_distribution&…...
使用ExLlamaV2量化并运行EXL2模型
量化大型语言模型(llm)是减少这些模型大小和加快推理速度的最流行的方法。在这些技术中,GPTQ在gpu上提供了惊人的性能。与非量化模型相比,该方法使用的VRAM几乎减少了3倍,同时提供了相似的精度水平和更快的生成速度。 ExLlamaV2是一个旨在从…...
【ARM AMBA AXI 入门 15 -- AXI-Lite 详细介绍】
请阅读【ARM AMBA AXI 总线 文章专栏导读】 文章目录 AXI LiteAXI-Full 介绍AXI Stream 介绍AXI Lite 介绍AXI Full 与 AIX Lite 差异总结AXI Lite AMBA AXI4 规范中包含三种不同的协议接口,分别是: AXI4-FullAXI4-LiteAXI4-Stream 上图中的 AXI FULL 和 AIX-Lite 我们都把…...
【开源】基于Vue.js的天然气工程业务管理系统的设计和实现
项目编号: S 021 ,文末获取源码。 \color{red}{项目编号:S021,文末获取源码。} 项目编号:S021,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四…...
BingGPT桌面客户端:基于Electron的New Bing跨平台效率工具详解
1. 项目概述与核心价值 最近在折腾AI工具的朋友,估计都绕不开微软的New Bing。它集成了GPT-4的能力,还能联网搜索,用起来确实比纯文本的ChatGPT在某些场景下更顺手。但说实话,每次都要打开浏览器,还得是Edgeÿ…...
Automation1Studio 界面七 Transformation(坐标变换) 设置界面
Automation1 Studio 软件中 Configure(配置) 工作区下的 Transformation(坐标变换) 设置界面。核心内容解读:这个界面用于配置坐标轴的运动学变换,也就是如何将指令位置(程序员设定的目标…...
golang如何实现桌面应用热更新_golang桌面应用热更新实现攻略
Go桌面应用无法真正热更新,只能通过go-selfupdate实现无缝重启:下载校验新二进制、替换并重启,需适配各平台签名与自启机制,插件机制不可行,核心难点在于更新时机判断与状态快照恢复。Go 桌面应用热更新无法真正“热”…...
Banana Pi BPI-M6开发板硬件解析与AI性能评测
1. Banana Pi BPI-M6 开发板全面解析作为一名长期关注嵌入式开发的技术博主,我最近拿到了Banana Pi最新发布的BPI-M6单板计算机。这款基于SenaryTech SN3680 SoC的开发板在AI性能上有着不俗表现,今天就来详细拆解它的硬件架构和实际应用场景。BPI-M6最引…...
OpenAI流式API开发实战:从SSE解析到React集成
1. 项目概述与核心价值最近在折腾AI应用开发,特别是想把OpenAI的API能力更丝滑地集成到自己的项目里时,发现了一个挺有意思的仓库:bonitadreama/openclaw-openai-streamline。这个名字乍一看有点复杂,但拆解一下,“Ope…...
AI编程助手深度定制:claude-code-config配置集实战指南
1. 项目概述:一个为AI编程助手深度定制的配置集如果你和我一样,日常开发重度依赖像Claude Code、Cursor这类AI编程助手,那你肯定也经历过那种“磨合期”的阵痛。助手生成的代码风格和你团队的不一致,一些重复性的代码片段每次都要…...
谷歌DeepMind少数股权投资《星战前夜:晨曦》开发商,借游戏探索AI新边界
谷歌DeepMind 1.2亿背后:游戏与AI的跨界联姻 谷歌专注于人工智能的DeepMind部门对热门科幻模拟游戏《星战前夜:晨曦》的开发商进行了少数股权投资。与此同时,《星战前夜:晨曦》开发商CCP Games的管理层斥资1.2亿美元从韩国发行商P…...
Gemini3.1Pro代码助手防错架构实战
代码助手能帮人提效,但在真实项目里,“防错”比“会写”更重要。尤其是当模型需要输出代码片段、补全函数、修改配置,甚至可能接触到仓库内容时,任何一次越界(例如输出不符合格式、调用了不该调用的工具、生成了不该执…...
从代码员到AISMM-L3认证者:一位算法工程师的90天能力重构路径(含奇点大会独家训练日志)
更多请点击: https://intelliparadigm.com 第一章:从代码员到AISMM-L3认证者:能力跃迁的本质定义 AISMM(AI Software Maturity Model)L3 认证并非对编程熟练度的简单加成,而是对系统性AI工程能力的结构化验…...
YOLO系列语义分割下采样改进:全网首发--使用 FSConv 改进 频域分离下采样卷积 ✨
1. 工程简介 🚀 本工程基于 Ultralytics 框架扩展,面向语义分割与 YOLO 系列模型改进实验。核心特点是通过切换 yaml 配置文件,即可快速完成不同网络结构的训练、对比与验证,无需为每个模型单独编写训练脚本。 当前已支持的主要模型家族 🧩 语义分割模型:UNet、UNet+…...

