一、硬件概念
1.俩大项:裸机 BSP(不带操作系统)、Linux驱动(带操作系统)
四小项:51单片机(8051内核)、IMX6ULL、系统移植、驱动
2.CPU(中央处理单元) MCU(微控制器单元)soc(特殊的cpu)
3.P0(0x80)、P1(0x90)、P2(0xA0)、P3(0xB0)寄存器(系统提前定义好的全局变量)
在数字电路中,用来存放二进制数据或代码的电路称为寄存器
#define P2 * ((unsigned char *)(0xA0))
sfr P2 = 0xA0; sfr是特殊功能寄存器
二、位运算
1.~ & | ^ << >>
2.reg &= ~((1 << n) | (1 << m)) 指定位清零
reg |= (1 << n) | (1 << m) 指定位置1
reg ^= (1 << n) | (1 << m) 指定位取反
三、RAM和ROM
RAM:随机访问存储器、易失性存储器,(地址总线有8个端口,一共有256个字节)RAM中有128位、数据在RAM 中,保存后就会存到ROM中
ROM:只读存储区、非易失性存储器
hex文件都是一些代码或数据指令
PC:程序计数器,在kernel中
三级流水线:1.取指令 2.译码 3.执行
四、LED
左边为负极,右边为正极,P2引脚这边为低电平时导通,灯亮。
流水灯:
#include <reg52.h> //register寄存器
#include "led.h"
void delay(unsigned int n)
{
while(n--);
}
int main(void)
{
unsigned char i = 1;
int n, k;
init_led();
while(1)
{
// P2 &= ~((1 << 0) | (1 << 3) | (1 << 6));
// P2 |= (1 << 0) | (1 << 3) | (1 << 6);
// P2 ^= 0XB6;
// led_on(0x02);
// delay(0X3FFF);
for(n = 0; n < 7; ++n)
{
led_on(i);
delay(0x8FFF);
i <<= 1;
}
for(k = 0; k < 7; ++k)
{
led_on(i);
i >>= 1;
delay(0x8FFF);
}
}
}
四、数码管(共阴极数码管)
P0控制位选、P1控制段选(LEDS1、LEDS2、LEDS3、LEDS4)
P1引脚处有NPN8050,最下面接地,若想要LEDS1导通,只需要让P10处为高电平就导通,可以把NPN这想象成阀门
动态数码管:
#include<reg52.h>
#include "digiter.h"
void delay(unsigned int n)
{
while(n--);
}
int main(void)
{
// unsigned char segs[] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
int i;
// P1 |= (1 << 0);
// P1 &= ~((1 << 1) | (1 << 2) | (1 << 3));
bit_select(2);
while(1)
{
for(i = 0; i <10; ++i)
{
seg_select(i);
delay(0xFFFF);
}
}
}