嵌入式 - 硬件:51單片機(2)

本節重點:

1.?GPIO輸入模式、輸出模式

2.?按鍵工作原理(GPIO輸入)

3.?中斷概念

4.?中斷源概念、中斷源個數、哪幾個中斷源

5.?外部中斷、定時器中斷概念

6.??中斷處理流程:

7.?51單片機中定時器的個數?類型

8.?16位定時器和8位自動重裝載定時器的區別

9.?PWM的概念、PWM周期、PWM占空比

10、有源蜂鳴器和無源蜂鳴器的區別

11、51單片機蜂鳴器實現原理

一、GPIO

GPIO(General Purpose Input/Output,通用輸入輸出口)是單片機與外部設備通信的最基本接口,相當于單片機的 “手”(輸出控制)和 “眼”(輸入檢測)。

1. GPIO 的兩種工作模式

  • 輸出模式:單片機主動給引腳賦值 “高電平(5V)” 或 “低電平(0V)”,從而控制外部設備。比如給 LED 引腳送高電平,LED 點亮;送低電平,LED 熄滅。
    可以用 “水龍頭” 比喻:輸出模式就像 “控制水龍頭開關”—— 單片機決定水流(電平)的通斷。
  • 輸入模式:單片機被動檢測引腳的電平變化,獲取外部設備的狀態。比如檢測按鍵是否按下、傳感器是否觸發。
    對應 “水龍頭” 的比喻:輸入模式就像 “觀察水龍頭是否有水流出”—— 單片機只負責判斷狀態,不主動控制。

二、按鍵:GPIO 輸入模式的典型應用

按鍵是單片機系統中最常見的 “人機交互部件”,其工作原理本質是通過 GPIO 輸入模式檢測引腳電平。

1. 按鍵的硬件連接(以 K1 為例)

按鍵 K1 的兩個引腳分別接 GND(地)和單片機的 P1_4 引腳:

  • 當 K1 未按下時,P1_4 引腳不受 GND 影響,默認是高電平;
  • 當 K1 按下時,P1_4 引腳與 GND 短路,引腳電平變為低電平。

2. 按鍵狀態的判斷邏輯

要判斷 K1 是否按下,只需檢測 P1_4 引腳是否為低電平。在代碼中可通過 “位運算” 實現:
if((P1 & 0x10) == 0)
(注:0x10 是十六進制,對應二進制0001 0000,與 P1 做 “與運算” 后,只有 P1_4 引腳的電平會保留 —— 結果為 0 時,說明 P1_4 是低電平,即按鍵按下)

3. 實際應用場景

比如車載中控系統中,剎車檢測、安全座椅狀態判斷等,都可以通過類似的 “按鍵邏輯” 實現 —— 用 GPIO 輸入模式實時檢測對應引腳的電平,確保數據的實時性。

練習:

? ? ? ? 實現按下按鍵(1--4),顯示燈(1--4),第一個數碼管顯示數字(1--4),未按下顯示“0”

main.c

digiter.c

LED.C

delay.c

三、中斷:單片機的 “緊急響應機制”

單片機在執行常規任務時,若遇到更緊急的事件(如按鍵觸發、定時器溢出),需要暫停當前任務,優先處理緊急事件,處理完后再回到原任務繼續執行 —— 這個過程就是 “中斷”。

1. 中斷的核心概念

  • 中斷源:觸發中斷的 “事件 / 源頭”。51 單片機有 5 個中斷源,分別是:外部中斷 0(INT0,對應 P3_2 引腳)、外部中斷 1(INT1,對應 P3_3 引腳)、定時器 0 中斷、定時器 1 中斷、串口中斷。


1.中斷源分類:外部中斷0、外部中斷1、定時器0、定時器1、串口
2.外部中斷:單片機上的引腳電平變化所引發的中斷(INTO(P3-2)、INT1(P3-3))

  • 中斷優先級:多個中斷同時觸發時,CPU 會優先處理 “優先級高” 的中斷(51 單片機可通過寄存器配置優先級)。
  • 中斷嵌套:處理低優先級中斷時,若有高優先級中斷觸發,會暫停當前中斷,先處理高優先級中斷 ——51 單片機最多支持 2 層嵌套。

7. 中斷處理流程(6 步)

  1. 中斷源發出 “中斷請求”(如外部中斷 0 引腳電平變化);
  2. CPU 檢查:是否開啟 “總中斷允許”,該中斷源是否被 “屏蔽”(未屏蔽才繼續);

3.比較中斷優先級:若當前無更高優先級中斷,暫停當前任務;

4.保護現場:保存當前任務的寄存器數據(避免處理中斷后數據丟失);

5.執行 “中斷服務函數”(即中斷觸發后要執行的代碼,如按鍵按下后的 LED 翻轉); (回調函數)


6.恢復現場:恢復之前保存的寄存器數據,回到原任務繼續執行。

3. 中斷相關寄存器配置(關鍵!)

要讓中斷生效,必須配置對應的寄存器,以 “外部中斷 0” 為例:

p3.2 要置1 產生下降沿

  • IE 寄存器(中斷允許寄存器)
    • 先將 IE 的 bit7(EA,總中斷允許位)置 1—— 開啟 “總中斷開關”(不開啟的話,所有中斷都無效);
    • 再將 IE 的 bit0(EX0,外部中斷 0 允許位)置 1—— 允許外部中斷 0 觸發。

  • TCON 寄存器(定時器 / 計數器控制寄存器)
  • TCON 的 bit1(IE0,外部中斷 0 請求標志位):中斷觸發時會自動置 1,CPU 響應后會 “硬件清 0”(無需手動處理)。? ??不用置位---- 自動置位

  • 將 TCON 的 bit0(IT0,外部中斷 0 觸發方式位)置 1—— 設置為 “下降沿觸發”(即引腳電平從高變低時觸發中斷);

優先級

中斷向量表


四、定時器:單片機的 “精準時鐘”

很多場景需要 “精準定時”(如 1ms 刷新一次 LED、1s 讀取一次傳感器數據),此時就需要用到單片機的 “定時器”—— 它能根據時鐘信號,產生精確的時間間隔。

1. 定時器的基礎原理

  • 51 單片機定時器資源:內置 2 個 16 位自增型定時器 / 計數器(Timer0、Timer1),可工作在 “定時器模式”(用于定時)或 “計數器模式”(用于計數外部脈沖)。
  • 時鐘與分頻:單片機的時鐘由 “晶振” 提供,常見晶振頻率為 12MHz 或 11.0592MHz。但 51 單片機會對晶振頻率做 “12 分頻”—— 比如 12MHz 晶振,分頻后實際時鐘頻率為12MHz/12 = 1MHz,對應 “1 個時鐘周期 = 1μs”(即單片機執行一條基本指令需要 1μs)。

2. 定時器初值計算(以 1ms 定時為例)

定時器是 “自增型” 的:從 “初值” 開始,每過 1 個時鐘周期加 1,加到 “65535”(16 位定時器的最大值)后會 “溢出”,觸發定時器中斷。
要實現 1ms(1000μs)定時,需計算 “初值”:

  • 1ms 需要的時鐘周期數:1000μs / 1μs = 1000
  • 定時器初值 = 最大值 - 所需周期數 =?65535 - 1000 = 64535(十六進制為 0xFC67)。
    只需將初值寫入定時器的 TH0(高 8 位)和 TL0(低 8 位),即可實現 1ms 定時。

定時器:能夠產生一個精準的定時,不同外設對時序的要求高(高電平和低電平時間是精準的)
51單片機內部有兩個定時器,分別為timer0、timer1,所使用自增型定時器(計數器16位)

Clock,時鐘,CPU運行節拍,頻率(Intel 2.1GHZ)
頻率單位:HZ
時間單位:S
頻率和時間關系:1/2.1GHZs
51單片機:
晶振,晶體振蕩器(12MHZ/11.059MHZ)


51單片機達不到12MHZ,將12MHZ進行12分頻,12MHZ/12=1MHZ
51單片機完成一條指令運算:1/1MHZ=1us

通過定時器0實現1ms定時:
1ms |= 1000us
定時器初值:64535

3. 定時器相關寄存器配置(以 Timer0 為例)


8位自動重裝載定時器:分為TLO和TH0兩部分,1byte,實際參與計數的只有TLO,當TLO中的值加到255溢出后,再將THO中的值重新裝入到TLO中

  • TCON 寄存器

(1)bit4置1,TMOD寄存器中的Gate位清0,代表允許定時器開始計數,

  • TMOD 寄存器(定時器 / 計數器模式控制寄存器)

(1)定時器0->低四位清0
(2)將TMOD寄存器中的M0,bit0置1,代表定時器0工作在16位定時器/計數器模式

?????

  • IE 寄存器

(1)將IE寄存器中的bit7置1,代表CPU能夠響應所有中斷

(2)將IE寄存器中的bit1置1,代表允許定時器0產生中斷

4. 定時器配置流程(5 步)


1.?先配置TMOD模式選擇寄存器,將低四位清0,再將bit0置1代表工作在16位定時器

2.?向TH0和TL0中裝入定時器的初值(1ms?->?64535)

3.??將TCON寄存器中的bit6置1,代表允許定時器開始計數

4.??將IE寄存器中的bit7和bit1置1,開啟中斷總開關和定時器0的子開關

5.?編寫定時器0的中斷服務函數

五、PWM 與蜂鳴器:脈沖控制的應用


脈沖寬度調制,能夠讓引腳產生一個方波,周期性的讓引腳的電平發生翻轉

1. PWM 的核心概念

  • PWM 周期

一個方波所經歷的周期(從上升沿到上升沿所經歷的時間/從下降沿到下降沿所經歷的時間)

  • PWM 占空比

在一個周期內,引腳處于 “高電平” 的時間占比(如占空比 50%,表示一個周期內高、低電平各占一半)。
通過調整周期和占空比,PWM 可實現 “模擬電壓輸出”(如控制 LED 亮度、電機轉速)。

2. 蜂鳴器的工作原理

蜂鳴器的聲音由 “震蕩源” 決定:

  • 音調:由震蕩頻率決定 —— 高頻對應高音,低頻對應低音;
  • 音量:由震蕩信號的振幅決定 —— 振幅越大,音量越大。

根據是否自帶震蕩源,蜂鳴器分為兩類:

  • 有源蜂鳴器:內置震蕩源,通電后會發出固定頻率的聲音(無需額外控制,只需給高低電平即可);
  • 無源蜂鳴器:無內置震蕩源,通電后不發聲,需通過 GPIO 輸出 PWM 方波(提供震蕩信號),才能發出不同音調的聲音。

3. 51 單片機驅動蜂鳴器

對于無源蜂鳴器,需用定時器生成不同頻率的 PWM 信號:

  • 比如要發出 “高音”,就配置定時器產生高頻 PWM(如 4kHz);
  • 要發出 “低音”,則生成低頻 PWM(如 1kHz);
  • 通過調整 PWM 的占空比,還能控制蜂鳴器的音量大小。

六、練習

通過中斷實現低電平觸發時數碼管變化

實現隔1sLED翻轉一次

通過按鍵控制蜂鳴器按照指定頻率工作(Key1?--200HZ??Key2?--?400HZ?Key3?--?600HZ?Key4?--?800HZ??Key5?--?1000HZ)

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

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

相關文章

C語言中奇技淫巧07-使用GCC棧保護選項檢測程序棧溢出

-fstack-protector 是 GCC 和 Clang 編譯器提供的一種棧保護(Stack Smashing Protection, SSP) 機制,用于檢測和防御常見的緩沖區溢出攻擊(特別是棧溢出)。它通過在函數的棧幀中插入特殊的“金絲雀值”(can…

.NET 8.0 Web API JWT 身份驗證和基于角色的授權

在當今的數字環境中,保護 Web 應用程序的安全至關重要。隨著 .NET 8.0 的不斷發展,它提供了強大的工具來確保您的 API 既安全又高效。 示例代碼:https://download.csdn.net/download/hefeng_aspnet/91490262 如果您喜歡此文章&#xff0c…

ZYNQ SDK軟件在線調試

1、然后右鍵項目->debug as->launch on hardware2、從左到右分別是:運行程序到設置的斷點暫停運行終止斷開連接步進(進入函數內部)跳過(不進入函數內部)跳出函數3、雙擊添加斷點,然后點擊運行可以讓程…

四大金剛之計算機操作系統

1. 進程和線程的區別?創建線程的代價比創建進程小嗎?進程是資源分配和調度的基本單位;線程是 CPU 調度的基本單位。進程有獨立的地址空間,線程共享進程地址空間。創建/銷毀進程開銷大,線程開銷小。是的,因為…

redis--redis.conf的相關配置問題

關于redis.conf內的相關重要的配置介紹 1. bind 配置 僅僅設置bind,還需要搭配下面的rotected-mode 配置才能外部ip進行連接 功能:設置 Redis 監聽的 IP 地址,決定哪些設備可以連接到 Redis 服務器。 bind 127.0.0.1:只允許本機&a…

unsloth 筆記:從最近的檢查點繼續微調

檢查點(checkpointing)可以把微調進度保存下來,這樣可以中途暫停,隨后繼續訓練。首先需要在 Trainer 的參數里添加 save_strategy 和 save_steps。trainer SFTTrainer(....args TrainingArguments(....output_dir "output…

DevOps平臺選型指南:破解研發效率瓶頸,適配金融/政務/國產化場景的5大關鍵指標

在數字化轉型的浪潮中,軟件研發效能已成為企業的核心競爭力。然而,許多團隊在追求敏捷與高速交付的過程中,常常會遇到工具鏈割裂、流程冗長、環境混亂等效率瓶頸。選擇一個合適的、一體化的DevOps平臺,是破解這些瓶頸、實現研發運…

【面試向】元宇宙介紹

屬于基礎知識介紹,主要目的是對這一概念有技術層面的理解,有前瞻性的觀點,幫助大家在面試中給出得體的表述。 1. 什么是元宇宙? 元宇宙本質上是一個融合了數字與現實、由技術構建的 “沉浸式虛擬空間”,是一個 “超越…

FreeMarker快速入門指南

FreeMarker快速入門指南 FreeMarker是一個基于模板和數據模型生成文本輸出的Java庫。它廣泛應用于Web開發、代碼生成、郵件模板等場景。本文將帶你快速上手FreeMarker的核心概念和基本用法。 什么是FreeMarker FreeMarker是一個模板引擎,它將模板文件(.f…

Nginx主配置文件

一,Nginx基本介紹1,nginx概念Nginx 是一款輕量級、高性能的服務器軟件,核心能力是 “處理網絡請求”,被廣泛用于網站、App 的后端架構中。Nginx 就像一個 “高效的網絡交通指揮官”,核心價值是用最少的資源&#xff0c…

基于ResNet50的智能垃圾分類系統

基于ResNet50的智能垃圾分類系統:從理論到實踐的完整指南 源碼獲取https://mbd.pub/o/bread/YZWXlZ1yZg 引言:智能垃圾分類的時代背景與意義 隨著城市化進程的加速和人口數量的增長,垃圾處理問題日益成為全球性的環境挑戰。傳統的垃圾分類…

災難性遺忘:神經網絡持續學習的核心挑戰與解決方案

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! 1. 災難性遺忘的定義與核心問題 災難性遺忘(Catastrophic…

OPENPPP2 —— IP標準校驗和算法深度剖析:從原理到SSE2優化實現

🔍 OPENPPP2 —— IP標準校驗和算法深度剖析:從原理到SSE2優化實現 引用: IP校驗和算法:從網絡協議到SIMD深度優化IP校驗和算法:從標量到SIMD的高級優化(SSE4.1) GDB online Debugger C17 Co…

4.4 機器學習 - 集成學習

集成學習通過 “組合多個基礎模型” 提升泛化能力,核心分為并行集成(Bagging)、串行集成(Boosting) 和多層集成(Stacking) 三大范式,分別對應 “降方差”“降偏差”“兼顧偏差與方差…

機器學習 - 使用 ID3 算法從原理到實際舉例理解決策樹

一、什么是決策樹1.基本概念決策樹是一種樹形結構,由結點(node) 和有向邊(directed edge) 組成。其中結點分為兩類:內部結點(internal node):表示一個屬性(特…

【期末復習】嵌入式——S5PV210開發板

本文為嵌入式課程期末復習,僅供參考,所用課本:嵌入式Linux操作系統(李建祥著)。第一章1.1 簡述嵌入式微處理器數據存儲格式的大,小端模式。大端模式是指數據的高字節保存在內存的低地址中,而數據…

word文檔結尾批量插入圖片 docx批量插入圖片 指定幾張

如果你有一些word文檔。比如工作總結。你想每一個文檔里面都插入幾張圖片。插入到每個文檔的結尾,那么你可以使用這個工具。首先準備好你的文檔。然后把它們拖進右邊的方框中。拖動的時候,拖動第一個,然后準備好你的圖片。把你的圖片全部拖動…

CodeBuddy國際版又更新了體驗感1

CodeBuddy國際版又更新了 更好的使用體驗更少的資源消耗合理的消耗剩余資源使用起來也是很不錯的,這次更新自動模式想不到的少,可以用于其他的例如翻譯與寫測試用例或者其他的說明文檔等或者是閱讀一下項目更好了解項目總的上來說 使用體驗響應速度還是不…

基于開源AI智能名片鏈動2+1模式S2B2C商城小程序的公益課引流策略研究

摘要:本文聚焦公益課引流場景,探討開源AI智能名片、鏈動21模式與S2B2C商城小程序的融合應用。通過構建低成本用戶裂變體系,分析該技術組合在精準篩選、社群運營、激勵機制設計中的協同效應。研究提出"智能名片畫像-鏈動裂變激勵-S2B2C生…

季度最強策略:年化247%,回撤10%,夏普比率3.79。附大小盤輪動策略python源代碼。

原創內容第993篇,專注AGI,AI量化投資、個人成長與財富自由。 季度最強策略: 年化247%,回撤10%,夏普比率3.79。3積分可查看參數。 大小盤輪動的策略源代碼: 年化收益18.8%。 from engine import Task, Eng…