簡介[編輯 | 編輯原始碼]
ECE電機系同學的課程。來自韋sir的好課,為數不多的數電系列課程。
學習攻略[編輯 | 編輯原始碼]
單片機
Keil的軟件仿真和硬件仿真。https://blog.csdn.net/qlexcel/article/details/54949093
單片機延時方法,Keil軟件延時。
資料[編輯 | 編輯原始碼]
🖥️單片機 - Midterm前 - 總結By學長[編輯 | 編輯原始碼]
學習需要什麼知識[編輯 | 編輯原始碼]
進制轉換
and or not邏輯關係
C語言基礎
What is 單片機[編輯 | 編輯原始碼]
單板機:將CPU、存儲器、I/O接口芯片,和簡單的I/O設備(小鍵盤、LED)等裝配在一塊印刷電路板上
配上監控程序(固化在ROM中)
在一片集成電路芯片上集成:微處理器、存儲器、I/O接口電路
能用來做什麼?[編輯 | 編輯原始碼]
控制或簡單計算
根據實際情況選擇不同性能的單片機
學習方法[編輯 | 編輯原始碼]
缺什麼補什麼
預備知識[編輯 | 編輯原始碼]
“電平”特性[編輯 | 編輯原始碼]
數字信號:高電平+5V,低電平0V
計算機串口電平:高-12V,低+12V
所以計算機和單片機通信時需要加電平轉換芯片
電平特性決定了數據二進制的使用
邏輯運算[編輯 | 編輯原始碼]
and or not
xor 相異為1
位操作運算
C語言:按位與and:&a &= b; //a=a&b;按位或or: |a |= b; //a=a|b;
80C51系列介紹[編輯 | 編輯原始碼]
MCS-51系列的典型品種[編輯 | 編輯原始碼]
- 其他廠商以8051為基核開發出的CMOS工藝單片機產品統稱“80C51系列”
- CMOS工藝單片機:
- 常用80C51系列單片機主要產品有
- Intel:80C31、80C51...
- ATMEL:89C51、89C51...
- Philips(飛利浦)、華邦、Dallas、STC
- Siemens(Infineon)等
型號介紹[編輯 | 編輯原始碼]
STC89C52RC40C-PDIP0721CV4336[編輯 | 編輯原始碼]
- STC公司生產
- 89系列
- C: CMOS
- 52:5是核心版本。5後的數字位x4為該單片機內部存儲空間大小(ROM,單位KBytes),2即8K,4則16K,16則64K。如果寫的程序過大,則需要更換擁有更大內部存儲空間的單片機。
- 40:所支持晶振頻率最大40MHz,工作的速度
- C:商業級。I是工業級。另外還有軍事級。區別在溫度承受範圍,工業級更nb更貴
- PDIP:封裝格式,PDIP是封裝型號:雙列直插式
- 0721CV4336:07年第21周生產,CV4336是具體型號
80C51系列的引腳封裝[編輯 | 編輯原始碼]
Pa.b,第a組Port口的第b個口[編輯 | 編輯原始碼]
總線型80C51 & 89C51[編輯 | 編輯原始碼]
- 4組P口
- P0、P1、P2、P3
- 每一組都是8位
非總線型89C2051[編輯 | 編輯原始碼]
P3第二功能各引腳功能定義[編輯 | 編輯原始碼]
- 0:RXD(receive)串行口輸入
- 1:TXD(transmissive)串行口輸出
- 2:INT0 外部中斷0輸入
- 3:INT1 外部中斷1輸入
- 4:T0 定時器0外部輸入
- 5:T1 定時器1外部輸入
- 6:WR 外部寫控制
- 7:RD 外部讀控制
8051內部結構[編輯 | 編輯原始碼]
總覽[編輯 | 編輯原始碼]
- 時鐘Clock
- 程序存儲器
- 數據存儲器
- 定時計數器
- 並行I/O口
- 串行通信口
- 中斷系統
三條總線與各結構相連總線:計算機各部件傳輸信息的公共通道內部總線:CPU內部之間的連接外部總線:CPU與其他部件之間的連線
- 數據總線 Data Bus
- 地址總線 Address Bus
- 控制總線 CBControl Bus
組成及功能[編輯 | 編輯原始碼]
- CPU
- 運算邏輯
- 控制邏輯
- 中斷系統
- 部分外部特殊功能寄存器
- RAM
- 存放可以讀寫的數據,e.g.運算的中間結果、最終結果、慾顯示數據
- ROM
- 存放程序、原始數據和表格
- I/O口
- 四個8 bits 並行I/O口,可用作輸入和輸出
C51[編輯 | 編輯原始碼]
針對8051的C語言[編輯 | 編輯原始碼]
特性[編輯 | 編輯原始碼]
- 對單片機指令系統不要求了解,但要對8051存貯器結構有初步了解
- 寄存器分配、不同存貯器的尋址及數據類型等細節可由編譯器管理
- 程序由規範結構,分成不同函數,結構化程序
- 提供包含許多標準子程序的庫,較強數據處理能力
- 比彙編語言(ASM-51,後綴.ASM或.A51)容易移植很多
C-51的數據類型壙充說明[編輯 | 編輯原始碼]
- sfr:special function register 特殊功能寄存器聲明
- sfr16:sfr的16位數據聲明
- sbit:special bit 特殊功能位聲明
- bit:位變量聲明
- 例如:sfr SCON = 0x98; //零0x——16進制數,聲明SCON的寄存器地址為0x98sfr16 T2 = 0xCC;sbit OV = PSW^2; //聲明OV控制PSW寄存器的第2位
頭文件[編輯 | 編輯原始碼]
- reg51.h
- reg52.h
- 官方定義該系列特殊功能寄存器和位寄存器指向地址
- math.h
- 常用數學運算
- intrins.h
- 移位、空指令函數功能等
- ctype.h
- stdio.h
- stdlib.h
- absace.h
運算符[編輯 | 編輯原始碼]
- 基本相同
- ==、!=
- 測試等於、測試不等於
- >>
- 位右移,空位補0
- <<
- 位左移
- &
- 按位與 and
- |
- 按位或 or
- ~
- 按位取反
- `
- 按位異或 xor
中斷服務程序[編輯 | 編輯原始碼]
Function_name() interrupt n using m{}
I/O口定義[編輯 | 編輯原始碼]
sbit beep = P2^3;
寄存器[編輯 | 編輯原始碼]
特殊寄存器指向的Address和一般8個special bit貌似沒有直接聯繫。(待論證)
數據Data Register[編輯 | 編輯原始碼]
- TLx 低位8AH,8BH
- THx 高位8CH, 8DH
- TL、TH各有8bit,一共16bit
- THx 高位8CH, 8DH
- 計數時,由TL開始+1計數,滿後TH進位,直到TH溢出,置換TF標誌,申請中斷,CPU進行中斷處理
程序狀態字PSW,Program State Words[編輯 | 編輯原始碼]
- 用於了解CPU當前工作狀態
- CY進位標誌
- 運算時,有进/借位,CY=1;无进/借位,CY=0
- AC:辅助进、借位(高半字节与低半字节间的进、借位)
- F0:用户标志位
- 由用户决定什么时候用,什么时候不用
- RS1、RS0:工作寄存器组选择位
- RS1 RS0
- 0 00区(00~07H)
- 0 11区(08~0Fh)
- 1 02区(10~17h)
- 1 13区(18~1Fh)
- 修改RS1、RS0可以任选一个工作寄存器区
- OV溢出标志位
- 有溢出,OV=1;无溢出,OV=0
- P:奇偶校验位
- 表示ALU运算结果中二进制数位“1”的个数的奇偶性。
- 若为奇数,则P=1,否则为0。运算结果有奇数个1,P=1;运算结果有偶数个1,P=0。
- CY進位標誌
DPTR(DPH、DPL)--------数据指针[編輯 | 編輯原始碼]
- 访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用。
- 分成DPL(低8位)和DPH(高8位)两个寄存器。
- 用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范围内的数据操作。
P0、P1、P2、P3--------输入输出口(I/O)寄存器[編輯 | 編輯原始碼]
个并行输入/输出口(I/O)的寄存器。它里面的内容对应着管脚的输出
IE:中断允許寄存器Interrupt[編輯 | 編輯原始碼]
- EA
- 0:禁止所有中斷,不產生中斷
- 1:各中斷由個別允許bit決定
- IE.6
- 保留
- ES
- 串行口中断充许(ES=1充许,ES=0禁止)
- ETx
- 定时器x中断允许
- 定时2溢出中断允許(8052用)
- EXx
- 外部中断INT0的中断允许
IP:中断优先级控制寄存器Interrupt Priority[編輯 | 編輯原始碼]
- 第6、7位保留
- PS
- 串行口中斷優先
- PTx
- 定時x中斷優先
- PT2:定時2中斷優先(8052用)
- PXx
- 外部中斷INTx中斷優先
TMOD:定時器模式設定寄存器Timer Mode[編輯 | 編輯原始碼]
- 第7~0位:GATE C/T M1 M0 GATE C/T M1 M0
- 7~4:控制Timer1, 3~0:控制Timer0
- GATE
- 0:以TRx (x=0,1) 来启动定时器/计数器运行。
- 1: 用外中断引脚 (INT0*或INT1*) 上的高电平和TRX来启动定时器/计数器运行。
- C/T
- 0:定時器模式
- 1:計數器模式
- M1 M0
- 工作方式
- 0 013bit TImer/Counter
- 0 116bit Timer/Counter
- 1 08bit常數自動重新裝載
- 1 1只使用T0,Stop Timer1
TCON:定時器控制Timer Controller[編輯 | 編輯原始碼]
- TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
- TFx
- Timer(x)定時器的計數溢出標誌
- TRx
- 設定Timer/Counter(x)是否運行
- IEx
- 外部中斷INTx請求標誌
- 1:外部中斷x正請求中斷,響應時硬件清0
- ITx
- 設定外部中斷INTx觸發IEx的方式
- 0:低電平觸發方式
- 當INTx輸入低電平時,置位IEx,即設置為低電平時請求中斷
T2CON:T2状态控制寄存器(52獨有)[編輯 | 編輯原始碼]
- TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2
- TF2:T2溢出中断标志。
- 当T2作为串口波特率发生器时,TF2不会被置“1”。
- TF2必须由用户程序清“0”。
- EXF2:定时器T2外部中断标志。
- EXEN2为1时,当T2EX(P1.1)发生负跳变时置1中断标志DXF2,EXF2必须由用户程序清“0”。
- RCLK:串口的接收时钟选择标志位。
- RCLK=1时,T2工作于波特率发生器方式。
- TCLK:串口的发送时钟选择标志。
- TCLK=1时,T2工作于波特率发生器方式。
- EXEN2:T2的外部中断允許标志。
- TR2:T2计数/定时控制位。
- 1:允許计数,0:禁止计数。
- C/T2:外部计数器/定时器选择位。
- C/T2=1时,T2为外部事件计数器,计数脉冲来自T2(P1.0);C/T2=0时,T2为定时器,振荡脉冲的十二分频信号作为计数信号。
- CP/RL2:捕捉和常数自动再装入方式选择位。
- 1:工作于捕捉方式;0:T2工作于常数自动再装入方式
- 当TCLK或RCLK为1时,CP/RL2被忽略,T2总是工作于常数自动再装入方式。
- 1:工作于捕捉方式;0:T2工作于常数自动再装入方式
SBUF:串行數據緩衝器[編輯 | 編輯原始碼]
- 一個接收一個發送,共用99H地址,物理結構分離
- 發送:SBUF = XXX;接收:XXX = SBUF;
SCON:串行通信控制Serial Controller[編輯 | 編輯原始碼]
- SM0 SM1 SM2 REN TB8 RB8 TI RI
- SM0 SM1
- 串行口工作方式控制
- 計算波特率
- 00:12分頻模式mode0:
- 振荡器(晶振)频率/12
- 串行口工作方式控制
- 01:波特率由定时器T1或T2的溢出率和SMOD所定mode1:
- 可變
- 2^(SMOD) ×(T1溢出率)/32
- T1溢出率 = fosc / (12 * (2^8 - TH1))
- Baud rate = 2^(SMOD) × fosc / 32*12* (2^8 - TH1)
- 10:波特率由振荡器频率和SMOD所定mode2:
- fosc/64 or fosc/32
- 2^(SMOD) ×振荡器频率/64
- 11:波特率由定时器T1或T2的溢出率和SMOD所定mode3:
- 可變
- 2^(SMOD) ×(T1溢出率)/32
- SM2
- 多机通信控制位
- 方式0
- SM2為0
- 方式0
- 方式1
- 如果SM2=1,如果接收不到止動位vail stop bit,則RI不激發
- 方式2and3中
- 如果SM2=1,RB8=0,則RI不激發
- 多机通信控制位
- REN
- 允許接收位
- 1允許接收0拒絕接收
- 允許接收位
- TB8
- 方式2and3中,為發送數據的第9位
- 需程式set或clear(只是該bit)
- RB8
- 接收數據位8
- 方式0:RB8不被使用
- 方式1中:如果SM2=0,RB8接收的是停止bit
- 方式2and3中:RB8是接收到數據的第9位
- TI
- 發送中斷標誌位
- 方式0时,发送完第8位数据后,由硬件置位
- 其它方式下,在发送或停止位之前由硬件置位
- TI=1表示帧发送结束,TI可由软件清“0”。
- 發送中斷標誌位
- RI
- 接收中斷標誌位
- 方式0下,接收完第8位数据后,该位由硬件置位
- 在其他工作方式下,停止位時間的一半時,由硬件置位
- RI=1表示帧接收完成。
- 在串口中断处理时,TI,RI都需要软件清"0",硬件置位后不可能自动清0
- 此外,在进行缓冲区操作时,需要ES=0,以防止串口中断出现。
PCON:電源管理Power Controller[編輯 | 編輯原始碼]
- SMOD - - - GF1 GF0 PD IDL
- SMOD
- 串行口 波特率倍增位。
- 1:串行口波特率倍增,參考上方SCON公式
- 系統復位默認SMOD = 0
- 第6~4位保留
- GFx
- General purpose flag 通用標誌位
- PD
- Power Down模式,耗電極低
- IDL
- 空模式,MCU停止工作,保留計數器等。由Timer、外部中斷等喚醒
單片機所需掌握知識點[編輯 | 編輯原始碼]
最小系統能運行起來的必備條件[編輯 | 編輯原始碼]
電源
晶振
復位電路
對任意I/O口隨意操作[編輯 | 編輯原始碼]
控制輸出電平的高低
檢測輸入電平的高低
定時器[編輯 | 編輯原始碼]
定時器由初值計數直到溢出,最重要的是設置計數器的初值
假設需要定時器產生一次中斷事件的時間為t
- 機器週期Tm = 12 x T時鐘週期(晶振頻率的倒數)
- 機器週期:每次計數所需時間
- 需要計數N次:N = t / Tm
- 實際初值為(2^n) - N
- n為定時器位數(13bit or 16bit)
- 對其計數範圍取整( / )即TH初值
- 對其計數範圍取模( % )即TL初值
編程步驟:
- 設置TMOD,確定Tx(Timer幾)的工作方式
- 計算初值,寫入TH、TL
- 允許中斷,如使用中斷方式,需要對IE寄存器進行賦值
- 置位TRx,啟動定時/計數
鎖存器[編輯 | 編輯原始碼]
中斷[編輯 | 編輯原始碼]
外部中斷
定時器中斷
串口中斷
中斷函數
- void Function_name(void)__interrupt x{}
- x的值0 INT0中斷1 Timer0中斷2 INT1中斷3 Timer1中斷4 串口Serial Port中斷
串口通信[編輯 | 編輯原始碼]
單片機之間
單片機與計算機之間
知識點:
- 傳送方式
- 並行:短距離通信,控制簡單,相對傳輸速度快
- 串行:只能一位一位地傳送,由D0~D7
- 同步&異步
- 同步:建立發送方和接收方時鐘控制,達到完全同步
- 異步:以字符(構成的幀)為單位進行傳輸,從低到高傳送
- 傳輸方向
- 單工:僅一方向
- 半雙工:雙向,但分時
- 全雙工:同時發送或接收
- 串行的錯誤檢驗
- 奇偶校驗
- 代碼和校驗
- 循環校驗
- 串口的結構
- SBUF串行數據緩衝器
- T1溢出率
- T1計時器的溢出頻率:計時器每次低位計滿,向高位進位的時間的倒數
- 用於計算波特率:每秒傳輸二進制代碼的位數
看原理圖[編輯 | 編輯原始碼]
端口號相同的都會連接
51單片機上電後默認全部高電平(不寫程序控制時)
KEIL軟件使用[編輯 | 編輯原始碼]
- New Project
- New File
- 對Project的Source Group文件夾添加.c源文件
- New File
- 使用Rebuild all the target files
- 選擇Options for Target修改編譯出來的目標文件為.hex(Output - Create HEX file。16進制是2進制的縮寫版)
發光二極管LED[編輯 | 編輯原始碼]
- 由電流點亮
- 需3mA左右點亮
- 陰極給低電平0V
- 點亮後的壓降(分配的電壓?)是1.7V
- 設VCC為5V,則電阻壓降為3.3V
- 需提供3mA電流,所以電阻值需1.1KΩ
- 設VCC為5V,則電阻壓降為3.3V
- 限流電阻,為避免通過二極管電流過大而燒壞
單片機程序的延時方法[編輯 | 編輯原始碼]
- 暴力延時(軟件延時)
- 使用for 或者while,以此每一條語句所耗時間計算延時,不穩定,時間取決於CPU等
- 自己寫delay function的循環結構形式
- _NOP_(); 可以延時一個機械週期需要#include<intrins.h>
- 調用該函數會有開始指令2μs和結束指令2μs
- 所以delay 5μs的function只需寫 1 個_NOP_();
- 使用for 或者while,以此每一條語句所耗時間計算延時,不穩定,時間取決於CPU等
- 硬件延時
定時器(計數器)[編輯 | 編輯原始碼]
脈衝輸入腳
- 檢測片外來的脈衝
- T0(P3.4)
- T1(P3.5)
- 晶振輸入的脈衝
- F = f/12 = 11.0592M/12 = 0.9216MHZ
- T = 1/F = 1.085us
12分頻器
- 由于初期设计硬件技术缺陷,使执行指令时需要子时钟,就把12个振荡周度期规定为1个机器周期。
- 51单片机是12M晶振,如果是单指令周期的语句,刚好是1us,其他语句剛好為1us的整数倍,便于计算指令时间。
兩種工作模式
- 定時模式,常用
- 計數模式
數據存放
計數值存放在sfr特殊功能寄存器中(T0和T1)
- Tx中有8bit低位TL,8bit高位TH
- TL、TH之間搭配的工作方式關係受TMOD的M1 M0控制
- mode0:THx和THx之間32進制。TLx計到第32個脈衝時,TLx歸0,THx進1。
- mode1:TLx和THx之間256進制。TL計到256個脈衝時,TL歸0,TH進1。
- 計65536個脈衝才產生溢出,晶振11.0592MHz時,每計一個脈衝為1.085μs。所以溢出一次的時間為71.1ms
- mode2:TH存放TL溢出後下次計數的起點。(8bit auto reload mode)
- mode3:TH與TL獨立對自己的輸入脈衝計數。
TMOD的sbit:M1 M0;控制進位方式
- 工作方式
- 0 013bit TImer/Counter
- 0 116bit Timer/Counter
- THx = (2^16 - T/dT ) / 2^8
- (2^16 - (Fosc/12)*T ) / 2^8
- TLx = (2^16 - T/dT ) % 2^8
- T:期望計時dT:當前晶振經分頻後,完成一次操作需時dT = 1 / (Fosc/12) = 12 / FoscT/dT:當前晶振下需多少次計數才可計到T
- THx = (2^16 - T/dT ) / 2^8
- 1 08bit常數自動重新裝載
- THx = 2^8 - T/dT
- 1 1只使用T0,Stop Timer1
計數器溢出後,TH與TL都歸0。TF = 1;
ROM & RAM[編輯 | 編輯原始碼]
數據存儲在ROM中
RAM是隨機存儲器(內存)
進制[編輯 | 編輯原始碼]
十六進制Hex
- 編程為零→0xFD
- 也可以表示為FDH
單片機的週期[編輯 | 編輯原始碼]
時鐘週期(振蕩週期)
- 時鐘頻率(晶振)的倒數
- 若晶振12MHz,則週期1/12μs(單片機中最小時間單位)
- 普遍晶振為11.0592MHz
- 單片機在一個週期內僅能完成一個任務
- 時鐘頻率越高,工作速度越快
- 若晶振12MHz,則週期1/12μs(單片機中最小時間單位)
機器週期
- 單片機基本操作週期
- 一個機器週期內,單片機完成一個基本操作
- 讀或寫
- 為時鐘週期的12倍
- That means 單片機在12次時鐘週期(若晶振12MHz則1μs)內才能完成一個任務
- 一個機器週期內,單片機完成一個基本操作
指令週期
- z以機器週期為單位
- 指令不同,所需機器週期也不同
🖥️單片機 - Midterm後[編輯 | 編輯原始碼]
串口Serial
PCON Register[編輯 | 編輯原始碼]
- SMOD - - - GF1 GF0 PD IDL
- SMOD
- 串行口 波特率倍增位。
- 1:串行口波特率倍增,參考SCON的公式
- 系統復位默認SMOD = 0
SCON:串行通信控制Serial Controller[編輯 | 編輯原始碼]
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0 SM1 波特率計算模式[編輯 | 編輯原始碼]
- 串行口工作方式控制
- 計算波特率
- 00:晶振頻率12分頻模式mode0:
- 振荡器(晶振)频率/12
- 01:波特率由定时器T1或T2的溢出率和SMOD所定mode1:
- 可變
- 2^(SMOD) ×(T1溢出率)/32
- T1溢出率 = fosc / (12 * (2^8 - TH1))
- Baud rate = 2^(SMOD) × fosc / 32*12* (2^8 - TH1)
- 10:波特率由晶振频率和SMOD所定mode2:
- fosc/64 or fosc/32
- 2^(SMOD) ×晶振频率/64
- 11:波特率由定时器T1或T2的溢出率和SMOD所定mode3:
- 可變
- 2^(SMOD) ×(T1溢出率)/32
- 韋sir ppt計算公式
- Baud Rate計算表格參考
SM2[編輯 | 編輯原始碼]
- 多机通信控制位
- 方式0
- SM2為0
- 方式1
- 如果SM2=1,如果接收不到止動位vaild stop bit,則RI不激發
- 方式2and3中
- 如果SM2=1,RB8=0,則RI不激發
- 方式0
REN[編輯 | 編輯原始碼]
- 允許接收位
- 1允許接收0拒絕接收
TB8[編輯 | 編輯原始碼]
- 方式2and3中,為發送數據的第9位
- 需程式set或clear(只是該bit)
RB8[編輯 | 編輯原始碼]
- 接收數據位8
- 方式0:RB8不被使用
- 方式1中:如果SM2=0,RB8接收的是停止bit
- 方式2and3中:RB8是接收到數據的第9位
TI[編輯 | 編輯原始碼]
- 發送中斷標誌位
- 方式0时,发送完第8位数据后,由硬件置位
- 其它方式下,在发送或停止位之前由硬件置位
- TI=1表示帧发送结束,TI可由软件清“0”。
RI[編輯 | 編輯原始碼]
- 接收中斷標誌位
- 方式0下,接收完第8位数据后,该位由硬件置位
- 在其他工作方式下,停止位時間的一半時,由硬件置位
- RI=1表示帧接收完成。
- 在串口中断处理时,TI,RI都需要软件清"0",硬件置位后不可能自动清0
- 此外,在进行缓冲区操作时,需要ES=0,以防止串口中断出现。
IE:中断允許寄存器Interrupt[編輯 | 編輯原始碼]
EA[編輯 | 編輯原始碼]
0:禁止所有中斷,不產生中斷
1:各中斷由個別允許bit決定
IE.6[編輯 | 編輯原始碼]
保留
ES[編輯 | 編輯原始碼]
串行口中断充许(ES=1充许,ES=0禁止)
ETx[編輯 | 編輯原始碼]
定时器x中断允许
定时2溢出中断允許(8052用)
EXx[編輯 | 編輯原始碼]
外部中断INT0的中断允许
Multi Tasking 多任務處理[編輯 | 編輯原始碼]
原理
按時間片在各個程序間飛速切換
按操作系統特點分類[編輯 | 編輯原始碼]
Cooperative 協同式[編輯 | 編輯原始碼]
- 每個運行的程序都要負責釋放CPU控制權以讓其他程序有機會運行,不管是顯式地Explicitly還是隱式地Implicitly交出控制權。
- 顯式放棄控制權
- 因執行為了某個目的而安排的一個特殊系統指令(如程序對磁盤的絕對讀寫指令)
- 隱式放棄控制權
- 因執行某條系統指令,而該指令在執行時又會放棄CPU控制權(如操作系統虛擬內存技術的頁面切換)
- 顯式放棄控制權
- A task 讓出relinquishes CPU (resources) only when it is willing to
Preemptive 搶佔式[編輯 | 編輯原始碼]
操作系統必須有從任何一個運行的程序上取走控制權和使另一個程序獲得控制權的能力
策略[編輯 | 編輯原始碼]
定時器分配時間片
外部中斷後掃描端口來切換任務
拉電阻[編輯 | 編輯原始碼]
上下拉電阻[編輯 | 編輯原始碼]
51單片機P0口無拉電阻,P1 P2 P3內部集成拉電阻[編輯 | 編輯原始碼]
弱拉[編輯 | 編輯原始碼]
拉電阻更小
電平能力更強,芯片獲得更多電壓,電流能量越大
功耗越大,輸入低電平狀態時仍有電流通過
強拉[編輯 | 編輯原始碼]
拉電阻更大
抵抗外部干擾能力越強
接口Interfacing[編輯 | 編輯原始碼]
抖動Bounce[編輯 | 編輯原始碼]
防抖Debounce[編輯 | 編輯原始碼]
- 硬件
- Flipflop
- 軟件
- Delay 20ms
- for(i=0; i<20000; i++);
- 適用於指令時間為1μs的系統
穩壓二極管Diode[編輯 | 編輯原始碼]
固定工作電壓
串連電阻以不超電流
VCC VDD VSS[編輯 | 編輯原始碼]
VCC[編輯 | 編輯原始碼]
Current
接入電路電壓
VDD[編輯 | 編輯原始碼]
Devices
接入設備電壓
VSS[編輯 | 編輯原始碼]
Series
公共接地處電壓
模擬-數字轉換器ADC A/D Converter[編輯 | 編輯原始碼]
多少bit ADC即為輸出多少bit
轉換模式[編輯 | 編輯原始碼]
解析度和帶寬 Resolution and Bandwidth
- 帶寬/頻寬 Bandwidth
- 定義:能有效通過該頻道的訊號的最大頻帶寬度,在传输管道中可以传递数据的能力
- 在数字设备中,频宽通常以bps表示,即每秒可传输之位数。在模拟设备中,频宽通常以每秒传送周期或赫兹(Hz)来表示。
- 不一定只描述信號接收方,也可以形容信號源
- 信號採樣速度需要為帶寬Bandwidth的兩倍
採樣和保持數據Sample and Hold[編輯 | 編輯原始碼]
採樣和保持數據示意圖 Sample and Hold
採樣速率 > 2x數據比特率
電容C1的大小影響
- 影響放大和充電時間
- Larger Capacitor, lower droop rate
- 放電更慢
- 電平Hold得更久