一、框架
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被选中