51单片机基础知识

一. 基础知识

1.1 主频与时间

主频: CPU工作频率

频率单位:

HZ

KHZ :1KHZ = 10^3HZ

MHZ :1MHZ = 10 ^3KHZ = 10^6HZ

GHZ :1GHZ = 10 ^3MHZ = 10^9HZ

THZ :1THZ = 10^3GHZ = 10^12HZ

小频率 -> 大频率: 除

大频率 -> 小频率:乘

主频:2.1GHZ -> HZ: 2.1GHZ * 10^9 = 2,100,000,000HZ

时间(时间和频率呈倒数关系):

1 / 2,100,000,000HZ = 0.5ns

时间单位:

s

ms

us

ns

1.2 晶振

晶振分为12 MHZ11.0592MHZ

1.3 芯片的封装形式

双列直插式40引脚封装

引脚:划分成4组:P0、P1、P2、P3,每组有8个引脚

1.4 其他

**电阻:**数字标注法

102 :数字标注法,前面两位/三位作为有效数字,最后一位数表示10的几次方

10 * 10^2 = 1KΩ

103:10 * 10^3 = 10k

**外设寄存器:**能够操作硬件,具有固定地址的空间

二. 51单片机

2.1 基础

51单片机是一个8位单片机

1980,Intel公司MCS-51系列:8051处理器架构

Atmel(AT89C51)、Philip(P89V51 增强型单片机 在线编程)、STC宏晶半导体

( STC89C51 STC89C52 STC89C52RC)

处理器架构:x86(32位)、x64(64位)、8051(8位)、ARM(32位)

CPU: Central Processing Unit,中央处理器,完成指令处理和数据运算

MCU: Micro Controller Unit,微控制器,集成度高,把所有功能集成到一块芯片中(CPU、

RAM、ROM、Timer、GPIO、中断、UART),成本低,应用简单控制领域

**MPU:**Micro Processing Unit,微处理器,集成度低,只有一块单独的CPU芯片,需要单独

外接存储模块、外设模块,成本高,复杂应用领域,跑Linux操作系统

**GPU:**Graphics Processing Unit,图形处理器,图形处理、图像渲染

**NPU:**Neural Processing Unit,神经网络处理器,AI推理、AI加速,神经网络处理,卷积算

**FPU:**Float Point Unit,浮点数运算单元,大部分集成在CPU内部

SOC: System On Chip(片上系统),将很多个芯片集成到一起

2.2 单片机最小系统

单片机最小系统:电源电路+晶振电路+复位电路

2.3 内存与外存

内存: 读写速度快,掉电数据丢失,价格昂贵(内存条),存放程序中的变量

**外存:**读写速度慢,掉电数据不丢失,价格便宜(硬盘、SD卡),存放程序、代码、指令

ROM:Read - Only Memory ,只读 存储器,存放单片机程序、代码、指令

RAM: Random Aceess Memory , 随机访问 存储器,存放程序运行过程中的变量

2.4 CPU与RAM之间的三大总线

1. 地址总线: CPU通过地址总线寻找RAM中的地址,最大寻址范围2^8(256byte) 单向

2. 数据总线: CPU与RAM之间进行数据传输双向

3. 控制总线: CPU通过控制总线发送控制指令 双向

三. 位运算

在操作硬件时,位运算很常用,这里简单介绍

3.1 按位或

用途: 将指定一位置位,其余位不变

常见用法:

cpp 复制代码
undigned char t = 0xFF
t |= (1<<n);/将t的第n位置1,其余位不变
t |= (1<<2) | (1<<3);/将t的第2与3位置1,其余位不变

3.2 按位与

**用途:**指定位清零

常见用法:

cpp 复制代码
unsigned char t = 0xFF;
t &= ~(1 << n);将第n位清零

3.3 异或

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

用途: 不断的与0xFF异或,就可以实现翻转LED

四. LED发光二极管

4.1 自定义接口

cpp 复制代码
//LED初始化
void led_init()
{
	P2 = 0xFF;
}

//LED全亮
void led_on_all()
{
	P2 = 0;
}

//LED全灭
void led_off_all()
{
	P2 = 0xFF;
}

//LED指定某位亮
void led_on(unsigned int i)
{
	 P2 = ~i;
}

4.2 流水灯

cpp 复制代码
//流水灯
	int i = 0;
	led_init();
	while(1)
	{
		for(i = 0; i <= 6; i++)
		{
			led_on(1 << i);
			delay(500);
			led_off_all();
		}
		for(i = 7; i > 0; i--)
		{ 	
			led_on(1 << i);
			delay(500);
			led_off_all();
		}
	
	} 

五. 数码管

5.1 数码管

51单片机搭载4位共阴极数码管

原理图:

5.2 操作方法

先位选 (NPN三级管)P10-P13

给高电平选中

再段选 ,给对应引脚高电平即可

共阴极,给高电平点亮

动态显示:

人眼的视觉暂留效应

1、选择第一位数码管显示第一个数值,快速刷新

2、选择第二位数码管显示第二个数值,快速刷新

5.3 示例代码

cpp 复制代码
//共阴极段码表
unsigned char seg[]	= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};

//位选
void select_bit(unsigned int n)
{
	P1 &= ~(0x0F << 0);//将低四位清零
	P1 |= (1 << n);
}

//段选
void select_seg(unsigned int n)
{
	P0 = seg[n];
}

//数码管动态显示
void digiter_show(unsigned int n)
{
	int t = 0;
	int m;
	while(n != 0)
	{
		m = n % 10;
		P0 = 0;//消隐
		select_bit(t++);	
	   	select_seg(m);
		delay(1);
		n /= 10;
	}
}
相关推荐
FREEDOM_X2 小时前
Linux 进程间通讯(IPC)——总结
linux·c语言·前端·嵌入式硬件·struts
振南的单片机世界2 小时前
地址总线定门牌号,数据总线搬货量:CPU的“寻址”与“搬运”
arm开发·stm32·单片机·嵌入式硬件
梁朝辉3 小时前
单片机中ADC直接通道和附加通道什么区别?
单片机·嵌入式硬件
阿拉斯攀登4 小时前
I2C 设备驱动开发
linux·驱动开发·嵌入式硬件·嵌入式·linux驱动·i2c·字符设备驱动
2401_8541515517 小时前
ARM Cortex-M 体系结构深度解析——寄存器模型、处理器模式、AAPCS 与异常模型
arm开发·stm32·单片机·嵌入式硬件
KaifuZeng19 小时前
通信与接口协议面试五、RS422
嵌入式硬件·面试·通信与接口
迷茫、Peanut20 小时前
蜂鸣器介绍
单片机
Topplyz20 小时前
如何减小DCDC的纹波?
单片机·嵌入式硬件·硬件工程·电源·layout·dcdc
sramdram1 天前
灵动高性能32位MCU空调解决方案
单片机·嵌入式硬件·mcu·32位mcu