嵌入式学习 51单片机01

一、框架

 

1、CPU(Central Processing Unit,中央处理单元)‌是计算机的核心部件,负责执行计算机指令和处理数据。

2、MCU(Microcontroller Unit,微控制单元)‌是一种将中央处理器、内存、输入输出接口等多种功能模块集成在单一芯片上的微型计算机系统。(特殊的CPU重视对外摄的控制而非数据的处理)

3、MPU(Microprocessor Unit,微处理器单元)‌是一种集成了CPU、内存、外设控制器和总线接口等功能的芯片。

4、GPU(Graphics Processing Unit,图形处理单元)‌是一种专门设计用于快速处理图像和视频数据的处理器。

5、SoC(System on Chip,系统级芯片)‌是将微处理器、模拟IP核、数字IP核、存储器以及必要的接口电路等多种电子系统功能模块集成在一个单一的芯片上。特殊的CPU(先进)

 

二、51单片机 

(一)8051内核

 

HC6800-MS原理图

 

 

(二)LED模块 

1、原理图

P20/SDA:网络编号(原理上二者连接在一起) 

2、代码 
main.c

#include <reg52.h> //register
#include "led.h"
void delay(unsigned int n)
{
    while(n--);
}
int main(void)
{
    //P2 = 0xFF; //初始化
    unsigned char i;
    int n;
    init_led();
//    led_on(0x3F);
    while(1)
    {
    //    delay(0x3FFF);
    //    P2 = 0xFF; init_led();
    //  P2= 0x00;
    //    delay(0x3FFF);
    //  P2 &= ~((1<<0)|(1<<3)|(1<<6));
    //    P2 &= ~(7<<2);
    //    P2 &= ~(0x0F<<2);
    //    P2 &= ~(0x1F<<2);
    //    P2 ^= (1<<0)|(1<<3)|(1<<6);
    //for(i=0;i <= 0xFF;++i)
//    {
//        led_on(i);
//        delay(0xFFFF);
//    }
//跑马灯
        i = 0x01;
        for(n=0;n < 7;++n)
        {
            led_on(i);
            delay(0xFFFF);
            i <<= 1;
        }
        i = 0x80;
        for(n=0;n < 7;++n)
        {
            led_on(i);
            delay(0xFFFF);
            i >>= 1;
        }
    }
}

led.c 

#include "led.h"
#include <reg52.h>

void init_led(void)
{
    P2 = 0xFF;     
}

void led_all_on(void)
{
    P2 = 0;
}

void led_on(unsigned char n)//1亮0灭
{
    n = ~n;;
    P2 = n;
}

void led_all_off(void)
{
    P2 = 0xFF;
}

void led_all_nor(void)
{
    P2 ^= 0xFF;
}

void led_nor(unsigned char n)
{
    P2 ^= n;
}

LED.H

#ifndef _LED_H_
#define _LED_H_

extern void init_led(void);
extern void led_all_on(void);
extern void led_on(unsigned char n);
extern void led_all_off(void);
extern void led_off(unsigned char n);
extern void led_all_nor(void);
extern void led_nor(unsigned char n);

#endif

(三)位运算 

 

指定位清零


公式:

        reg &= ~(1<<n)    //reg寄存器第n位清零

        reg &= ~((1<<n) | (1<<m))   //reg寄存器第m位和n位清零        

eg:P2 &= ~(1<<2) | (1<<3)

连续清零

        P2 &= ~(3<<2)  //连续2个比特位清零偏移2位

        P2 &= ~(7<<2)  //连续3个比特位清零

        P2 &= ~(0x0F<<2)  //连续4个比特位清零

        P2 &= ~(0x1F<<2)  //连续5个比特位清零

指定位置1


公式:

        reg |= (1<<n)   //reg寄存器第n位置1

        reg |= (1<<n) | (1<<m)  //reg寄存器第m位和n位置1  

连续置1

        P2 |= (7<<2)//连续3个比特位置1

指定位翻转


^:指定位翻转,其他位不变(相同为0不同为1)

eg:  P2 ^= (1<<0)|(1<<3)|(1<<6);

1、&  按位与

 & :双目运算符,优先级为8级,结合方向自左至右;

运算规则:一假则假 (任何一个为0,其结果必然为0;两个都为1,其结果1);

作用:指定位清零;

示例:

1001 1110 
0011 0010 &
-------------------

0001 0010 

 

2、|  按位或 

|:双目运算符,优先级为10级,结合方向自左至右;

运算规则:一真则真 (任何一个为1,其结果必然为1;两个都为0,其结果为0);

作用:指定位置1;

示例:

1001 1110 
0011 0010 |
-------------------

1011 1110

 

3、^ 按位异或  

^:双目运算符,优先级为9级,结合方向自左至右;

运算规则:相同为0,不同为1;

作用:指定位翻转,其他位不变;

示例:

1001 1110 
0011 0010 ^
-------------------

1010 1100

 

4、~ 取反 

~:单目运算符,优先级为2级,结合方向自右至左;

运算规则:按位取反(将0变1,1变0);

示例:

1001 1110  ~
-------------------

0110 0001

 

5、<<  左移

<<:双目运算符,优先级为5级,结合方向自左至右;

写法:a<<n  (表示将a这个数据左移n位 )(C语言中为逻辑左移)

最高位无论是1还是0全丢掉,后面补0;

作用:指定位清零( ~(1 << n));

示例:

0000 0001 
0000 0010
左移1位  相当于乘 2  

6、>>  右移 

1、>>:双目运算符,优先级为5级,结合方向自左至右;

2、写法:a>>n(表示将 a这个数据 右移 n位)

3、算术右移是看符号位和看数据类型的:

(1)有符号数据类型,右移时,最高位补的是符号位; (算术右移)     

(2)无符号类型的数据,右移时,最高位补的0 ;(逻辑右移)

注:在使用右移运算符时最好定义无符号数据类型(eg:unsigned char)

4、示例:

1000

1100

-----------

0100

0010

右移1位  相当于除 2   

 

(四)寄存器

1、定义

在数字电路中,用来存放二进制数据或代码的电路称为寄存器。

2、本质

P2寄存器本质:地址强转为指针间接访问

#define P2 *((unsigned char *)(0xA0))

注:第一个 * 为指针运算符(对该指针(unsigned char *)(0xA0)的间接访问)

 sfr P2 = 0xA0;

sfr为特殊功能寄存器,0xA0为地址

  

注:寄存器可假定为系统提前定义好的全局变量(unsigned char P2;//一个字节8个比特) 

(五)存储器

 

RAM(易失性存储器)
        又称随机访问存储器;

        易失性存储器(Volatile Memory)‌是指断电后存储的数据会立即消失的存储器。这类存储器通常具有较快的存取速度,但无法长期保存数据。易失性存储器的典型代表有DRAM(动态随机存取存储器)和SRAM(静态随机存取存储器)‌。 

ROM(非易失性存储器)
        又称只读存储器;

        特点对比非易失性存储器(Non-Volatile Memory, NVM)‌是指当电流关闭后,所存储的数据不会消失的存储器。这类存储器在断电后仍能保持数据,因此常用于需要长期保存数据的场合。非易失性存储器的典型代表包括ROM(只读存储器)、Flash(闪存,包括NAND和NOR类型)、EEPROM(电可擦可编程只读存储器)等‌。

特点对比


‌非易失性存储器‌:

‌数据保留‌:断电后数据不丢失,适合长期数据存储。
‌写入次数有限‌:如Flash存储器有一定的擦写次数限制。
‌容量和速度‌:EEPROM支持字节级擦写,但容量较小;Flash存储器速度较慢,适合大容量数据存储‌。


‌易失性存储器‌:

‌数据不保留‌:断电后数据立即消失。
‌速度快‌:如SRAM和DRAM具有较高的存取速度,适合临时数据存储和高频访问‌。
‌依赖供电‌:需要持续供电以保持数据,断电后数据丢失‌。
 

(六)数码管

段选:选择数码管中某段的亮灭状况(P0来控制)

位选:选择哪个数码管显示(LEDS1、LEDS2、LEDS3、LEDS4来控制)

code关键字

前加该关键字,将数组放入代码区(ROM),降低对RAM空间的使用。

1、原理图

 注:共阴极,在三极管中,将P10置一,LEDS1即为0被选中

2、代码 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/910199.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言之内存对齐

一、为什么要内存对齐 Arm对内存的访问支持字&#xff08;4byte&#xff09;、半字&#xff08;2byte&#xff09;、字节&#xff08;1byte&#xff09;的直接访问&#xff0c;但是呢他们是有一定的要求的&#xff1a; 存取字时要求地址按字对齐&#xff0c;也就是地址要是4的…

Python 基础语法 -----函数

一、函数 1、函数是什么 编程中的函数和数学中的函数有一定的相似之处。 数学上的函数&#xff0c;比如 y sin x&#xff0c;x 取不同的值&#xff0c;y 就会得到不同的结果。 编程中的函数是一段可以被重复使用的代码片段。 &#xff08;1&#xff09;求数列的和&#x…

Windows/Linux系统 Ollama部署deepseek 大模型

Ollama 是一个开源工具&#xff0c;专门用于在本地计算机上运行和操作大型语言模型&#xff08;LLM&#xff09; 官方下载网站&#xff08;https://ollama.ai/&#xff09; Windows系统安装方法 建议命令行安装&#xff08;默认安装会直接安装到C盘&#xff09; OllamaSetu…

用Tensorflow进行线性回归和逻辑回归(一)

这一章告诉你如何用TensorFlow构建简单的机器学习系统。第一部分回顾构建机器学习系统的基础特别是讲函数&#xff0c;连续性&#xff0c;可微性。接着我们介绍损失函数&#xff0c;然后讨论机器学习归根于找到复杂的损失函数最小化的点的能力。我们然后讲梯度下降&#xff0c;…

java/.net跨平台UI浏览器SDK,浏览器控件开发包分析

在 Linux 系统中&#xff0c;虽然没有完全等同于安卓 WebView 的内置浏览器 SDK&#xff0c;但存在多种基于开源浏览器引擎的解决方案&#xff0c;支持通过 Java 代码控制网页加载和执行 JavaScript。以下是具体实现方案和技术细节&#xff1a; 一、核心技术方案对比 方案名称…

Taro 状态管理全面指南:从本地状态到全局方案

在跨端应用开发中&#xff0c;状态管理是构建可维护、可扩展应用的核心环节。作为京东凹凸实验室推出的多端统一开发框架&#xff0c;Taro 支持 React/Vue 等主流前端框架&#xff0c;自然也继承了丰富的状态管理生态。本文将全面剖析 Taro 中的各种状态管理方案&#xff0c;从…

记录一下jar做成windows服务问题

1、打包好jar 2、把jdk防止到和jar同一目录下 3、下载winsw-x64.exe 和 sample-minimal.xml https://github.com/winsw/winsw/releases/download/v2.12.0/WinSW-x64.exehttps://github.com/winsw/winsw/releases/download/v2.12.0/WinSW-x64.exe sample-minimal.xmlhttps://…

【Dify 案例】【MCP实战】【二】【超级助理】

我们创建一个工作流。你是一个超级助理,能够根据输入的指令,进行推理和自主调用工具,完成并输出结果。 注意,需要判断是否调用高德MCP来获取对应工具协助你完成任务。 1.开始 2.策略大脑 2.1 AEGNT策略 2.2 工具列表 2.3 指令

Qt Quick 与 QML(二)qml中的顶级窗口

一、前言 在QML中&#xff0c;‌顶级窗口不是绝对必需的‌&#xff0c;但它在大多数应用场景中扮演着关键角色。 需要顶级窗口的典型场景&#xff1a; 1.独立桌面/移动应用‌ 必须使用Window或ApplicationWindow作为根元素。 2.多窗口应用 每个独立窗口都需要一个顶级窗口实例…

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 免费服务开通全流程与Rest API和OpenAI SDK调用详解

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 免费服务开通全流程与Rest API和OpenAI SDK调用详解 前言 本文将详细介绍DeepSeek-V3/R1 免费服务开通全流程&#xff0c;并且详细讲解通过本地方式Rest API和OpenAI SDK两种方式调用DeepSeek-V3/R1 前提准备 1、访问 Mod…

Qt 连接信号使用lambda表达式和槽函数的区别

1. 语法与代码结构 成员函数 需在类中显式声明槽函数&#xff08;public slots: 或 Qt 5 后的任意成员函数&#xff09;&#xff0c;并在连接时指定接收对象。 class Receiver : public QObject {Q_OBJECT public slots:void handleSignal(int value) { /* ... */ } };// 连接…

学习笔记丨AR≠VR:透视沉浸式技术的“虚实象限”法则

AR&#xff08;增强现实&#xff09;和VR&#xff08;虚拟现实&#xff09;是沉浸式技术的两大分支&#xff0c;核心区别在于虚拟与现实的融合程度。以下是两者的详细对比&#xff1a; 对比维度 AR&#xff08;增强现实&#xff09; VR&#xff08;虚拟现实&#xff09; 技术…

本地使用 modelscope 大模型 来进行文本生成视频(Text-to-Video)

1. ✅ 创建并激活 Conda 环境&#xff08;Python 3.8&#xff09; conda create -n modelscope python3.8 -yconda activate modelscope 2.✅ 安装了 PyTorch&#xff08;CPU 版本&#xff09; 如果你是 CPU-only 用户&#xff08;没有 NVIDIA 显卡 或不想用 GPU&#xff0…

文生视频(Text-to-Video)

&#x1f552; 生成时间&#xff1a;每张图大概 10–60 秒&#xff08;取决于设备&#xff09; ✅ 二、文生视频&#xff08;Text-to-Video&#xff09; 以下项目中&#xff0c;很多都基于 SD 模型扩展&#xff0c;但视频生成复杂度高&#xff0c;生成时间一般 超过 30 秒&am…

CLion + STM32环境配置,亲测有效(2025.06.19记)

CLion STM32环境配置 遇到的问题描述&#xff1a; > "moniton" command not supported by this target. > You cant do that when your target is exec > 上传完成&#xff0c;但存在问题 > monitor reset > "monitor" command not …

借助ChatGPT快速开发图片转PDF的Python工具

一、开发背景与适用场景 随着数字文档处理需求的激增&#xff0c;图片转PDF的需求日益广泛。从学生提交图像化作业&#xff0c;到教师整合扫描试卷等资料&#xff0c;再到行政人员归档证件照片&#xff0c;工作中的方方面面都离不开图片的处理。如何高效、批量地将多个图片文件…

SuGAR代码精简解读

目录 一、全流程训练脚本 train_full_pipeline.py 二、核心训练逻辑 train.py 粗优化 (coarse_density_and_dn_consistency.py) 网格提取 (extract_mesh_from_coarse_sugar) 精优化 (refined_training) 两次优化&#xff08;粗优化和精优化&#xff09;中使用的损失函数及…

大模型安全关键技术研究

​ 引言 随着人工智能技术的迅猛发展&#xff0c;大模型已成为推动各行业变革的核心力量。从智能客服、医疗影像识别到金融风险预测&#xff0c;大模型的应用场景不断拓展&#xff0c;深刻改变着人们的生产生活方式。大模型已经转变为AI领域的基础设施&#xff0c;为解决各种…

java面试题04成员变量和局部变量的区别

成员变量(Member Variable)和局部变量(Local Variable)是面向对象编程中两种作用域和生命周期不同的变量,主要区别体现在以下几个方面: 1. 声明位置 成员变量: 声明在类内部、方法/构造器/代码块外部。 例如: public class Person {// 成员变量(实例变量)private Str…

升级到 .NET 9 分步指南

随着激动人心的 .Net 9 更新正式发布&#xff0c;漫长的等待终于结束了。它带来了一些令人惊叹的特性&#xff0c;例如改进的 LINQ 功能、HybridCache 等等。此外&#xff0c;凭借其卓越的性能提升、更佳的安全性、更完善的协议和更易维护的特性&#xff0c;它必将吸引开发者和…