单片机

随着大规模集成电路的不断发展,很多单片机都有内置A/D模块,因此,单片机的A/D转换可以用内置A/D模块也可以用外置A/D电路完成,现谈谈单片机A/D转换的工作原理及优缺点,并分析提高A/D转换精度的方法。

1、 A/D转换的工作原理及优缺点
  
(1)单片机片内A/D转换单片机片内A/D转换是利用单片机的内置A/D模块,通过选择不同的模拟量通道进行A/D转换。可以将模拟量直接输入到单片机对应的输入脚,外围电路简单。转换后的数据直接保存在片内寄存器中,数据提取方便。但大多数单片机的内置A/D模块只有8位和10位,无法进行高精度的A/D转换,原理如图1所示。
  


  
(2)单片机片外A/D转换单片机外置A/D转换是单片机通过一定的逻辑电路控制外置A/D转换电路进行A/D转换,外围电路相对复杂。单片机将转换结果通过一定的时序读取到单片机中,按要求通过选择A/D转换电路,可以实现高精度的A/D转换(可以达到14位、16位、22位甚至更高),原理如图2所示。


2、 A/D转换模块提高转换精度的方法

提高A/D转换精度的方法要提高A/D转换的精度,选用高精度的外部A/D转换器当然可以达到要求,除此之外,有没有其他方法呢?答案是肯定的。以下介绍几种利用片内A/D转换模块提高转换精度的方法。
  
(1)以采集电压为例,假设需要采集0.0~400.0 V直流电压,单片机A/D模块的基准电压VREF+取5.0 V,VREF-取0 V,需要采集的电压经过衰减,变成0.0~5.0 V,连接电路如图3所示。显然,如果要达0.1 V的精度,则A/D转换的分辨率必须小于1/4000,而片内A/D模块一般为10位,分辨率仅为1/1 024,达不到要求。由于模拟量(O~400V电压)输入大多不是稳定值,会有波动,为了得到更高精度的数据,可以将多次采集的数据累加后再取平均值(其实即使分辨率达到要求的A/D转换也要经过累加再取平均值,以得到更稳定的数据)。如果每间隔一定时间采集的10位数据为Di,取64个这样的数据累加后再除以16,就可以得到12位的数据D,即
 

 

这时D的分辨率是1/212=1/4 096。这样,就得到了更高精度的数据。

  
  
但是,如果模拟量(0~400V电压)输入值非常稳定,每间隔一定时间采集的10位数据Di都相同,以上方法就达不到要求了。
  
(2)如果在A/D转换过程中要得到局部更高精度的数据,例如检测蓄电池充放电过程中的电压,电压范围是0~18 V,一般精度达到0.02 V即可,但用户更关心8~13 V的电压,8~13 V内精度要达到0.01 V。为了解决这个问题,设计了原理如图4所示的电路。

单片机有内置10位A/D模块,Ui(0~20 V)电压经过R1、R2、P1衰减得到0~5 V的电压,该电压直接送到单片机的AN1输入口,即VAN1=Ui/4。U2A接成减法运算电路,即U2A 1端电压VU2A1=VAN1-2 V=Ui/4-2 V=(Ui-8 V)/4。U2B接成4倍放大电路,U2B 7端的电压VU2B7=VU2A×4=Ui-8 V。AN2输入并联一只5 V稳压二极管,以保证当输入电压大于8 V时,单片机AN2可以得到O~5 V电压。
  
单片机先采集AN1的数据,通过采集的数据判断输入电压是否在8~13 V之间,如果不在8~13 V,则采集到的数据就是模拟量(U)对应的数字量(D:000H~3FFH),精度为20 V/2010=20 V/1 024≈0.02 V,电压数据U=D×0.02 V;如果采集的数据在8~13 V之间,单片机再采集AN2的数据,采集到的数据加上8 V就是模拟量(U)对应的数字量(D:000H~3FFH),精度为(13-8)V/210=5 V/1 024≈0.005 V,电压数据U=8 V+D×0.005 V。这样,在8~13 V之间的A/D转换精度就大大提高了。

结语

随着工业自动控制的不断发展,单片机在工业自动控制的应用也越来越广。本文介绍的提高A/D转换精度的工作原理在实际应用中具有一定的使用价值,特别是通过简单的模拟运算电路,可以局部提高A/D转换精度。利用这个原理,如果将模拟量分段放大,也可以全范围提高A/D转换精度。这种方法在A/D转换领域有较好的应用前景。

围观 452

对于一个电子工程师来说,在单片机的电路设计中电磁干扰不仅关系了单片机在控制在中的能力和准确度,还关系到企业在行业中的竞争。对电磁干扰的设计本文主要从硬件和软件方面进行设计处理,下面就是从单片机的PCB设计到软件处理方面来介绍对电磁兼容性的处理。

一、影响EMC的因数

1.电压

电源电压越高,意味着电压振幅越大,发射就更多,而低电源电压影响敏感度。

2.频率

高频产生更多的发射,周期性信号产生更多的发射。在高频单片机系统中,当器件开关时产生电流尖峰信号;在模拟系统中,当负载电流变化时产生电流尖峰信号。

3.接地

在所有EMC题目中,主要题目是不适当的接地引起的。有三种信号接地方法:单点、多点和混合。在频率低于1MHz时,可采用单点接地方法,但不适宜高频;在高频应用中,最好采用多点接地。混合接地是低频用单点接地,而高频用多点接地的方法。地线布局是关键,高频数字电路和低电平模拟电路的接地电路尽不能混合。

4.PCB设计

适当的印刷电路板(PCB)布线对防止EMI是至关重要的。

5.电源往耦

当器件开关时,在电源线上会产生瞬态电流,必须衰减和滤掉这些瞬态电流。来自高di/dt源的瞬态电流导致地和线迹“发射”电压,高di/dt产生大范围的高频电流,激励部件和线缆辐射。流经导线的电流变化和电感会导致压降,减小电感或电流随时间的变化可使该压降最小。

二、对干扰措施的硬件处理方法

1.印刷线路板(PCB)的电磁兼容性设计

PCB 是单片机系统中电路元件和器件的支撑件,它提供电路元件和器件之间的电气连接。随着电子技术的飞速发展,PCB的密度越来越高。PCB设计的好坏对单片机系统的电磁兼容性影响很大,实践证实,即使电路原理图设计正确,印刷电路板设计不当,也会对单片机系统的可靠性产生不利影响。例如,假如印刷电路板的两条细平行线靠的很近,会形成信号波形的延迟,在传输线的终端形成反射噪声。因此,在设计印刷电路板的时候,应留意采用正确的方法,遵守PCB设计的一般原则,并应符合抗干扰的设计要求。要使电子电路获得最佳性能,元器件的布局及导线的布设是很重要的。

2.输入/输出的电磁兼容性设计

在单片机系统中输进/输出也是干扰源的传导线,和接收射频干扰信号的拾检源,我们设计时一般要采取有效的措施:

①采用必要的共模/差模抑制电路,同时也要采取一定的滤波和防电磁屏蔽措施以减小干扰的进进。

②在条件许可的情况下尽可能采取各种隔离措施(如光电隔离或者磁电隔离),从而阻断干扰的传播。

3.单片机复位电路的设计

在的单片机系统中,看门狗系统对整个单片机的运行起着特别重要的作用,由于所有的干扰源不可能全部被隔离或往除,一旦进进CPU干扰程序的正常运行,那么复位系统结合软件处理措施就成了一道有效的纠错防御的屏障了。常用的复位系统有以下两种:

① 外部复位系统。外部“看门狗”电路可以自己设计也可以用专门的“看门狗”芯片来搭建。然而,他们各有优缺点,大部分专用“看门狗”芯片对低频“喂狗”信号不能响应,而高频“喂狗”信号都能响应,使其在低频“喂狗”信号下产生复位动作而在高频的“喂狗”信号下不产生复位动作,这样,假如程序系统陷进一个死循环,而该循环中恰巧有着“喂狗”信号的话,那么该复位电路就无法实现它的应有的功能了。然而,我们自己可以设计一个具有带通的“喂狗”电路和其他复位电路构成的系统就是一个很有效外部监控系统了。

②现在越来越多的单片机都带有自己的片上复位系统,这样用户就可以很方便的使用其内部的复位定时器了,但是,有一些型号的单片机它的复位指令太过于简单,这样也会存在象上述死循环那样的“喂狗”指令,使其失往监控作用。有一些单片机的片上复位指令就做的比较好,一般他们把“喂狗”信号做成固定格式的多条指令依顺序来执行,假如有一定错误则该“喂狗”操纵无效,这样就大大进步了复位电路的可靠性。

4.振荡器

大部分的单片机都有一个耦合于外部晶体或陶瓷谐振器的振荡器电路。在PCB上,要求外接是电容、晶体或陶瓷谐振器的引线越短越好。RC振荡器对干扰信号有潜伏的敏感性,它能产生很短的时钟周期,因而最好选晶体或陶瓷谐振器。另外,石英晶体的外壳要接地。

5.防雷击措施

室外使用的单片机系统或从室外排挤引进室内的电源线、信号线,要考虑系统的防雷击题目。常用的防雷击器件有:气体放电管、TVS(Transient Voltage Suppression)等。气体放电管是当电源的电压大于某一数值时,通常为数十V或数百V,气体击穿放电,将电源线上强冲击脉冲导进大地。TVS可以看成两个并联且方向相反的齐纳二极管,当两端电压高于某一值时导通。其特点是可以瞬态通过数百乃上千A的电流。

三、对干扰措施的软件处理方法

电磁干扰源所产生的干扰信号在一些特定的情况下(比如在一些电磁环境比较恶劣的情况下)是无法完全消除的,终极将会进进CPU处理的的核心单元,这样在一些大规模集成电路经常会受到干扰,导致不能正常工作或在错误状态下工作。特别是像RAM这种利用双稳态进行存储的器件,往往会在强干扰下发生翻转,使原来存储的“0”变为“1”,或者“1”变为“0”;一些串行传输的时序及数据会因干扰而发生改变;更严重的会破坏一些重要的数据参数等;造成的后果往往是很严重的。在这种情况下软件设计的好坏直接影响到整个系统的抗干扰能力的高低。

1.程序会由于电磁干扰大致会一下几种情况:

①程序跑飞。

这种情况是最常见的干扰结果,一般来说有一个好的复位系统或软件帧测系统即可,对整个运行系统的不会产生太大的影响。

②死循环或不正常程序代码运行。

当然这种死循环和不正常程序代码并非设计职员有意写进的,我们知道程序的指令是由字节组成的,有的是单字节指令而有的是多字节指令,当干扰产生后使得PC指针发生变化,从而使原来的程序代码发生了重组产生了不可猜测的可执行的程序代码,那么,这种错误是致命的,它会有可能会往修改重要的数据参数,有可能产生不可猜测的控制输出等一系列错误状态。

2.对重要参数储存的措施

一般情况下,我们可以采用错误检测与纠正来有效地减少或避免这种情况的出现。根据检错、纠错的原理,主要思想是在数据写进时,根据写进的数据天生一定位数的校验码,与相应的数据一起保存起来;当读出时,同时也将校验码读出,进行判决。假如出现一位错误则自动纠正,将正确的数据送出,并同时将改正以后的数据回写覆盖原来错误的数据;假如出现两位错误则产生中断报告,通知CPU进行异常处理。所有这一切动作都是靠软件设计自动完成的,具有实时性和自动完成的特点。通过这样的设计,能大大进步系统的抗干扰能力,从而进步系统的可靠性。

检错与纠错原理:首先来看看检错和纠错的基本原理。进行差错控制的基本思想是在信息码组中以一定规则加进不同方式的冗余码,以便在信息读出的时候依靠多余的监视码或校码码来发现或自动纠正错误。

针对误码发生的特点,即错误发生的随机性和小概任性,它几乎总是随机地影响某个字节中的某一位(bit),因此,假如能够设计自动纠正一位错误,而检查两位错误的编码方式。就可以大大进步系统的可靠性。

3.对RAM和FLASH(ROM)的检测

在编制程序时我们最好是写进一些检测程序来测试RAM和FLASH(ROM)的数据代码,看有无发生错误,一旦发生要立即纠正,纠正不了的要及时给出错误指示,以便用户往处理。

另外,在编制程序时加进程序冗余是不可缺少的。在一定的地方加进三条或三条以上NOP指令对程序的重组有着很有效防止作用。同时,在程序的运行状态中要引进标志数据和检测状态,从而及时发现和纠正错误产生。

围观 356

经常接触单片机的朋友,肯定遇到过单片机程序跑飞的问题。由于程序较为复杂,所以一旦出现跑飞的现象就比较难以查找错误出现的地方,网络上对错误的解释和解决方法也比较五花八门,并不方便查找。小编特意帮大家整理了关于单片机程序跑飞死机的原因,大家快来看看能不能在其中找到自己想要答案吧。

单片机程序死机,跑飞了可以从以下几个方面查找原因:

1、意外中断。

是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象。

2、中断变量处理不妥。

若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。

3、地址溢出,常见错误为指针操作错误。

我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。

4、无条件的死循环。

比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制。

5、看门狗没有关闭。

有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗。

6、堆栈溢出。

最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。

通过本篇文章,大家是否找到了自己想要的问题解决方法了呢?就算没有找到,本篇文章也能帮助大家在一定程度上预防跑飞现象的发生。

围观 229

单片机的种类繁多,从低端到高端,有以51单片机为代表的8位单片机和以ARM为代表的32位单片机,不同档次的单片机实现网络接口的方法不同。对于像ARM等高端处理器一般都可以运行嵌入式操作系统,例如嵌入式Linux。对于无操作系统要求的单片机如何实现网络接入,我下面将这些方案按TCP/IP协议栈的不同归结为两大类:第一类是传统的软件TCP/IP协议栈方案;第二类是最新的硬件TCP/IP协议栈方案。下面我就这两类方案的实现方式进行分析。

1、MAC+PHY方案

所谓的TCP/IP协议栈是一系列网络协议的统称,不仅包括我们熟知的TCP协议和IP协议,还有网络层的ICMP(Internet控制报文)协议、IGMP(Internet 组管理)协议、ARP(地址解析)协议,传输层的UDP(用户数据包)协议,应用层的HTTP(超文本传输)协议、DNS(域名解析)协议、FTP(文件传送)协议、SMTP(简单邮件管理)协议等等。

传统的以太网接入方案如下图,由MCU+MAC+PHY再加入网络接口实现以太网的物理连接,通过在主控芯片中植入TCP/IP协议代码实现通信及上层应用。

图3-1-1 MAC+PHY以太网方案

应用这种软件TCP/IP协议栈方式实现的比较成熟方案有ENC28J60, CS8900A,DM9000,当然也有像MM32F103这类(内部自带MAC)+PHY等方案。

由于软件协议栈操作需要主控MCU不断地响应中断,这在很大程度上占用了MCU的运算/时钟资源。经过测试发现,单线程操作的情况下,MCU的运行速度和数据的处理速度仅能满足需要,但随着线程增多,MCU的工作效率直线下降,会严重影响通信质量。

代码量方面,即便是采用轻量级的TCP/IP协议栈LWIP协议,也会为主控芯片带来超过40KB的代码量,这对于本身内存资源匮乏的单片机来说负荷过重。

再从安全性的角度,设备并入互联网之后必须考虑网络安全问题,这种软件协议栈的方式系统一旦受到复杂的恶意攻击,单片机很有可能瘫痪掉,这对系统就是致命性打击,虽然目前网络技术不断发展,各类新的加密技术试图让通信变得更加安全,但是还会出现各种各样的漏洞。

2、硬件协议栈芯片方案

硬件协议栈芯片方案如下图所示。由MCU+硬件协议栈芯片(内含MAC和PHY)直接加网络接口,便可方便的实现单片机联网,所有的处理TCP/IP协议的工作都是通过这位MCU的“小秘书”——硬件协议栈芯片来完成。

图3-2-1 硬件协议栈芯片方案

这套方案是由WIZnet首次提出,并成功推出以太网系列芯片:W5100、W5200、W5300和W5500。

所谓硬件协议栈是指通过将传统的软件TCP/IP协议栈用硬件化的逻辑门电路来实现,如下图所示。

图3-2-2 TCP/IP硬件协议栈内核原理简图

以太网芯片的内核由传输层的TCP、UDP、ICMP、IGMP等协议、网络层的IP、ARP、PPPoE等协议以及链路层的MAC构成,再加上物理层的PHY和外围的寄存器、内存、SPI接口组成了这一整套硬件化的以太网解决方案。

这套硬件TCP/IP协议栈代替了以往的MCU来处理这些中断请求,即MCU只需要处理面向用户的应用层数据即可,传输层、网络层、链路层及物理层全部由外围WIZnet的芯片完成。这套方案从硬件开销和软件开发两个方面来简化前面所述的五层网络模型,简化产品开发方案。这样一来,工程师们就不必再面对繁琐的通信协议代码,只需要了解简单的寄存器功能以及Socket编程便能完成产品开发工作的的网络功能开发部分。

由于硬件协议栈的加入协助单片机处理了几乎所有的TCP/IP协议工作,不仅极大地减少了单片机的中断次数,让单片机腾出更多资源去完成其他工作,而且硬件化的电路处理协议会更加快速、稳定。经试验测试,单线程下,该方案的通信速度是软件协议方案的10倍左右;随着线程的增加,因为硬件协议栈是通过独立的Socket进行通信,因而通信速度实现累加,而且单片机工作效率仍然会维持在高位。

代码量方面,因为这套方案主要是完成对Socket的编程以及寄存器的调用,因此仅有10K左右的代码量,远小于软件协议方案,对51以及MM32等内存很有限的单片机来说非常适用。

从成本角度来讲,硬件协议栈芯片的价格跟用MAC+PHY比起来基本差不多。而前者简单易用,用很短时间便能完成产品的开发过程。另外,官方例程库及上位机程序丰富,也缩短了测试过程,后期基本免于维护。

最后安全性方面,硬件化的逻辑门电路来处理TCP/IP协议是不可攻击的,也就是说网络攻击和病毒对它无效,这也充分弥补了网络协议安全性不足的短板。也正是因为这一优势,硬件协议栈技术在未来物联网以及智能家居领域有着广泛的发展前景,让人们尽情享受现代科技带来的乐趣的同时,免受安全问题的困扰。

当然,不可避免的硬件化的协议栈相对来说失去了软件协议栈那样的灵活性。目前只支持4个/8个Socket,不能随时开启更多Socket。但是,在嵌入式应用中8个Socket已经足够应对超过大部分的应用。

围观 821

一、引言

单片机软件开发过程中,软件调试遇到的各种问题常令初学者感到不知所措。实际上。各种仿真开发软件的程序调试基本方法和技巧大同小异,掌握正确的程序调试基本技巧。对于排查这些程序错误问题可以起到举一反三、事半功倍的效果。软件调试是单片机技术人员必须掌握的重要基本技能。

下面以单片机常用开发软件Keil为例,通过一个项目任务实例来介绍单片机软件仿真与调试的方法。

二、Keil仿真与调试

点击运行软件Keil uVision2.其调试操作步骤大体可以分为5步:

1、创建工程

在项目开发中,并不是仅有一个用户源程序就够了,还要为这个项目选择CPU型号、设置编译和调试参数。有一些项目还会有多个文件组成。因此将这些参数设置和所需要的所有文件统称为一个工程,存放于专门的工程文件夹下。这里先建立一个工程文件夹如F:\exam.

① 创建新工程。鼠标左键单击主菜单Project一>New Project.弹出。Create New Project"对话框,用鼠标选择你要保存工程的文件夹(如FAexam),输入新工程名(如"exam")。单击"保存"按键。

② 在随后弹出的CPU型号设置对话框中选择单片机的型号(如"AT89C51"),单击"确定"完成。

2、建立源程序文件并加入工程

① 鼠标左键单击菜单。File一>New新建文件。

弹出图1窗口。自动进入编辑工作模式。

<图1 源程序文件的建立与编辑

② 在文本窗口中输入和编辑用户的源程序。

【项目任务】设计一种花样彩灯程序,实现单片机P1口驱动相连的8个发光二极管依次循环点亮。

③ 单击菜单。File一>Save as.弹出文件保存对话框,选择工程文件夹("F:\exam")。输入源程序文件名(如"exam.asm"),点击"保存"按钮。

注意汇编源程序的扩展名必须为asrn,C51源程序扩展名必须为*.C.

④ 将源程序加入工程。用鼠标点击图标"Target1"前的"+"号,展开后右键单击Source Group弹出快捷菜单,点击"Add File to Group'SourceGroup 1"项弹出源程序加入工程对话框。选择刚保存的用户源程序exam.asm,点击ADD按钮加入工程,点击Close关闭对话框。

3、工程参数设置

用鼠标左键单击主菜单Project一>Options forTarget'Targetl弹出工程参数设置对话框。关于工程参数设置的内容很多,篇幅所限,这里仅介绍通常需要设置的三个参数:

① 设置CPU型号。前面已经进行了设置。

② 在设置对话框的"Target"标签下"Xtal(Mhz)"处输入单片机的晶振(如"12")如图2.

<图2单片机晶振的设置

③ 在设置对话框的"Output"标签下,选中"Create HEX file"项。用以编译生成可执行的机器码hex文件。如图3所示。该hex文件可以通过编程器写入或下载到单片机中运行。

<图3生成可执行hex文件的设置

4、编译源文件

鼠标左键单击主菜单Project一>Built target或快捷按钮编译文件。

若有语法错误,输出窗口将有相应提示信息。

双击提示信息行,光标会停留在源程序出错处。如图4所示。经检查发现:本程序第3条DJNZ指令被错误输入成了DJNA.用户可根据提示修改源程序,然后再次编译。注意。Keil具有语法检查功能,源程序中正确的指令关键词将变颜色,没变色的为输入错误,方便用户查找语法错误。

<图4源文件的编译

若编译后输出信息窗13显示"0 Errors(s),0Warning(s)",则说明源程序的语法错误已经全部排除。注意:有Errors不能Debug,也不产生HEX码,有Warning是允许的,可以运行。

5、调试程序

源程序编译通过,表明语法正确,却并不能保证该程序能够正确运行。还需要对其逻辑功能进行调试。Keil软件具有很强的软件仿真功能。

鼠标左击主菜单Debug一>Sta/Stop Debug Session子菜单或调试/编辑模式切换按钮。进入调试程序工作模式,软件窗口如图5所示。重复点击该按钮可以实现在编辑模式和调试模式之间进行切换。

<图5程序调试运行

调试程序时的程序运行控制按钮从左到右依次为复位、连续运行,暂停、单步、过程单步、执行完当前子程序、运行到光标当前行。复位按钮模拟芯片的复位,它将使程序回到最开头处执行。当程序处于停止状态时复位才有效,程序处于运行状态时停止按钮才有效。

① 为了方便观察程序调试过程中各变量和RAM单元的中间结果。点击主菜单View一>Watch&Call Stack Window和View一>Memory Window打开观察变量窗13和存储器窗1:3进行显示。由于本例还要观察P1 13的输出变化,可以点击主菜单Peripherals一>I/O-Ports一>Port 1打开I/O 13 P1的观察窗13.




② 程序调试。

程序可以单步执行或连续执行。连续执行是指一条指令执行完后接着连续立即执行下一条,中间不停止。这样程序执行的速度很快。可以看到程序执行的总体效果。即最终结果是正确或错误。但如果程序有错,则难以确认具体出错地方。例如本例中点击连续运行按钮后。P1口输出01H后便始终保持不变。这显然与花样彩灯程序的循环显示要求不符。程序运行出错,如图6所示。


<图6程序调试时的连续运行

单步执行指每执行完一条指令后即停止。等待命令执行下一行程序,此时可以观察该条指令执行后得到的实际结果。对比分析是否与预期结果一致。

借此可以找到程序中的错误原因所在。这种方式的缺点是需要时间长,排查错误效率很低。尤其当程序很大时。

因此,对于用户确认没有错误的程序段可以采用连续运行。对怀疑出错或容易出错的地方则单步执行。对比排查错误。这样调试的效率将会高一些。

本例通过单步执行。发现程序运行过程中循环变量R3的值总在250和249之间变化,而且R1、R2、R7均始终无变化,如图7所示。对比程序分析,发现出现了死循环。原因在于第1条"DJNZR3,DEL2"的转移目的地址为DEL2,应该改为DEL3.

<图7程序调试时的连续运行

回到编辑状态,修改为"DJNZ R3,DEL3",编译后再次进入调试工作模式时,发现故障已经排除。

此时P1 1:3的输出仅1位高电平。且依次向左循环移位。R1、R2、R3、R7正常递减变化。如图8所示。

<图8花样彩灯程序调试通过后的正确运行

③ 断点设置。

程序调试时。一些程序行必须满足一定的条件才能被执行到(如程序中某变量达到一定的值、按键被按下、有中断产生等),这些条件往往是异步发生或难以预先设定的。这类问题采用单步执行的方法是很难调试的。这时可使用另一种重要的调试方法一断点设置。可以使用Debug一>lnsert/RemoveBreakPoint设置或移除断点。

断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点后可以连续运行程序。一旦执行到该程序即停止,可在此观察有关变量值,对比分析程序预期理想值,以确定问题所在。

三、结束语

程序开发过程中通常情况下需要综合运用单步执行、连续执行、设置断点、观察变量等各种程序调试方法。并不断积累总结调试经验。这种程序调试能力也是衡量软件开发者水平高低的标志之一。

文章来源 :博客园

围观 843

SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。

SPI总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于 CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束 中断标志;写冲突保护;总线竞争保护等。

SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式。

SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传 输协议之一进行数据传输。如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。 SPI主模块和与之通信的外设音时钟相位和极性应该一致。

SPI接口在模式0下输出第一位数据的时刻,SPI接口有四种不同的数据传输时序,取决于CPOL和CPHL这两位的组合。图1中表现了这四种时序,时序与CPOL、CPHL的关系也可以从图中看出。

图1

CPOL是用来决定SCK时钟信号空闲时的电平,CPOL=0,空闲电平为低电平,CPOL=1时,空闲电平为高电平。CPHA是用来决定采样时刻的,CPHA=0,在每个周期的第一个时钟沿采样,CPHA=1,在每个周期的第二个时钟沿采样。

由于我使用的器件工作在模式0这种时序(CPOL=0,CPHA=0),所以将图1简化为图2,只关注模式0的时序。

图2

我们来关注SCK的第一个时钟周期,在时钟的前沿采样数据(上升沿,第一个时钟沿),在时钟的后沿输出数据(下降沿,第二个时钟沿)。首先来看主器件,主器件的输出口(MOSI)输出的数据bit1,在时钟的前沿被从器件采样,那主器件是在何时刻输出bit1的呢?bit1的输出时刻实际上在SCK信号有效以前,比 SCK的上升沿还要早半个时钟周期。bit1的输出时刻与SSEL信号没有关系。再来看从器件,主器件的输入口MISO同样是在时钟的前沿采样从器件输出的bit1的,那从器件又是在何时刻输出bit1的呢。从器件是在SSEL信号有效后,立即输出bit1,尽管此时SCK信号还没有起效。关于上面的主器件和从器件输出bit1位的时刻,可以从图3、4中得到验证。

图3

注意图3中,CS信号有效后(低电平有效,注意CS下降沿后发生的情况),故意用延时程序延时了一段时间,之后再向数据寄存器写入了要发送的数据,来观察主器件输出bit1的情况(MOSI)。可以看出,bit1(值为1)是在SCK信号有效之前的半个时钟周期的时刻开始输出的(与CS信号无关),到了SCK的第一个时钟周期的上升沿正好被从器件采样。

图4

图4中,注意看CS和MISO信号。我们可以看出,CS信号有效后,从器件立刻输出了bit1(值为1)。通常我们进行的spi操作都是16位的。图5记录了第一个字节和第二个字节间的相互衔接的过程。第一个字节的最后一位在SCK的上升沿被采样,随后的SCK下降沿,从器件就输出了第二个字节的第一位。

围观 323

对电磁干扰的设计我们主要从硬件和软件方面进行设计处理,下面就是从单片机的PCB设计到软件处理方面来介绍对电磁兼容性的处理。

一、影响EMC的因数

1、电压

电源电压越高,意味着电压振幅越大,发射就更多,而低电源电压影响敏感度。

2、频率

高频产生更多的发射,周期性信号产生更多的发射。在高频单片机系统中,当器件开关时产生电流尖峰信号;在模拟系统中,当负载电流变化时产生电流尖峰信号。

3、接地

在所有EMC题目中,主要题目是不适当的接地引起的。有三种信号接地方法:单点、多点和混合。在频率低于1MHz时,可采用单点接地方法,但不适宜高频;在高频应用中,最好采用多点接地。混合接地是低频用单点接地,而高频用多点接地的方法。地线布局是关键,高频数字电路和低电平模拟电路的接地电路尽不能混合。

4、PCB设计

适当的印刷电路板(PCB)布线对防止EMI是至关重要的。

5、电源往耦

当器件开关时,在电源线上会产生瞬态电流,必须衰减和滤掉这些瞬态电流。来自高di/dt源的瞬态电流导致地和线迹“发射”电压,高di/dt产生大范围的高频电流,激励部件和线缆辐射。流经导线的电流变化和电感会导致压降,减小电感或电流随时间的变化可使该压降最小。

二、对干扰措施的硬件处理方法

1、印刷线路板(PCB)的电磁兼容性设计

PCB是单片机系统中电路元件和器件的支撑件,它提供电路元件和器件之间的电气连接。随着电子技术的飞速发展,PCB的密度越来越高。PCB设计的好坏对单片机系统的电磁兼容性影响很大,实践证实,即使电路原理图设计正确,印刷电路板设计不当,也会对单片机系统的可靠性产生不利影响。例如,假如印刷电路板的两条细平行线靠的很近,会形成信号波形的延迟,在传输线的终端形成反射噪声。因此,在设计印刷电路板的时候,应留意采用正确的方法,遵守PCB设计的一般原则,并应符合抗干扰的设计要求。要使电子电路获得最佳性能,元器件的布局及导线的布设是很重要的。

2、输入/输出的电磁兼容性设计

在单片机系统中输进/输出也是干扰源的传导线,和接收射频干扰信号的拾检源,我们设计时一般要采取有效的措施:

①采用必要的共模/差模抑制电路,同时也要采取一定的滤波和防电磁屏蔽措施以减小干扰的进进。

②在条件许可的情况下尽可能采取各种隔离措施(如光电隔离或者磁电隔离),从而阻断干扰的传播。

3、单片机复位电路的设计

在单片机系统中,看门狗系统对整个单片机的运行起着特别重要的作用,由于所有的干扰源不可能全部被隔离或往除,一旦进进CPU干扰程序的正常运行,那么复位系统结合软件处理措施就成了一道有效的纠错防御的屏障了。常用的复位系统有以下两种:

①外部复位系统。外部“看门狗”电路可以自己设计也可以用专门的“看门狗”芯片来搭建。然而,他们各有优缺点,大部分专用“看门狗”芯片对低频“喂狗”信号不能响应,而高频“喂狗”信号都能响应,使其在低频“喂狗”信号下产生复位动作而在高频的“喂狗”信号下不产生复位动作,这样,假如程序系统陷进一个死循环,而该循环中恰巧有着“喂狗”信号的话,那么该复位电路就无法实现它的应有的功能了。然而,我们自己可以设计一个具有带通的“喂狗”电路和其他复位电路构成的系统就是一个很有效外部监控系统了。

②现在越来越多的单片机都带有自己的片上复位系统,这样用户就可以很方便的使用其内部的复位定时器了,但是,有一些型号的单片机它的复位指令太过于简单,这样也会存在象上述死循环那样的“喂狗”指令,使其失往监控作用。有一些单片机的片上复位指令就做的比较好,一般他们把“喂狗”信号做成固定格式的多条指令依顺序来执行,假如有一定错误则该“喂狗”操纵无效,这样就大大进步了复位电路的可靠性。

4、振荡器

大部分的单片机都有一个耦合于外部晶体或陶瓷谐振器的振荡器电路。在PCB上,要求外接是电容、晶体或陶瓷谐振器的引线越短越好。RC振荡器对干扰信号有潜伏的敏感性,它能产生很短的时钟周期,因而最好选晶体或陶瓷谐振器。另外,石英晶体的外壳要接地。

5、防雷击措施

室外使用的单片机系统或从室外排挤引进室内的电源线、信号线,要考虑系统的防雷击题目。常用的防雷击器件有:气体放电管、TVS(Transient Voltage Suppression)等。气体放电管是当电源的电压大于某一数值时,通常为数十V或数百V,气体击穿放电,将电源线上强冲击脉冲导进大地。TVS可以看成两个并联且方向相反的齐纳二极管,当两端电压高于某一值时导通。其特点是可以瞬态通过数百乃上千A的电流。

三、对干扰措施的软件处理方法

电磁干扰源所产生的干扰信号在一些特定的情况下(比如在一些电磁环境比较恶劣的情况下)是无法完全消除的,终极将会进进CPU处理的的核心单元,这样在一些大规模集成电路经常会受到干扰,导致不能正常工作或在错误状态下工作。特别是像RAM这种利用双稳态进行存储的器件,往往会在强干扰下发生翻转,使原来存储的“0”变为“1”,或者“1”变为“0”;一些串行传输的时序及数据会因干扰而发生改变;更严重的会破坏一些重要的数据参数等;造成的后果往往是很严重的。在这种情况下软件设计的好坏直接影响到整个系统的抗干扰能力的高低。

1、程序会由于电磁干扰大致会一下几种情况:

①程序跑飞。

这种情况是最常见的干扰结果,一般来说有一个好的复位系统或软件帧测系统即可,对整个运行系统的不会产生太大的影响。

②死循环或不正常程序代码运行。

当然这种死循环和不正常程序代码并非设计职员有意写进的,我们知道程序的指令是由字节组成的,有的是单字节指令而有的是多字节指令,当干扰产生后使得PC指针发生变化,从而使原来的程序代码发生了重组产生了不可猜测的可执行的程序代码,那么,这种错误是致命的,它会有可能会往修改重要的数据参数,有可能产生不可猜测的控制输出等一系列错误状态。

2、对重要参数储存的措施

一般情况下,我们可以采用错误检测与纠正来有效地减少或避免这种情况的出现。根据检错、纠错的原理,主要思想是在数据写进时,根据写进的数据天生一定位数的校验码,与相应的数据一起保存起来;当读出时,同时也将校验码读出,进行判决。假如出现一位错误则自动纠正,将正确的数据送出,并同时将改正以后的数据回写覆盖原来错误的数据;假如出现两位错误则产生中断报告,通知CPU进行异常处理。所有这一切动作都是靠软件设计自动完成的,具有实时性和自动完成的特点。通过这样的设计,能大大进步系统的抗干扰能力,从而进步系统的可靠性。

检错与纠错原理:

首先来看看检错和纠错的基本原理。进行差错控制的基本思想是在信息码组中以一定规则加进不同方式的冗余码,以便在信息读出的时候依靠多余的监视码或校码码来发现或自动纠正错误。

针对误码发生的特点,即错误发生的随机性和小概任性,它几乎总是随机地影响某个字节中的某一位(bit),因此,假如能够设计自动纠正一位错误,而检查两位错误的编码方式。就可以大大进步系统的可靠性。

3、对RAM和FLASH(ROM)的检测

在编制程序时我们最好是写进一些检测程序来测试RAM和FLASH(ROM)的数据代码,看有无发生错误,一旦发生要立即纠正,纠正不了的要及时给出错误指示,以便用户往处理。

另外,在编制程序时加进程序冗余是不可缺少的。在一定的地方加进三条或三条以上NOP指令对程序的重组有着很有效防止作用。同时,在程序的运行状态中要引进标志数据和检测状态,从而及时发现和纠正错误产生。

来源:网络(版权归原著作者所有)

围观 456

学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。

但是,许多的学习者(包括在校学生),他们总不得要领,从一开始学习时的热情高涨,到最后的沮丧放弃,使得大家对单片机产生了既爱又怕的感觉。

学习单片机并不象学习传统数字电路或模拟电路那样比较直观,原因是除了“硬件”之外还存在一个“软件”的因素。正是这个“软件”因素的存在,使得许多初学者怎么也弄不懂单片机的工作过程,他们怎么也不明白为什么将几个数送来送去,就能控制一盏灯亮/灭?能控制一个电机变速?由此对单片机产生一种“神奇”、“敬畏”甚至“恐惧”感,阻碍了学习单片机的热情与兴趣,这就有社会上“单片机难学”一说。

笔者多年来与众多的电子爱好者、在校学生打过交道,深知他们学习单片机中碰到的难处,况且作者本人也是从一位电子爱好者成长为工程师的,此过程自然少不了学习、探索、实践、进步这样一条规律,因此深切地知道,学单片机难,主要是不得要领,难以入门。一旦找到学习的捷径,入了门,能初步掌握编程技术并产生实际效果,那么必然信心大增。接下来,再向新的深度、广度进军时,心里也不那么焦虑,比较坦然了,能够一步一个脚印下去扩展自己的知识面。这里根据笔者的经验谈谈学习方法、技巧及如何在较短时间内学会单片机。

学习单片机的最有效方法是理论与实践并重

对一个初学单片机的人来说,如果按教科书式的学法,上来就是一大堆指令、名词,学了半天还搞不清这些指令起什么作用,能够产生什么实际效果,那么也许用不了几天就会觉得枯燥乏味而半途而废。所以学习与实践结合是一个好方法,边学习、边演练,循序渐进,这样用不了几次就能将用到的指令理解、吃透、扎根于脑海,甚至“根深蒂固”。也就是说,当你此次学习完某几条指令后(一次数量不求多,只求懂),接下去就该做实验了,通过实验,使你感受刚才的指令产生了控制效果,眼睛看得见(灯光)、耳朵听得到(声音),更能深刻理解指令是怎样转化成信号去控制电子产品的。说句过分的话,单片机与其说是学出来的,还不如说是做实验练出来的,何况做实验本身也是一种学习过程。因此边学边练的学习方法,效果特别好,许多读者经3~6个月的学习已能开发简单的产品了(如霓红灯广告牌控制、累加计数器等)。

学习单片机要合理安排学习时间持之以恒

学习单片机可不能“三天打鱼、二天晒网”,要有持之以恒的毅力与决心,学习完几条指令后,就应及时做实验,融会贯通,而不要等几天或几个星期有时间后再做实验,这样效果不好甚至前学后忘。另外要有打“持久战”的心理准备,不要兴趣来时学上几天,无兴趣时凉上几星期。学习单片机很重要的一点就是持之以恒。

学习单片机要使用循环学习法使之根深蒂固

笔者曾在其它刊物举办过《手把手教你学单片机》讲座,该讲座入门起点低,很多朋友觉得好学、易学,很快就能将讲座从头至尾学完、学懂,但过了几个月,在开发产品时对指令的具体作用就有些淡忘了。根据现代科学的研究,对只短暂学过一遍的知识,充其量只比浮光掠影稍好。因此,较好的方法是,过一段时间后(1~2个月)再重新做一遍,这样反复循环几次就能彻底弄懂消化,永不忘却。有道是:若人生能细看《水浒传》10遍,那么里面的故事内容、人物场情将永生不忘。

学习单片机要进行适当投资购买实验器材及书籍资料

单片机技术是一门含金量高的技术,一旦学会后,它给你带来的效益回报当然也高,无论是应聘求职还是自起炉灶开厂办公司,其前景是光明无限。因此在学习时要舍得适当投资购买必要的学习、实验器材,另外还要经常去科技图书店看看,购买一些适合自己学习、提高的书籍。总之,春天不播种哪来秋天的收获?考虑到学习成本,对初学者可采用“程序完成后软件仿真→单片机烧录程序→试验板通电实验”的方法(现在的快闪型单片机其程序可烧写1000次以上),这样整套实验器材(不包括PC机)只有几百元,对大部分已工作的爱好者来说都有这个能力承受。而经济条件较好的读者可考虑使用在线仿真器(ICE)进行实验,这样学习时直观性更好。

总之这里所谈的就是作者的亲身体验。我们希望以最实用的方法,最易入门的手法,将初学者领进单片机世界的大门里,使这些仅稍懂硬件原理的人通过实践能理解软件的作用,让他们知道在单片机组成的系统中硬件与软件的区分并不绝对,硬件能做的工作一般情况下软件也能完成,软件的功能也可用硬件替代。等初步学会了单片机软件设计后,可将通常由硬件完成的工作交由软件实现,这样,系统的体积、功耗、成本将大大降低,而功能得到提升与增强,使习惯于传统电路设计的人对单片机产生一种妙不可言的相见恨晚之感,感觉到真正找到了一种理想化的器件,真正感受、体会到现代单片微型计算机的强大作用,从而投身于单片机的领域中。只要你肯努力、下功夫、多实践,一定会成功的。

文章来源: 玩转单片机

围观 320

一、GPIO简介

I/O(Input/Output)接口是一颗微控制器必须具备的最基本外设功能。通常在ARM里,所有I/O都是通用的,称为GPIO(General Purpose Input/Output)。每个GPIO端口包含8个管脚,如PA端口是PA0~PA7。GPIO模块支持多个可编程输入/输出管脚(具体取决于与GPIO复用的外设的使用情况)。GPIO模块包含以下特性:

1)可编程控制GPIO中断

a. 屏蔽中断发生

b. 边沿触发(上升沿、下降沿、双边沿)

c. 电平触发(高电平、低电平)

2)输入/输出可承受5V

3)在读和写操作中通过地址线进行位屏蔽

4)可编程控制GPIO管脚配置:

a. 弱上拉或弱下拉电阻

b. 2mA、4mA、8mA驱动,以及带驱动转换速率(Slew Rate)控制的8mA驱动

c. 开漏使能

d. 数字输入使能

二、GPIO的各种模式

GPIO管脚可以被配置为多种工作模式,其中有3种比较常用:高阻输入、推挽输出、开漏输出。

1、高阻输入(Input)

图1.1 GPIO高阻输入模式结构示意图

为减少信息传输线的数目,大多数计算机中的信息传输线采用总线形式,即凡要传输的同类信息都在同一组传输线,且信息是分时传送的。在计算机中一般有三组总线,即数据总线、地址总线和控制总线。为防止信息相互干扰,要求凡挂到总线上的寄存器或存储器等,它的输入输出端不仅能呈现0、1两个信息状态,而且还应能呈现第三个状态----高阻抗状态,即此时好像它们的输出被开关断开,对总线状态不起作用,此时总线可由其他器件占用。三态缓冲器即可实现上述功能,它除具有输入输出端之外,还有一控制端。

如图1.1所示,为GPIO管脚在高阻输入模式下的等效结构示意图。这是一个管脚的情况,其它管脚的结构也是同样的。输入模式的结构比较简单,就是一个带有施密特触发输入(Schmitt-triggered input)的三态缓冲器(U1),并具有很高的输入等效阻抗。施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的矩形脉冲信号。执行GPIO管脚读操作时,在读脉冲(Read Pulse)的作用下会把管脚(Pin)的当前电平状态读到内部总线上(Internal Bus)。在不执行读操作时,外部管脚与内部总线之间是隔离的。

2、推挽输出(Output)

图1.2 GPIO推挽输出模式结构示意图

推挽输出原理:在功率放大器电路中大量采用推挽放大器电路,这种电路中用两只三极管构成一级放大器电路,两只三极管分别放大输入信号的正半周和负半周,即用一只三极管放大信号的正半周,用另一只三极管放大信号的负半周,两只三极管输出的半周信号在放大器负载上合并后得到一个完整周期的输出信号。

推挽放大器电路中,一只三极管工作在导通、放大状态时,另一只三极管处于截止状态,当输入信号变化到另一个半周后,原先导通、放大的三极管进入截止,而原先截止的三极管进入导通、放大状态,两只三极管在不断地交替导通放大和截止变化,所以称为推挽放大器(armjishu.com)。

如图1.2所示,为GPIO管脚在推挽输出模式下的等效结构示意图。U1是输出锁存器,执行GPIO管脚写操作时,在写脉冲(Write Pulse)的作用下,数据被锁存到Q和/Q。T1和T2构成CMOS反相器,T1导通或T2导通时都表现出较低的阻抗,但T1和T2不会同时导通或同时关闭,最后形成的是推挽输出。在推挽输出模式下,GPIO还具有回读功能,实现回读功能的是一个简单的三态门U2。注意:执行回读功能时,读到的是管脚的输出锁存状态,而不是外部管脚Pin的状态。

3、开漏输出(OutputOD)

图1.3 GPIO开漏输出结构示意图

如图1.3所示,为GPIO管脚在开漏输出模式下的等效结构示意图。开漏输出和推挽输出相比结构基本相同,但只有下拉晶体管T1而没有上拉晶体管。同样,T1实际上也是多组可编程选择的晶体管。开漏输出的实际作用就是一个开关,输出“1”时断开、输出“0”时连接到GND(有一定内阻)。回读功能:读到的仍是输出锁存器的状态,而不是外部管脚Pin的状态。因此开漏输出模式是不能用来输入的。

开漏输出结构没有内部上拉,因此在实际应用时通常都要外接合适的上拉电阻(通常采用4.7~10kΩ)。开漏输出能够方便地实现“线与”逻辑功能,即多个开漏的管脚可以直接并在一起(不需要缓冲隔离)使用,并统一外接一个合适的上拉电阻,就自然形成“逻辑与”关系。开漏输出的另一种用途是能够方便地实现不同逻辑电平之间的转换(如3.3V到5V之间),只需外接一个上拉电阻,而不需要额外的转换电路。典型的应用例子就是基于开漏电气连接的I2C总线。

4、钳位二极管

GPIO内部具有钳位保护二极管,如图1.4所示。其作用是防止从外部管脚Pin输入的电压过高或者过低。VDD正常供电是3.3V,如果从Pin输入的信号(假设任何输入信号都有一定的内阻)电压超过VDD加上二极管D1的导通压降(假定在0.6V左右),则二极管D1导通,会把多于的电流引到VDD,而真正输入到内部的信号电压不会超过3.9V。同理,如果从Pin输入的信号电压比GND还低,则由于二极管D2的作用,会把实际输入内部的信号电压钳制在-0.6V左右。

图1.4 GPIO钳位二极管示意图

假设VDD=3.3V,GPIO设置在开漏模式下,外接10kΩ上拉电阻连接到5V电源,在输出“1”时,我们通过测量发现:GPIO管脚上的电压并不会达到5V,而是在4V上下,这正是内部钳位二极管在起作用。虽然输出电压达不到满幅的5V,但对于实际的数字逻辑通常3.5V以上就算是高电平了(armjishu.com)。

图1.5 解决开漏模式上拉电压不足的方法

如果确实想进一步提高输出电压,一种简单的做法是先在GPIO管脚上串联一只二极管(如1N4148),然后再接上拉电阻。参见图1.5,框内是芯片内部电路。向管脚写“1”时,T1关闭,在Pin处得到的电压是3.3+VD1+VD3=4.5V,电压提升效果明显;向管脚写“0”时,T1导通,在Pin处得到的电压是VD3=0.6V,仍属低电平

围观 1136

页面

订阅 RSS - 单片机