一、嵌入式:以應用為中心,計算機為基礎,軟硬件可剪裁的專用計算機系統
二、MCU:Micro Controcler Unit 微控制單元->單片機
? ? ? ? 1、特點:集成化高,集成到一塊芯片
? ? ? ? ? ? ? ? ? ? ? ? 外設(GPIO、UART、ADC)
? ? ? ? ? ? ? ? ? ? ? ? 性能弱,成本低
? ? ? ? ? ? ? ? ? ? ? ? 控制領域,電機控制
注:1、外存:存放程序,代碼,掉電數據不丟失,讀寫數據慢,價格便宜
? ? ? ? 2、內存:臨時數據,變量,掉電數據丟失,讀寫數據快
內核
棧區 堆區 數據區 文本區
三、CPU:Central Processing Unit 中央處理器
? ? ? ? ? ? ? ? 指令處理,數據運算
四、MPU:Micro Processing Unit 微處理器
? ? ? ? ? ? ? ? 單個cpu+外接內存+外接外設
五、SOC:System On Chip 片上系統
六、NPU:神經網絡處理器
七、FPU:浮點數處理單元
八、ROM:只讀存儲器,存放單片機的程序、指令、掉電數據不丟失
九、RAM:隨機訪問存儲器,存放隨機變量
注:
? ? ? ? 1、
????????int a;
? ? ? ? int b;
? ? ? ? int c;
? ? ? ? c = a+b;
? ? ? ? 1)、cpu去ram取a和b的值;
? ? ? ? 2)、cpu去RAM取指令;
? ? ? ? 3)、cpu進行數據運算;
? ? ? ? 4)、再將運算后的數據寫到RAM中;
? ? ? ? 2、單片機應用場景:分布式傳感采集:控制(電機控制)
? ? ? ? 3、
十、位運算
? ? ? ? 1、其他位不變,指定位清零:t = t & ~(1<<n)
? ? ? ? 2、其他位不變,指定位置一:t = t |(1<<n)
十一、keil程序編寫流程
? ? ? ? 1、點擊project選項,創建一個工程
? ? ? ? 2、點擊new project 創建文件
? ? ? ? 3、在對應目錄下創建一個文件
? ? ? ? 4、創建文件名
? ? ? ? 5、選擇cpu芯片型號,Atmel -> At89c51
? ? ? ? 6、點擊否
? ? ? ? 7、向Group中添加.c/.h文件
? ? ? ? 8、編寫程序
? ? ? ? 9、點擊上方Build編譯程序
十二、程序
? ? ? ? 1、流水燈
? ? ? ? (1)main.c
#include"delay.h"
#include"led.h"
int main()
{
int i= 0;
led_init();
while(1)
{
for(i =0;i < 8;++i)
{
led_show(1<<i);
delay(0x3fff);
led_alloff();
}?? ?
for(i = 7;i >=0;--i)
{
led_show(1<<i);
delay(0x3fff);
led_alloff();
}
}
return 0;}
? ? ? ? (2)led.c
#include<reg51.h>
void led_init(void)
{
P2 = 0xff;
}void led_allon(void)
{
P2 = 0;
}void led_alloff(void)
{
P2 = 0xff;
}void led_show(unsigned int n )
{
P2 = ~(n);
}
? ? ? ? (4)delay.c
void delay(unsigned int time)
{
while(time--)
{
}
}
2、計數
(1)main.c
#include "digiter.h"
#include "delay.h"
#include <reg51.h>int main()
{
int i =0;
while(1)
{
digiter_show(i);
i++;
delay(0xafff);
if(i == 9999)
{
i = 0;
}
}}
? ? ? ? (2)digiter.c
#include<reg51.h>
#include "delay.h"
unsigned char seg[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void select_bit(unsigned int n)
{
P1 = 0xf0;
P1 |= 1<<n;
}void select_seg(unsigned int n)
{
P0 = seg[n];?
}void digiter_show(unsigned int n)
{
int m =0;
int i = 0;
while(n != 0)
{
m = n%10;
P0 = 0;
select_bit(i++)
select_seg(m);
delay(0x3fff);
n /=10;
}
}
(3)delay.c
void delay(unsigned int time)
{
while(time--);
}