关于嵌入式学习——单片机1

基础整体概念

以应用为中心:消费电子(手机、蓝牙耳机、智能音响)、医疗电子(心率脉搏、呼吸机)、无人机(大疆D)、机器人(人形四足机器人)
计算机技术:

  • 计算机五大组成:

        运算器(数据运算)、控制器(指令控制)、存储器(内存外存)、输入设备(鼠标、键盘、摄像头)、输出设备(显示器)

  • 软件:

        编程语言(C/C++)、操作系统(Linux文件、多任务、网络)、数据结构、数据库

  • 硬件
    • 51单片机:硬件概念(定时器、PWM、中断)、原理图、寄存器、外设操作(LED、按键、数码管、蜂鸣器、传感器)
    • STM32单片机:库开发(标准库、HAL库)
    • ARM:英国公司 设计处理器芯片方案,SAMSUNG、ATMEL、NXP->ARM芯片方案>开发板(ARM)
    • ARM7、ARM9、ARMI1
    • CortexA:应用高端领域,处理复杂任务,用来跑作系统(Lnux 文件系统 多任务调度 网络)
    • CortexR:应用实时控制领域,实时性要求高(汽车电子)
    • CortexM:应用微控制器领域,MCU单片机(IOT物联网智能家居 控制领域)
  • 特点:软硬件可裁剪——加入需要的硬件/软件功能,将不需要的硬件/软件裁剪掉(低功耗、低成本)
  • 计算机:通用型计算机:PC、平板、手机/专用型计算机:无人机,完成某项特定功能而设计计算机

一、嵌入式:
以应用为中心,以计算机技术为基础,软硬件可裁势的专用计算机系统
二、51单片机:

  • 1980年,由Intel公司MCS-51系列:8051型号单片机(工业控制领域),由MCU转型到CPU
  • 其他公司:Atmel(AT89C51)、Philip(P89V51系列单片机,增强型单片机ISP在线编程)、STC宏晶半导体(STC89C51 STC89C52 STC89C52RC)

三、相关概念:
CPU:Central Processing Unit(中央处理器)数据运算、指令处理,CPU性能越高,完成指令处理和数据运算的速度越快

MCU: Micro Ctroller Unit(微控制器),集成度比较高,将所有功能集成到芯片中(CPU、RAM、ROM、定时器、UART、10),简单控制,成本低

MPU:Micro Procesing Unit(微处理器),集成度低,只有一块单独的CPU,需外接外设、存储模块,复杂应用领域,跑Linux操作系统,成本高

GPU:Graphics Processing Unit(图形处理器),图形处理、图形渲染(GPU性能越好,图形显示的质量越好)
NPU:Neural Processing Unit(神经网络处理器),A|推理、硬件加速,神经网络处理(卷积运算)->华为Mate60 达芬奇NPU AI自动优化照片

FPU:Floating Point Unit(浮点数运算单元),完成浮点数的运算和处理(完全遵循IEEE 754),大部分集成在CPU内部

SOC:System On Chip(片上系统),集成度比较高,将多个芯片集成到一块芯片上(存储芯片、外设芯片)

四、RAM和ROM:
外存:主要存放程序、代码、指令,掉电数据不丢失,读写速度慢,价格便宜(移动硬盘 1T 300)

内存:主要存放程序运行过程中的临时变量、掉电数据丢失,读写速度快,价格昂贵(内存条16G 300)
ROM:Read-Only Memory,只读存储器,存放单片机程序,指令,掉电数据不丢失

RAM:Random Access Memory,随机访问存储器,存放临时变量、临时数据,掉电数据丢失

五、单片机芯片内部结构:

ex:具体实现

CPU、RAM、ROM、Timer、PWM、I0、中断

三大总线:

  • 地址总线:用来寻找RAM中的地址,所能寻址的最大范围2^8,256byte,单向
  • 数据总线:通过地址总线去获取数据,数据交互双向
  • 控制总线:时序控制、IO控制

六 位运算:
1、|:将二进制中的对应位的bit进行比较,如果有一个bit为1,结果为1;如果都为0,结果为0;

        应用场景:指定位置1

unsigned char t = 0x60;

(数据高位 MSB bit7)  0110 0000 (bit0 LSB 数据低位)

第0位置1:t=t|(1 << 0);

第3位置1:t=t|(1 << 3);

第0位和第3位置1:t=t|(1 << 0)| (1 << 3);

2、 &:将二进制中的对应位的bit进行比较,如果全为1,结果为1:如果有一个0,结果为0;
  应用场景:指定位清0

unsigned char t = 0xFF:
将bit 0 和 bit7 清0:
t &= ~(1 << 0);

t &= ~(1 << 7);

exe:

        练习:
定义两个变量:
unsigned char a = 0x62;
unsigned char b = 0xFF;

                (1)将a转换成二进制,将bit0和bit7置1
// 二进制:0110 0010
// t |= (1 << 0) | (1 << 7);

                (2)将b转换成二进制,将高4位清0
// 二进制:1111 1111           
    // t &= ~(0x0F << 4);         
// t &= ~(0xF0 << 0);  
     

3、^:  将对应位的bit进行比较,相同为0,相异为1

七、单片机程序创建、编写、编译、下载流程:

        (1)安装Keil4软件

        (2)点击"Project"  -> "New Project"  -> 选择路径 (为工程起一个名字)            

        (3)选择单片机芯片型号:Atmel->AT89C51,点击"否",不拷贝启动代码

        (4)向Group中添加C语言文件:  点击左上方text按钮,ctrl + S将文件保存到工程对应的目录(为文件起一个名字,如 main.c),双击左侧Grpup,点击Add 将文件加入到对应的Group下

        (5)编写单片机程序:

                (1) #include <reg51.h>, 加入51单片机头文件

                (2)需要加入while(1)避免程序跑飞


(6)编译单片机程序:

(1)点击"Target Options"按钮,点击"Output"选项中的"Create HEX FILE"选项,生成hex文件

                (2)点击左上方"Build"编译单片机工程

                (3)会在对应目录下生成xxx.hex十六进制文件


(7)下载单片机程序:

                (1)打开ISP软件,连接串口线

                (2)选择单片机芯片型号:STC89C52/C51/C52RC

                (3)根据串口识别的端口号,选择对应的端口  COM3(设备管理器->端口查看)

                (4)选择"打开程序文件" -> 对应目录下的hex文件

                (5)点击"下载/编程"按钮,将单片机复位后程序即可下载到单片机ROM中

八、原理图:
        MCU单片机

1芯片模块:

  • STC89C52RC、DIP40 封装:双列直插式,40个引脚,划分成4组(端口 寄存器 unsigned char P2;)
  • 网络编号:在实际电路中的一个编号,避免物理连线,相同网络的编号的引脚在实际电路中是彼此互通

2LED模块:

  • 电阻:数字标注法:前两位/3位为有效数字,最后一位是10的幂次方
  • 发光二极管:具有单向导通性,分为共阳极和共阴极二极管:将所有发光二极管的阳极接到电源正极(VCC),阴极接到单片机的引脚。此时发光二级管阳极会输出高电平(VCC 5V),如果发光二级阴极输出一个低电平(0V),阳极和阴极之间会形成一个正向的电压差,满足发光二极管的单向导通性,所以电流就会从阳极流向阴极,发光二极管就被点亮。

void LED_INIT(void)
{P2 = 0xFF;return;
}
//全亮
void LED_OFF(void)
{P2 = 0x00;return;
}
//全灭
void LED_ON(void)
{P2 = 0xFF;return;
}//异或  初始化为全1  与全1 按位异或  得到全0 就亮 得到全1就灭
void LED_NOR(void)
{P2^=0xFF;return;
}//流水灯  因为是低电平点亮 所以要取反
void LED_Show(unsigned int n)
{P2 = ~n;return;
}
#include <reg51.h>
#include <delay.h>
#include <led.h>
int main(void)
{int i = 0;LED_INIT();//初始化while(1){
//第一种方式
//		LED_ON();
//		delay(0xAFFF);
//		LED_OFF();
//		delay(0xAFFF);
//第二种方式
//		LED_NOR();
//		delay(0xAFFF);//流水灯for(i = 0; i < 8; i++){LED_Show(1 << i);delay(0xAFFF);LED_OFF();}for(i = 7; i >= 0; i--){LED_Show(1 << i);delay(0xAFFF);LED_OFF();}}return 0;
}

3、数码管:
 数码管:51单片机搭载一个4位共阴极数码管,每一位数码管可以显示一些独立数值,数码管同一时刻只能显示一位

  • 位选:选中某一位数码管(将P1寄存器对应bit位置1)
  • 段选:P0寄存器(abcdrfg)

//  先位选P1 &= ~(0x0F << 0);//初始化 低四位全部置0;P1 |= 1 << 0;//(P10置1)//	再段选P0 = 0x06;//(bc段置1 表示1 000000110)
  • 静态显示
//静态显示一个数码管//位选Select_bit(0); while(1){for (i = 0; i < 10; i++){Select_seg(i);delay(0xAFFF);P0 = 0;}}	return 0;
}#include <reg51.h>//段码表
unsigned int seg[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数组里数字代表从0 到9//片选
void Select_bit(unsigned int n)
{P1 &= ~(0x0F << 0);//初始化 低四位清零P1 |= (1 << n);	   //片选 0 1 2 3 哪位NPNreturn;
}
//段选
void Select_seg(unsigned int n)
{P0 = seg[n];//根据段码表里这个数字指定显示abcdefgreturn;
}
  • 动态显示
//动态展示四位数码管while(1){for(i = 0; i <= 9999; i++){digiter_show(i);delay(0xAFFF);}}return 0;
}//动态显示4位数码管
void digiter_show(unsigned int n)
{int i = 0;int j = 0;while(n != 0){  	i = n % 10;Select_bit(j);//位选j++;P0 = 0;		//选中NPN先清除Select_seg(i);// 段选delay(100);//延迟很小的一段时间 让肉眼以为四位数码管同时出现n = n / 10;}return;
}

重点:

  • 1.MCU、CPU、GPU、NPU、SOC、MPU、FPU
  • 2.内存、外存的区别
  • 3.RAM和ROM的区别,单片机RAM大小
  • 4. 三大总线及其特点
  • 5.LED发光二极管分类及其特点
  • 6.数码管显示原理流程 

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

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

相关文章

LightDock.server liunx 双跑比较

LightDock: a new multi-scale approach to protein–protein docking The LightDock server is free and open to all users and there is no login requirement server 1示例 故去除约束 next step 结果有正有负合理 2.常见警告⚠ Structure contains HETATM entries. P…

SQL面试题及详细答案150道(61-80) --- 多表连接查询篇

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。 前后端面试题-专栏总目录 文章目录 一、本文面试题目录 61. 什么是内连接(INNE…

【实操】Noej4图数据库安装和mysql表衔接实操

目录 一、图数据库介绍 二、安装Neo4j 2.1 安装java环境 2.2 安装 Neo4j&#xff08;社区版&#xff09; 2.3 修改配置 2.4 验证测试 2.5 卸载 2.6 基本用法 2.7 windows连接服务器可视化 三、neo4j和mysql对比 3.1 场景对比 3.2 Mysql和neo4j的映射对比 3.3 mys…

【mysql】SQL查询全解析:从基础分组到高级自连接技巧

SQL查询全解析&#xff1a;从基础分组到高级自连接技巧详解玩家首次登录查询的多种实现方式与优化技巧在数据库查询中&#xff0c;同一个需求往往有多种实现方式。本文将通过"查询每个玩家第一次登录的日期"这一常见需求&#xff0c;深入解析SQL查询的多种实现方法&a…

MySQL常见报错分析及解决方案总结(9)---出现interactive_timeout/wait_timeout

关于超时报错&#xff0c;一共有五种超时参数&#xff0c;详见&#xff1a;MySQL常见报错分析及解决方案总结(7)---超时参数connect_timeout、interactive_timeout/wait_timeout、lock_wait_timeout、net等-CSDN博客 以下是当前报错的排查方法和解决方案&#xff1a; MySQL 中…

第13章 Jenkins性能优化

13.1 性能优化概述 性能问题识别 常见性能瓶颈&#xff1a; Jenkins性能问题分类&#xff1a;1. 系统资源瓶颈- CPU使用率过高- 内存不足或泄漏- 磁盘I/O瓶颈- 网络带宽限制2. 应用层面问题- JVM配置不当- 垃圾回收频繁- 线程池配置问题- 数据库连接池不足3. 架构设计问题- 单点…

Python+DRVT 从外部调用 Revit:批量创建梁

今天让我们继续&#xff0c;看看如何批量创建常用的基础元素&#xff1a;梁。 跳过轴线为直线段形的&#xff0c;先从圆弧形的开始&#xff1a; from typing import List, Tuple import math # drvt_pybind 支持多会话、多文档&#xff0c;先从简单的单会话、单文档开始 # My…

水上乐园票务管理系统设计与开发(代码+数据库+LW)

摘 要 随着旅游业的蓬勃发展&#xff0c;水上乐园作为夏日娱乐的重要组成部分&#xff0c;其票务管理效率和服务质量直接影响游客体验。然而&#xff0c;传统的票务管理模式往往面临信息更新不及时、服务响应慢等问题。因此&#xff0c;本研究旨在通过设计并实现一个基于Spri…

【前端教程】JavaScript DOM 操作实战案例详解

案例1&#xff1a;操作div子节点并修改样式与内容 功能说明 获取div下的所有子节点&#xff0c;设置它们的背景颜色为红色&#xff1b;如果是p标签&#xff0c;将其内容设置为"我爱中国"。 实现代码 <!DOCTYPE html> <html> <head><meta ch…

qiankun+vite+react配置微前端

微前端框架&#xff1a;qiankun。 主应用&#xff1a;react19vite7&#xff0c;子应用1&#xff1a;react19vite7&#xff0c;子应用2 &#xff1a;react19vite7 一、主应用 1. 安装依赖 pnpm i qiankun 2. 注册子应用 (1) 在src目录下创建个文件夹&#xff0c;用来存储关于微…

git: 取消文件跟踪

场景&#xff1a;第一次初始化仓库的时候没有忽略.env或者node_modules&#xff0c;导致后面将.env加入.gitignore也不生效。 取消文件跟踪&#xff1a;如果是因为 node_modules 已被跟踪导致忽略无效&#xff0c; 可以使用命令git rm -r --cached node_modules来删除缓存&…

开讲啦|MBSE公开课:第五集 MBSE中期设想(下)

第五集 在本集课程中&#xff0c;刘玉生教授以MBSE建模工具选型及二次定制开发为核心切入点&#xff0c;系统阐释了"为何需要定制开发"与"如何实施定制开发"的实践逻辑&#xff0c;并提炼出MBSE中期实施的四大核心要素&#xff1a;高效高质建摸、跨域协同…

CSDN个人博客文章全面优化过程

两天前达到博客专家申请条件&#xff0c;兴高采烈去申请博客专家&#xff1a; 结果今天一看&#xff0c;申请被打回了&#xff1a; 我根据“是Yu欸”大神的博客&#xff1a; 【2024-完整版】python爬虫 批量查询自己所有CSDN文章的质量分&#xff1a;附整个实现流程_抓取csdn的…

Websocket的Key多少个字节

在WebSocket协议中&#xff0c;握手过程中的Sec-WebSocket-Key是一个由客户端生成的随机字符串&#xff0c;用于安全地建立WebSocket连接。这个Sec-WebSocket-Key是基于Base64编码的&#xff0c;并且通常由客户端在WebSocket握手请求的头部字段中发送。根据WebSocket协议规范&a…

SVT-AV1编码器中实现WPP依赖管理核心调度

一 assign_enc_dec_segments 函数。这个函数是 SVT-AV1 编码器中实现波前并行处理&#xff08;WPP&#xff09; 和分段依赖管理的核心调度器之一。//函数功能&#xff1a;分配编码解码段任务//返回值Bool//True 成功分配了一个段给当前线程&#xff0c;调用者应该处理这个段//F…

直接让前端请求代理到自己的本地服务器,告别CV报文到自己的API工具,解放双手

直接使用前端直接调用本地服务器&#xff0c;在自己的浏览器搜索插件proxyVerse&#xff0c;类似的插件应该还有一些&#xff0c;可以选择自己喜欢的这类插件可以将浏览器请求&#xff0c;直接转发到本地服务器&#xff0c;这样在本地调试的时候&#xff0c;不需要前端项目&…

Golang Goroutine 与 Channel:构建高效并发程序的基石

在当今这个多核处理器日益普及的时代&#xff0c;利用并发来提升程序的性能和响应能力已经成为软件开发的必然趋势。而Go语言&#xff0c;作为一门为并发而生的语言&#xff0c;其设计哲学中将“并发”置于核心地位。其中&#xff0c;Goroutines 和 Channels 是Go实现并发编程的…

17 C 语言宏进阶必看:从宏替换避坑到宏函数用法,不定参数模拟实现一次搞定

预处理详解1. 预定义符号//C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 __FILE__ //进⾏编译的源⽂件--预处理阶段被替换成指向文件名字符串的指针--char* 类型的变量 __LINE__ //⽂件当前的⾏号 --预处理阶段替换成使用…

深入剖析 HarmonyOS ArkUI 声明式开发:状态管理艺术与最佳实践

好的&#xff0c;请看这篇关于 HarmonyOS ArkUI 声明式开发范式与状态管理的技术文章。 深入剖析 HarmonyOS ArkUI 声明式开发&#xff1a;状态管理艺术与最佳实践 引言 随着 HarmonyOS 4、5 的广泛应用以及面向未来的 HarmonyOS NEXT&#xff08;API 12&#xff09;的发布&…

Qwen-Code安装教程

一、概述Qwen Code 是一个强大的基于命令行、面向开发者的 AI 工作流工具&#xff0c;改编自 Gemini CLI&#xff0c;专门针对 Qwen3-Coder 模型进行了优化。它专门为代码理解、代码重构、自动化工作流、Git 操作等场景设计&#xff0c;让你的开发工作变得更高效、更智能。它既…