公司动态
单片机笔记
OC门OC门集电极开路门是一种在数字电路中常用的特殊逻辑门其设计允许输出端直接并联使用从而实现一些标准逻辑门无法直接完成的功能。下面这个表格可以帮助你快速了解它的核心特性和应用场景。特性类别具体说明核心原理输出级晶体管的集电极悬空开路使用时必须外接上拉电阻和电源电路才能形成完整的工作回路。关键功能线与 (Wired-AND)多个OC门的输出端可以直接连接在一起实现逻辑“与”功能。只有当所有输出都为高阻态时总线才为高电平任一输出为低电平总线即被拉低。主要应用1.实现复杂逻辑如“与或非” 2.电平转换通过改变上拉电源的电压轻松连接不同电平标准的器件 3.驱动大负载直接驱动继电器、指示灯等需要较大电流或较高电压的器件 4.构建总线系统用于多个器件共享一条通信线总线的场景确保同一时刻只有一个器件主动驱动总线优点• 可实现线或逻辑简化电路设计 • 能够灵活适配不同电压电平 • 适合驱动非数字信号负载缺点•开关速度较慢由于上拉电阻对寄生电容充电 • 需要额外配置上拉电阻 • 存在额外的静态功率损耗关键设计点上拉电阻的选择为OC门选择合适的上拉电阻Rp至关重要它需要一个平衡阻值过大输出由低电平转向高电平时电阻对负载电容的充电速度慢导致上升沿变缓影响工作速度在高频应用中尤其明显。阻值过小当输出低电平时电流主要经导通门的输出管到地此电流灌电流会很大导致功耗增加并可能超过OC门的最大灌电流能力而损坏器件。通常上拉电阻的阻值范围在1kΩ到10kΩ之间需要根据工作频率、功耗要求和驱动能力具体计算选择。OC门与三态门TS门的对比在需要实现总线连接的场景中除了OC门还常使用三态门TS门。它们的对比如下特性OC门三态门 (TS门)输出状态低电平、高阻态高电平、低电平、高阻态是否需要上拉电阻必须不需要本身是推拉输出速度较慢快总线控制通过“线与”逻辑通过独立的使能信号控制主要应用电平转换、驱动、简单的线与逻辑高速总线系统三态门的优势在于其输出是推拉式的低阻输出且不需接上拉电阻所以开关速度比OC门快非常适合应用于高速总线。好的我们来详细讲解一下单片机中的PSWProgram Status Word程序状态字标志位。这是一个非常核心的概念尤其在51系列单片机中。PSW 是什么PSW 是一个8位的特殊功能寄存器。你可以把它理解为单片机的“健康状况指示牌”或“CPU的身份证”。它实时记录了刚刚执行完成的算术或逻辑运算结果的特征信息。这些信息通过一些标志位来体现后续的指令特别是条件转移指令如JZ、JC、JNB等通过检查这些标志位来决定程序的走向从而实现判断、循环、分支等复杂逻辑。51单片机中PSW的各位定义最经典的51单片机如8051、AT89S51等的PSW寄存器各位定义如下位序号符号地址功能说明PSW.7CYD7H进位标志位PSW.6ACD6H辅助进位标志位PSW.5F0D5H用户标志位0PSW.4RS1D4H寄存器区选择控制位1PSW.3RS0D3H寄存器区选择控制位0PSW.2OVD2H溢出标志位PSW.1-D1H保留位PSW.0PD0H奇偶标志位各个标志位的详细功能CYCarry进位标志位这是最常用的标志位。功能存放无符号数算术运算的进位或借位。加法运算最高位D7位有进位时CY 1否则CY 0。减法运算最高位D7位有借位时即需要向更高位借1CY 1否则CY 0。应用用于无符号数的多字节加减法、大小比较以及移位操作RLC A,RRC A等指令会操作CY位。示例MOV A,#0FFH;A255ADD A,#01H;A2551256(结果超过8位能表示的范围);结果A00H,CY1因为产生了进位ACAuxiliary Carry辅助进位标志位功能存放低4位即D3位向高4位D4位的进位或借位。也称为“半字节进位标志”。应用主要用于BCD码二十进制码的运算调整。单片机执行DA A十进制调整指令时会同时检查AC和CY标志。示例MOV A, #0EH ; A 14 ADD A, #08H ; A 14 8 22 ; 低4位EH (14) 8H (8) 16H (22)低4位相加为16超过了15所以D3向D4有进位。 ; 结果AC 1F0User Flag 0用户标志位0功能这是一个通用的标志位单片机不自动设置它。程序员可以自由地使用它用SETB F0置1用CLR F0清0来记录程序的某种状态相当于一个“软件开关”。应用在程序中作为一个临时的状态标记供后续程序判断。RS1 和 RS0Register Bank Select工作寄存器区选择位51单片机内部RAM的00H-1FH地址区域被平均分成了4个“区”Bank的工作寄存器组R0-R7。RS1和RS0的组合用于选择当前程序使用哪一组。组合关系RS1RS0选择的寄存器区对应R0-R7的地址000区00H-07H011区08H-0FH102区10H-17H113区18H-1FH应用在进入中断服务程序或子程序时通过切换寄存器区来保护当前寄存器R0-R7的值避免冲突这样可以快速进行现场保护而无需将大量数据压入栈中。OVOverflow溢出标志位功能存放有符号数算术运算的溢出。溢出是指运算结果超出了8位有符号数所能表示的范围-128 ~ 127。规则OV C6 ⊕ C7其中C6是次高位D6位向最高位D7位的进位C7是最高位D7位向前的进位。简单来说就是最高位的进位和次高位的进位不同时OV1。应用判断有符号数的运算结果是否正确。示例MOV A, #7FH ; A 127 (有符号数最大值) ADD A, #01H ; A 127 1 128 ; 对于有符号数127 1 应该等于 128但8位有符号数无法表示128发生溢出。 ; 结果A 80H (二进制 1000 0000补码表示的是 -128)OV 1。PParity奇偶标志位功能反映累加器A中“1”的个数的奇偶性。规则每个指令周期后单片机自动检查A中“1”的个数。如果“1”的个数为奇数则P 1如果为偶数则P 0。应用常用于串行通信如UART中的奇偶校验以检验数据传输的正确性。总结与要点核心作用PSW是连接ALU算术逻辑单元和程序控制流条件跳转的桥梁。区分CY和OV这是学习的难点和重点。CY进位用于无符号数的运算判断。JC/JNC指令根据CY跳转。OV溢出用于有符号数的运算判断。JOV/JNOV指令根据OV跳转注意51的标准指令集没有直接的JOV指令通常需要判断OV位后再用JB/JNB指令。软件标志F0位是程序员可自由使用的“草稿纸”。系统配置RS1/RS0用于配置单片机的工作寄存器区是系统级编程如中断处理的重要工具。理解并熟练运用PSW的各个标志位是编写高效、可靠单片机汇编程序的关键。数码管数码管内部构造a --- f | | b -g- e | | c --- d • dp7个段a-g 1个小数点dp每个段都是一个LED发光二极管段码表0-9的十六进制表示段码取决于段与字节位的对应关系。我们假设一种最常用的连接顺序从字节的最高位到最低位dp g f e d c b a。例如要显示数字 “0”需要点亮 a, b, c, d, e, f 段。共阴极段码表1点亮数字dpgfedcba二进制十六进制0001111110011 11110x3F1000001100000 01100x062010110110101 10110x5B3010011110100 11110x4F4011001100110 01100x665011011010110 11010x6D6011111010111 11010x7D7000001110000 01110x078011111110111 11110x7F9011011110110 11110x6F共阳极段码表0点亮共阳极的段码与共阴极的段码恰好相反按位取反。数字共阴极段码共阳极段码取反后00x3F(0011 1111)0xC0(1100 0000)10x06(0000 0110)0xF9(1111 1001)20x5B(0101 1011)0xA4(1010 0100)30x4F(0100 1111)0xB0(1011 0000)40x66(0110 0110)0x99(1001 1001)50x6D(0110 1101)0x92(1001 0010)60x7D(0111 1101)0x82(1000 0010)70x07(0000 0111)0xF8(1111 1000)80x7F(0111 1111)0x80(1000 0000)90x6F(0110 1111)0x90(1001 0000)重要提示段码的具体十六进制值完全取决于你的硬件连接即a段连接的是I/O口的哪一位最低位还是最高位。上表是基于dp g f e d c b a的顺序。如果你的电路连接顺序不同段码需要重新计算。// 定义0-9的共阴极段码表 (顺序: dp g f e d c b a)unsignedcharcode SegmentCode[]{0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F// 9};// 使用时如果要显示数字5只需P0SegmentCode[5];// 将段码发送到连接数码管的端口如P0口共阴 vs 共阳结构共阴极数码管a b c d e f g dp||||||||LED LED...LED LED||||||||----------------|GND公共阴极共阳极数码管VCC公共阳极|----------------|||||||||LED LED...LED LED|||||||||a b c d e f g dp段选电平有效原理详解电流路径分析共阴极要使某个段发光VCC → 限流电阻 → 段选引脚(a/b/c...)→ LED → 公共阴极 → GND电压关系段选引脚 高电平1→ LED正向偏置 → 发光段选引脚 低电平0→ LED零偏置 → 熄灭但是位选控制正好相反公共阴极 低电平0→ 形成回路 → 该位数码管可点亮公共阴极 高电平1→ 回路断开 → 该位数码管熄灭位选电平有效原理详解物理原理// 共阴极数码管的电流路径MCU_IO ──→ 段选LED ──→ 公共端 ──→ 位选IO ──→ GND// 要使电流流通// 段选IO 高电平提供正电压// 位选IO 低电平提供接地路径真值表说明控制信号电平功能说明段选(a-g)高电平(1)LED点亮段选(a-g)低电平(0)LED熄灭位选(COM)低电平(0)选中该位数码管位选(COM)高电平(1)不选中该位数码管实际驱动示例显示数字1点亮b、c段电路连接段选P0口控制a-g段位选P1.0控制第一位数码管代码实现// 选中第一位数码管位选低电平有效P10xFE;// 1111 1110 - P1.00选中第一位数码管// 显示数字1b、c段点亮P00b11111001;// 对应段b1, c1其他段02. 动态扫描过程voidDisplay_Number(unsignedcharnumber){// 第一位百位带小数点P10xFE;// 选中百位P1.00P0SegCode[number/100]|0x80;// 段选小数点Delay(1);// 第二位十位P10xFD;// 选中十位P1.10P0SegCode[(number/10)%10];Delay(1);// 第三位个位P10xFB;// 选中个位P1.20P0SegCode[number%10];Delay(1);}与共阳极数码管的对比特性共阴极数码管共阳极数码管公共端连接所有LED阴极相连所有LED阳极相连位选有效电平低电平有效0高电平有效1段选有效电平高电平有效1低电平有效0电流路径MCU→段→位选→GNDVCC→位选→段→MCU位选码计算~(1 引脚)(1 引脚)消隐处理的重要性// 先关闭所有位选消隐P1|0x0F;// 所有位选置高电平不选中// 再送段选数据P0segment_data;// 最后开启对应位选P1(P10xF0)|bit_mask;低电平有效的优势驱动能力强51单片机的拉电流能力通常弱于灌电流能力电路设计简单直接驱动无需上拉电阻功耗较低只有选中的数码管才会导通常见问题排查数码管全亮位选线始终为低电平数码管不亮位选线始终为高电平显示混乱消隐时间不足或扫描频率过低这种低电平有效的设计使得共阴极数码管在51单片机应用中非常流行能够充分利用MCU的IO口驱动能力。单片机I/O口的不同工作模式理解单片机I/O口的不同工作模式是精准控制外设的基础。下面这个表格汇总了这四种模式的核心特点帮你快速把握要点。特性维度准双向口推挽输出高阻态 (高阻输入)开漏输出核心特点内部弱上拉需先写1再读入强上拉强下拉驱动能力强输入阻抗极高不干扰外部信号只能输出低电平或高阻依赖外部上拉**配置寄存器示例 (PxM1[1])PxM10, PxM00PxM10, PxM01PxM11, PxM00PxM11, PxM01输出1时内部结构弱上拉电阻如50kΩ有效上拉MOS管导通直接输出强高电平输出电路断开上下MOS管均截止输出悬空输出0时内部结构强下拉MOS管导通下拉MOS管导通直接输出强低电平输出电路断开下拉MOS管导通输入方式需先向端口锁存器写1再读取引脚通常不用于输入直接读取引脚状态状态由外部信号决定需外部上拉读取引脚状态驱动能力弱高电平输出电流小强高、低电平驱动能力均强无驱动能力低电平驱动能力强高电平依赖外部典型应用按键检测、简单的数字输入/输出直接驱动LED、蜂鸣器、继电器等ADC采样、模拟信号输入、总线挂载多设备电平转换、I²C等双向总线四种模式详解与应用准双向口 (Quasi-bidirectional)这是传统51单片机如STC89C52的默认模式。它的“准”体现在作为输入口前需要先向端口锁存器写入1使其变为弱高电平这样才能正确读取外部输入的电平。其高电平驱动能力很弱但低电平的“灌电流”能力相对较强。它非常适合连接按键等简单的数字输入设备。推挽输出 (Push-Pull Output)该模式通过一对MOS管或三极管形成“推”和“挽”两个动作能够直接输出较强的高电平和低电平在两种电平下都具有驱动能力。它常用于需要直接驱动较大电流负载的场景如点亮LED、驱动蜂鸣器或小型继电器。高阻态 (High-Impedance State, Hi-Z)高阻态下引脚内部的输出驱动电路被彻底断开对外部电路呈现极高的阻抗理论上无穷大。此时引脚电平完全由外部信号决定非常适合用于模拟信号采集如ADC输入或挂在总线上避免干扰其他设备通信。开漏输出 (Open-Drain Output)开漏输出可以看作是简化版的推挽输出它只有下拉部分没有内部上拉。要正常输出高电平必须外接上拉电阻。这种特性使其非常适用于电平转换和构建双向总线如I²C可以实现“线与”逻辑。模式选择与配置要点配置寄存器现代单片机如STC15/8H系列通过特殊功能寄存器来设置I/O口模式通常是PxM1和PxM0这两个寄存器。应用驱动驱动LED时若LED阴极接单片机、阳极通过电阻接VCC共阴极采用推挽输出可稳定点亮若LED阳极接VCC、阴极接单片机共阳极采用开漏输出并外接适当的下拉电阻也能可靠驱动。总线应用与电平转换I²C总线必须使用开漏输出模式并搭配上拉电阻这样才能实现多设备的“线与”功能和安全的双向通信。当3.3V单片机需要与5V设备通信时利用开漏输出特性将上拉电阻接到5V电源可以轻松实现3.3V到5V的电平转换。关键提醒 使用准双向口作为输入时切记先写1再读取。 推挽输出模式下避免将两个输出端口直接短接特别是当一个输出高电平另一个输出低电平时会形成短路可能损坏芯片。 开漏输出用于数字信号时必须外接上拉电阻否则无法输出高电平。