嵌入式开发学习日志(硬件学习——51单片机Day1)

一、框架

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内核

        学会查看原理图、查看手册

      P0、P1、P2、P3寄存器        unsigned char P2;

                                                     bit7                 bit0

                                                       1  0 0 0  0 1 0 1 

交叉编译: 在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序;

(二)LED模块

电量LED灯代码:

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

(三)位运算

~按位取反(将0变1,1变0)
&按位与(指定位清零)(任何一个为0,其结果必然为0;两个都为1,其结果1)
|按位或(指定位置一)(任何一个为1,其结果必然为1;两个都为0,其结果为0)
^按位异或(指定位翻转)其他位不变;(相同为0,不同为1;)
<<左移

a<<n  (表示将a这个数据左移n位 )(C语言中为逻辑左移);最高位无论是1还是0全丢掉,后面补0;

>>右移有符号右移为算数右移如果原数是正数,左边添加0;如果原数是负数,左边添加1
无符号右移为逻辑右移

指定位清零

公式:

        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、定义

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

2、本质

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

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

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

sfr P2 = 0xA0;

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

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

3、kernel中的寄存器pc

PC————程序计数器;

 GPIO:

General Purpose Input Output(通用输入输出),是一种通用的数字输入/输出端口。在嵌入式系统中,GPIO 被设计为灵活的引脚,可以被配置为输入或输出,以满足不同的应用需求。

RAM(易失性存储器)

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

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

ROM(非易失性存储器)

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

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

特点对比:

‌非易失性存储器‌:

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

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

(六)数码管

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

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

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

当数码管显示数字表是确定时,其前加入code则将放于ROM中 :

表达式1:code关键字

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

表达2:加入static,表示只可在当前.c文件下使用

数码管显示0~9:
代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值