当前位置: 首页 > news >正文

嵌入式软件--51单片机 DAY 1

一、单片机

1.单片机概念

51单片机(或称8051单片机)原是指1980年由Intel公司推出的一种8位微控制器系列,现在更多的指实现了8051指令集(单片机的“语言”)的一系列单片机。8位指的是寄存器的位数和数据总线的位数,内部的ALU也是8位的,一次操作能处理8位的数据。32位指的是寄存器是32位的,也是同样的道理。

2.命名规范

比如:STC89C52RC-40I-LOFP44

STC   89  C  52  R  C  -  40       I-LOFP  44

STC:生产公司的简写

89:内核单片机的具体型号

C:工作电压 高电压 5.5V-3.3V     L:低电压3.6V-2.0V

52:程序空间大小,可以理解为电脑的硬盘,存放用户数据,断电不丢失。

RC  RAM大小,RC是512字节,RD+是1280字节

40 工作频率  25 40 50个标准,单位是兆赫兹。

I 工作温度 工业级 -40到-85度   C:商业级,0°C到70°C

LOFP:封装类型

44:管脚数

3.引脚

电源引脚:VCC、Gnd,用于为单片机供电

复位引脚:RST ,重启

时钟引脚:XTAL1,XTAL2 用于连接时钟源,为单片机提供时钟信号

通用输入输出引脚:GPIO  P0--P4。即可读取外部数据,也可输出。

4.开发环境

嵌入式的开发环境需要两个部分,软件和硬件。

我们所学的51单片机所需的开发板分为核心板和扩展板。

核心板3D渲染图:

核心板与扩展板焊接相连,保证合格。

软件开发环境

Keil是一个运行在Windows系统中的单片机集成开发环境(Integrated Development Environment),其提供了代码编辑、代码编译、仿真和调试等功能。

官网的下载地址为:Keil Embedded Development Tools for Arm, Cortex-M, Cortex-R4, 8051, C166, and 251 processor families.

STC-ISP是STC专门为STC芯片设计的烧录工具。

官方下载地址为:http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.92A.zip

5.使用

VScode也可以安装拓展EIDE来编译51单片机程序。

编译成功的程序。可以在硬盘中找到hex文件。用STC(用typeC线连接电脑与单片机芯片),打开程序烧录进单片机芯片,便可以使用了。

二、案例

1.闪烁LED

LED1每秒钟闪烁一次!

思路:我们通过原理图知道,与LED灯相连的芯片引脚为P00。想让LED1闪烁,只需让P00的值不断地在0和1之间循环变化即可。

#include <STC89C5xRC.H>
#include "Com_Util.h"
#define LED1 P00
void main()
{while (1){LED1=~LED1;Com_Util_Delay1ms(100);//循环闪烁,延迟100毫秒}}

2.流水灯

p00=0亮,=1灭,其他引脚亦是如此。

我们先定义一个中间值,temp,让temp=0x01(0000 0001)。让p0=~temp=0xFE(1111 1110),p0最低位为0,如此LED1亮,其他不亮。之后让temp继续左移(0000 0010),P0=1111 1101,LED2亮。如此循环往复。等到temp=1000 0000,p0=0111 1111,最后一个灯亮起,最后再让temp=0x01,继续循环。再一次让temp=0x01时,p0=0x7F

#include <STC89C5xRC.H>
#include "Com_Util.h"
void main()
{u8 temp=0x01;//0000 0001while(1){P0=~temp;//1111 1110temp<<=1;//0000 0010Com_Util_Delay1ms(100);if(P0==0X7F){temp=0x01;}}while (1){}}

3.正反来回灯

让LED灯来回流走。

我们已经知道,temp=10000 0000,p0=1111 1111灯光闪烁已经到了尽头。如果要实现来回走。就要在p0=1111 1111时,变为p0=0111 1111,这就需要temp=1000 0000.如果想要跳出循环,可以设置变量,利用两个死循环的分别让正反两种走法实现。

#include <STC89C5xRC.H>
#include "Com_Util.h"
void main()
{u8 temp=0x01;//0000 0001u8 tamp=0x80;//1000 0000u8 a=1,b=1;while(a){P0=~temp;//1111 1110temp<<=1;//0000 0010Com_Util_Delay1ms(100);if(P0==0x7F){temp=0x01;a=0;}}while (b){P0=~tamp;tamp>>=1;Com_Util_Delay1ms(100);if(P0==0xFE){tamp=0x80;b=0;}}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器(附项目源码)
  • python网络爬虫(一)——网络爬虫基本原理
  • 全国大学生数据建模比赛——深度学习
  • ROS Simulink 支持与限制
  • python实战一:合并多个Excel中数据
  • ios私钥证书(p12)导入失败,Windows OpenSSl 1.1.1 下载
  • iptables防火墙常用命令,运维必备
  • 【网络原理】Udp 的报文结构,保姆式教学,快速入门
  • Transformer简明笔记:文本翻译
  • 充气泵芯片|充气泵方案芯片SIC8833
  • 【专题】2024年中国游戏出海洞察报告合集PDF分享(附原数据表)
  • Redis的String和Hash
  • 网络-多路io
  • Java基于微信小程序的美食推荐小程序,附源码
  • 基于InstaSPIN-user's guide Foc电流环速度环PI参数计算过程
  • [LeetCode] Wiggle Sort
  • 5、React组件事件详解
  • Akka系列(七):Actor持久化之Akka persistence
  • eclipse的离线汉化
  • egg(89)--egg之redis的发布和订阅
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • mongo索引构建
  • PHP的类修饰符与访问修饰符
  • Python学习笔记 字符串拼接
  • Redis的resp协议
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 初探 Vue 生命周期和钩子函数
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 积累各种好的链接
  • ​Java基础复习笔记 第16章:网络编程
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # Kafka_深入探秘者(2):kafka 生产者
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1)svelte 教程:hello world
  • (2)空速传感器
  • (7)svelte 教程: Props(属性)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (杂交版)植物大战僵尸
  • .equals()到底是什么意思?
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET 发展历程
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 使用反射注册事件
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .net中我喜欢的两种验证码
  • /boot 内存空间不够
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @Transactional 详解
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!