關于嵌入式學習——單片機1

基礎整體概念

以應用為中心:消費電子(手機、藍牙耳機、智能音響)、醫療電子(心率脈搏、呼吸機)、無人機(大疆D)、機器人(人形四足機器人)
計算機技術:

  • 計算機五大組成:

????????運算器(數據運算)、控制器(指令控制)、存儲器(內存外存)、輸入設備(鼠標、鍵盤、攝像頭)、輸出設備(顯示器)

  • 軟件:

????????編程語言(C/C++)、操作系統(Linux文件、多任務、網絡)、數據結構、數據庫

  • 硬件
    • 51單片機:硬件概念(定時器、PWM、中斷)、原理圖、寄存器、外設操作(LED、按鍵、數碼管、蜂鳴器、傳感器)
    • STM32單片機:庫開發(標準庫、HAL庫)
    • ARM:英國公司 設計處理器芯片方案,SAMSUNG、ATMEL、NXP->ARM芯片方案>開發板(ARM)
    • ARM7、ARM9、ARMI1
    • CortexA:應用高端領域,處理復雜任務,用來跑作系統(Lnux 文件系統 多任務調度 網絡)
    • CortexR:應用實時控制領域,實時性要求高(汽車電子)
    • CortexM:應用微控制器領域,MCU單片機(IOT物聯網智能家居 控制領域)
  • 特點:軟硬件可裁剪——加入需要的硬件/軟件功能,將不需要的硬件/軟件裁剪掉(低功耗、低成本)
  • 計算機:通用型計算機:PC、平板、手機/專用型計算機:無人機,完成某項特定功能而設計計算機

一、嵌入式:
以應用為中心,以計算機技術為基礎,軟硬件可裁勢的專用計算機系統
二、51單片機:

  • 1980年,由Intel公司MCS-51系列:8051型號單片機(工業控制領域),由MCU轉型到CPU
  • 其他公司:Atmel(AT89C51)、Philip(P89V51系列單片機,增強型單片機ISP在線編程)、STC宏晶半導體(STC89C51 STC89C52 STC89C52RC)

三、相關概念:
CPU:Central Processing Unit(中央處理器)數據運算、指令處理,CPU性能越高,完成指令處理和數據運算的速度越快

MCU: Micro Ctroller Unit(微控制器),集成度比較高,將所有功能集成到芯片中(CPU、RAM、ROM、定時器、UART、10),簡單控制,成本低

MPU:Micro Procesing Unit(微處理器),集成度低,只有一塊單獨的CPU,需外接外設、存儲模塊,復雜應用領域,跑Linux操作系統,成本高

GPU:Graphics Processing Unit(圖形處理器),圖形處理、圖形渲染(GPU性能越好,圖形顯示的質量越好)
NPU:Neural Processing Unit(神經網絡處理器),A|推理、硬件加速,神經網絡處理(卷積運算)->華為Mate60 達芬奇NPU AI自動優化照片

FPU:Floating Point Unit(浮點數運算單元),完成浮點數的運算和處理(完全遵循IEEE 754),大部分集成在CPU內部

SOC:System On Chip(片上系統),集成度比較高,將多個芯片集成到一塊芯片上(存儲芯片、外設芯片)

四、RAM和ROM:
外存:主要存放程序、代碼、指令,掉電數據不丟失,讀寫速度慢,價格便宜(移動硬盤 1T 300)

內存:主要存放程序運行過程中的臨時變量、掉電數據丟失,讀寫速度快,價格昂貴(內存條16G 300)
ROM:Read-Only Memory,只讀存儲器,存放單片機程序,指令,掉電數據不丟失

RAM:Random Access Memory,隨機訪問存儲器,存放臨時變量、臨時數據,掉電數據丟失

五、單片機芯片內部結構:

ex:具體實現

CPU、RAM、ROM、Timer、PWM、I0、中斷

三大總線:

  • 地址總線:用來尋找RAM中的地址,所能尋址的最大范圍2^8,256byte,單向
  • 數據總線:通過地址總線去獲取數據,數據交互雙向
  • 控制總線:時序控制、IO控制

六 位運算:
1、|:將二進制中的對應位的bit進行比較,如果有一個bit為1,結果為1;如果都為0,結果為0;

????????應用場景:指定位置1

unsigned char t = 0x60;

(數據高位 MSB bit7)? 0110 0000 (bit0 LSB 數據低位)

第0位置1:t=t|(1 << 0);

第3位置1:t=t|(1 << 3);

第0位和第3位置1:t=t|(1 << 0)| (1 << 3);

2、 &:將二進制中的對應位的bit進行比較,如果全為1,結果為1:如果有一個0,結果為0;
??應用場景:指定位清0

unsigned char t = 0xFF:
將bit 0 和 bit7 清0:
t &= ~(1 << 0);

t &= ~(1 << 7);

exe:

?? ??? ?練習:
定義兩個變量:
unsigned char a = 0x62;
unsigned char b = 0xFF;

?? ??? ??? ??? ?(1)將a轉換成二進制,將bit0和bit7置1
// 二進制:0110 0010
// t |= (1 << 0) | (1 << 7);

?? ??? ??? ??? ?(2)將b轉換成二進制,將高4位清0
// 二進制:1111 1111 ? ? ? ? ??
? ? // t &= ~(0x0F << 4); ? ? ? ??
// t &= ~(0xF0 << 0); ?
? ? ?

3、^: ?將對應位的bit進行比較,相同為0,相異為1

七、單片機程序創建、編寫、編譯、下載流程:

?? ??? ?(1)安裝Keil4軟件

?? ??? ?(2)點擊"Project" ?-> "New Project" ?-> 選擇路徑 (為工程起一個名字)?? ??? ??? ?

?? ??? ?(3)選擇單片機芯片型號:Atmel->AT89C51,點擊"否",不拷貝啟動代碼

?? ??? ?(4)向Group中添加C語言文件: ?點擊左上方text按鈕,ctrl + S將文件保存到工程對應的目錄(為文件起一個名字,如 main.c),雙擊左側Grpup,點擊Add 將文件加入到對應的Group下

?? ??? ?(5)編寫單片機程序:

?? ??? ??? ??? ?(1) #include <reg51.h>, 加入51單片機頭文件

?? ??? ??? ??? ?(2)需要加入while(1)避免程序跑飛


(6)編譯單片機程序:

(1)點擊"Target Options"按鈕,點擊"Output"選項中的"Create HEX FILE"選項,生成hex文件

?? ??? ??? ??? ?(2)點擊左上方"Build"編譯單片機工程

?? ??? ??? ??? ?(3)會在對應目錄下生成xxx.hex十六進制文件


(7)下載單片機程序:

?? ??? ??? ??? ?(1)打開ISP軟件,連接串口線

?? ??? ??? ??? ?(2)選擇單片機芯片型號:STC89C52/C51/C52RC

?? ??? ??? ??? ?(3)根據串口識別的端口號,選擇對應的端口 ?COM3(設備管理器->端口查看)

?? ??? ??? ??? ?(4)選擇"打開程序文件" -> 對應目錄下的hex文件

?? ??? ??? ??? ?(5)點擊"下載/編程"按鈕,將單片機復位后程序即可下載到單片機ROM中

八、原理圖:
????????MCU單片機

1芯片模塊:

  • STC89C52RC、DIP40 封裝:雙列直插式,40個引腳,劃分成4組(端口 寄存器 unsigned char P2;)
  • 網絡編號:在實際電路中的一個編號,避免物理連線,相同網絡的編號的引腳在實際電路中是彼此互通

2LED模塊:

  • 電阻:數字標注法:前兩位/3位為有效數字,最后一位是10的冪次方
  • 發光二極管:具有單向導通性,分為共陽極和共陰極二極管:將所有發光二極管的陽極接到電源正極(VCC),陰極接到單片機的引腳。此時發光二級管陽極會輸出高電平(VCC 5V),如果發光二級陰極輸出一個低電平(0V),陽極和陰極之間會形成一個正向的電壓差,滿足發光二極管的單向導通性,所以電流就會從陽極流向陰極,發光二極管就被點亮。

void LED_INIT(void)
{P2 = 0xFF;return;
}
//全亮
void LED_OFF(void)
{P2 = 0x00;return;
}
//全滅
void LED_ON(void)
{P2 = 0xFF;return;
}//異或  初始化為全1  與全1 按位異或  得到全0 就亮 得到全1就滅
void LED_NOR(void)
{P2^=0xFF;return;
}//流水燈  因為是低電平點亮 所以要取反
void LED_Show(unsigned int n)
{P2 = ~n;return;
}
#include <reg51.h>
#include <delay.h>
#include <led.h>
int main(void)
{int i = 0;LED_INIT();//初始化while(1){
//第一種方式
//		LED_ON();
//		delay(0xAFFF);
//		LED_OFF();
//		delay(0xAFFF);
//第二種方式
//		LED_NOR();
//		delay(0xAFFF);//流水燈for(i = 0; i < 8; i++){LED_Show(1 << i);delay(0xAFFF);LED_OFF();}for(i = 7; i >= 0; i--){LED_Show(1 << i);delay(0xAFFF);LED_OFF();}}return 0;
}

3、數碼管:
?數碼管:51單片機搭載一個4位共陰極數碼管,每一位數碼管可以顯示一些獨立數值,數碼管同一時刻只能顯示一位

  • 位選:選中某一位數碼管(將P1寄存器對應bit位置1)
  • 段選:P0寄存器(abcdrfg)

//  先位選P1 &= ~(0x0F << 0);//初始化 低四位全部置0;P1 |= 1 << 0;//(P10置1)//	再段選P0 = 0x06;//(bc段置1 表示1 000000110)
  • 靜態顯示
//靜態顯示一個數碼管//位選Select_bit(0); while(1){for (i = 0; i < 10; i++){Select_seg(i);delay(0xAFFF);P0 = 0;}}	return 0;
}#include <reg51.h>//段碼表
unsigned int seg[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//數組里數字代表從0 到9//片選
void Select_bit(unsigned int n)
{P1 &= ~(0x0F << 0);//初始化 低四位清零P1 |= (1 << n);	   //片選 0 1 2 3 哪位NPNreturn;
}
//段選
void Select_seg(unsigned int n)
{P0 = seg[n];//根據段碼表里這個數字指定顯示abcdefgreturn;
}
  • 動態顯示
//動態展示四位數碼管while(1){for(i = 0; i <= 9999; i++){digiter_show(i);delay(0xAFFF);}}return 0;
}//動態顯示4位數碼管
void digiter_show(unsigned int n)
{int i = 0;int j = 0;while(n != 0){  	i = n % 10;Select_bit(j);//位選j++;P0 = 0;		//選中NPN先清除Select_seg(i);// 段選delay(100);//延遲很小的一段時間 讓肉眼以為四位數碼管同時出現n = n / 10;}return;
}

重點:

  • 1.MCU、CPU、GPU、NPU、SOC、MPU、FPU
  • 2.內存、外存的區別
  • 3.RAM和ROM的區別,單片機RAM大小
  • 4. 三大總線及其特點
  • 5.LED發光二極管分類及其特點
  • 6.數碼管顯示原理流程?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95856.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LightDock.server liunx 雙跑比較

LightDock: a new multi-scale approach to protein–protein docking The LightDock server is free and open to all users and there is no login requirement server 1示例 故去除約束 next step 結果有正有負合理 2.常見警告? Structure contains HETATM entries. P…

SQL面試題及詳細答案150道(61-80) --- 多表連接查詢篇

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。 前后端面試題-專欄總目錄 文章目錄 一、本文面試題目錄 61. 什么是內連接(INNE…

【實操】Noej4圖數據庫安裝和mysql表銜接實操

目錄 一、圖數據庫介紹 二、安裝Neo4j 2.1 安裝java環境 2.2 安裝 Neo4j&#xff08;社區版&#xff09; 2.3 修改配置 2.4 驗證測試 2.5 卸載 2.6 基本用法 2.7 windows連接服務器可視化 三、neo4j和mysql對比 3.1 場景對比 3.2 Mysql和neo4j的映射對比 3.3 mys…

【mysql】SQL查詢全解析:從基礎分組到高級自連接技巧

SQL查詢全解析&#xff1a;從基礎分組到高級自連接技巧詳解玩家首次登錄查詢的多種實現方式與優化技巧在數據庫查詢中&#xff0c;同一個需求往往有多種實現方式。本文將通過"查詢每個玩家第一次登錄的日期"這一常見需求&#xff0c;深入解析SQL查詢的多種實現方法&a…

MySQL常見報錯分析及解決方案總結(9)---出現interactive_timeout/wait_timeout

關于超時報錯&#xff0c;一共有五種超時參數&#xff0c;詳見&#xff1a;MySQL常見報錯分析及解決方案總結(7)---超時參數connect_timeout、interactive_timeout/wait_timeout、lock_wait_timeout、net等-CSDN博客 以下是當前報錯的排查方法和解決方案&#xff1a; MySQL 中…

第13章 Jenkins性能優化

13.1 性能優化概述 性能問題識別 常見性能瓶頸&#xff1a; Jenkins性能問題分類&#xff1a;1. 系統資源瓶頸- CPU使用率過高- 內存不足或泄漏- 磁盤I/O瓶頸- 網絡帶寬限制2. 應用層面問題- JVM配置不當- 垃圾回收頻繁- 線程池配置問題- 數據庫連接池不足3. 架構設計問題- 單點…

Python+DRVT 從外部調用 Revit:批量創建梁

今天讓我們繼續&#xff0c;看看如何批量創建常用的基礎元素&#xff1a;梁。 跳過軸線為直線段形的&#xff0c;先從圓弧形的開始&#xff1a; from typing import List, Tuple import math # drvt_pybind 支持多會話、多文檔&#xff0c;先從簡單的單會話、單文檔開始 # My…

水上樂園票務管理系統設計與開發(代碼+數據庫+LW)

摘 要 隨著旅游業的蓬勃發展&#xff0c;水上樂園作為夏日娛樂的重要組成部分&#xff0c;其票務管理效率和服務質量直接影響游客體驗。然而&#xff0c;傳統的票務管理模式往往面臨信息更新不及時、服務響應慢等問題。因此&#xff0c;本研究旨在通過設計并實現一個基于Spri…

【前端教程】JavaScript DOM 操作實戰案例詳解

案例1&#xff1a;操作div子節點并修改樣式與內容 功能說明 獲取div下的所有子節點&#xff0c;設置它們的背景顏色為紅色&#xff1b;如果是p標簽&#xff0c;將其內容設置為"我愛中國"。 實現代碼 <!DOCTYPE html> <html> <head><meta ch…

qiankun+vite+react配置微前端

微前端框架&#xff1a;qiankun。 主應用&#xff1a;react19vite7&#xff0c;子應用1&#xff1a;react19vite7&#xff0c;子應用2 &#xff1a;react19vite7 一、主應用 1. 安裝依賴 pnpm i qiankun 2. 注冊子應用 (1) 在src目錄下創建個文件夾&#xff0c;用來存儲關于微…

git: 取消文件跟蹤

場景&#xff1a;第一次初始化倉庫的時候沒有忽略.env或者node_modules&#xff0c;導致后面將.env加入.gitignore也不生效。 取消文件跟蹤&#xff1a;如果是因為 node_modules 已被跟蹤導致忽略無效&#xff0c; 可以使用命令git rm -r --cached node_modules來刪除緩存&…

開講啦|MBSE公開課:第五集 MBSE中期設想(下)

第五集 在本集課程中&#xff0c;劉玉生教授以MBSE建模工具選型及二次定制開發為核心切入點&#xff0c;系統闡釋了"為何需要定制開發"與"如何實施定制開發"的實踐邏輯&#xff0c;并提煉出MBSE中期實施的四大核心要素&#xff1a;高效高質建摸、跨域協同…

CSDN個人博客文章全面優化過程

兩天前達到博客專家申請條件&#xff0c;興高采烈去申請博客專家&#xff1a; 結果今天一看&#xff0c;申請被打回了&#xff1a; 我根據“是Yu欸”大神的博客&#xff1a; 【2024-完整版】python爬蟲 批量查詢自己所有CSDN文章的質量分&#xff1a;附整個實現流程_抓取csdn的…

Websocket的Key多少個字節

在WebSocket協議中&#xff0c;握手過程中的Sec-WebSocket-Key是一個由客戶端生成的隨機字符串&#xff0c;用于安全地建立WebSocket連接。這個Sec-WebSocket-Key是基于Base64編碼的&#xff0c;并且通常由客戶端在WebSocket握手請求的頭部字段中發送。根據WebSocket協議規范&a…

SVT-AV1編碼器中實現WPP依賴管理核心調度

一 assign_enc_dec_segments 函數。這個函數是 SVT-AV1 編碼器中實現波前并行處理&#xff08;WPP&#xff09; 和分段依賴管理的核心調度器之一。//函數功能&#xff1a;分配編碼解碼段任務//返回值Bool//True 成功分配了一個段給當前線程&#xff0c;調用者應該處理這個段//F…

直接讓前端請求代理到自己的本地服務器,告別CV報文到自己的API工具,解放雙手

直接使用前端直接調用本地服務器&#xff0c;在自己的瀏覽器搜索插件proxyVerse&#xff0c;類似的插件應該還有一些&#xff0c;可以選擇自己喜歡的這類插件可以將瀏覽器請求&#xff0c;直接轉發到本地服務器&#xff0c;這樣在本地調試的時候&#xff0c;不需要前端項目&…

Golang Goroutine 與 Channel:構建高效并發程序的基石

在當今這個多核處理器日益普及的時代&#xff0c;利用并發來提升程序的性能和響應能力已經成為軟件開發的必然趨勢。而Go語言&#xff0c;作為一門為并發而生的語言&#xff0c;其設計哲學中將“并發”置于核心地位。其中&#xff0c;Goroutines 和 Channels 是Go實現并發編程的…

17 C 語言宏進階必看:從宏替換避坑到宏函數用法,不定參數模擬實現一次搞定

預處理詳解1. 預定義符號//C語?設置了?些預定義符號&#xff0c;可以直接使?&#xff0c;預定義符號也是在預處理期間處理的。 __FILE__ //進?編譯的源?件--預處理階段被替換成指向文件名字符串的指針--char* 類型的變量 __LINE__ //?件當前的?號 --預處理階段替換成使用…

深入剖析 HarmonyOS ArkUI 聲明式開發:狀態管理藝術與最佳實踐

好的&#xff0c;請看這篇關于 HarmonyOS ArkUI 聲明式開發范式與狀態管理的技術文章。 深入剖析 HarmonyOS ArkUI 聲明式開發&#xff1a;狀態管理藝術與最佳實踐 引言 隨著 HarmonyOS 4、5 的廣泛應用以及面向未來的 HarmonyOS NEXT&#xff08;API 12&#xff09;的發布&…

Qwen-Code安裝教程

一、概述Qwen Code 是一個強大的基于命令行、面向開發者的 AI 工作流工具&#xff0c;改編自 Gemini CLI&#xff0c;專門針對 Qwen3-Coder 模型進行了優化。它專門為代碼理解、代碼重構、自動化工作流、Git 操作等場景設計&#xff0c;讓你的開發工作變得更高效、更智能。它既…