• 单片机MCU如何实现让部分代码运行在RAM中?看这里

     MCU 异于 资源丰富的linux 平台。 MCU(如: 基于Cortex V6M 的Cortex M0+ 等) Code 通常运行在内嵌Flash 中。 在某些特定应用场合,需要将部分函数运行于RAM 中。 昨天,为解决次问题,实现了一种解法,具体做法如下: 1. 实现要运行在RAM的 routine, 本routine 使用纯汇编实现, 如: __asm void program_word2addr(uint32_t addr, uint32_t data) { push {r3, r4, r5, lr} ;save some regsiters /*your code for this routine*/ pop {r3, r4, r5, pc} } 2. 编译时,采用code 与运行位置无关的编译选项 如 (Keil --apcs /ropi/rwpi), 生成 *.axf; 3. 通过fromelf -c 将生成 *.axf 反汇编,找到对应program_word2addr 实现部分, 并将routine 对应的binary code Copy 到所要应用的 Code 中,以只读数组的形式出现: 如: const staic uint16_t s_flashProg2AddressCode[16] = {...., ....} 4. 定义 一个全局数组, 如 static uint16_t g_code[16], size正好等于 s_flashProg2AddressCode的长度; 5. 定义一个函数指针, 如 static void (*callFlashPrg2Address)(uint32_t addr, uint32_t data) 6. 定义一个函数实现将Code 运行与 RAM如: void run_prgcode_onram(uint32_t addr, uint32_t data) { memcpy(g_code,s_flashProg2AddressCode,32 ); callFlashPrg2Address = (void (*)(uint32_t addr, uint32_t data))((uin32_t)g_code + 1); callFlashPrg2Address (address, data); } run_prgcode_onram, 便可以将program_word2addr 运行于RAM中。 callFlashPrg2Address = (void (*)(uint32_t addr, uint32_t data))((uin32_t)g_code + 1); +1 的目的,时由于运行平台为 Cortex V6M , 采用的thumb指令集,根据ARM Spec 要 求完成。 callFlashPrg2Address (address, data); 则是实现RAM运行program_word2addr 的关键所在。

    时间:2018-08-14 关键词: MCU 单片机 RAM

  • 关于SPI-Flash的一些基础知识

     1.不同的SPIFLASH芯片可能会提供的擦除方式:扇区擦除(4KBytes),半块擦除(32KBytes),块擦除(64KBytes),片擦除。 2.不同的SPIFLASH芯片可能会提供的编程方式(也就是写数据):页编程(256Bytes),扇区编程(4KBytes)。 3.SPIFLASH如果擦除过,在往里面写0xFF这样的数据意义不大,因为它的特性就是擦除后数据就是0xFF。 4.写入flash时,只能把数据(bit)从1该为0。 5.传统的EEPROM的特点就是可以随机访问和修改任何一个字节,可以往每个bit中写入0或1。而写入flash时,只能把数据(bit)从1该为0。但是传统的EEPROM容量因成本的缘故收到限制,绝少有超过有512K的。 6.Nor Flash容量相对小,成本高,基本没坏块,数据线和地址线分开,可以实现随机寻址,读取任何一个字节,擦除任然要按块来擦。NAND FLASH容量大,成本低,坏块经常出现,但可以标记坏块,使软件跳过,数据线和地址线复用,按块擦除按页读取。

    时间:2018-08-14 关键词: Flash spi

  • 单片机MCU相关基础知识整理篇

     1.MCU有串口外设的话,在加上电平转换芯片,如MAX232,SP3485就是RS232和RS485接口了。 2.RS485采用差分信号负逻辑,+2~+6V表示0,-6~-2表示1。有两线制和四线制两种接线,四线制是全双工通讯方式,两线制是半双工通讯方式。在RS485一般采用主从通讯方式,即一个主机带多个从机。 3.Modbus是一种协议标准,可以支持多种电气接口,如RS232,RS485,也可以在各种介质上传输,如双绞线,光纤,无线。 4.很多MCU的串口都开始自带FIFO,收发FIFO主要是为了解决串口收发中断过于频繁而导致CPU的效率不高的问题。如果没有FIFO,则没收发一个数据都要中断处理一次,有了FIFO,可以在连续收发若干个数据(根据FIFO的深度而定)后才产生一次中断去处理数据,大大提高效率。 5.有些工程师在调试自己的系统时一出现系统跑飞,就马上引入看门狗来解决问题,而没有思想程序为什么会跑飞?程序跑飞可能是程序本身的bug,也可能是硬件电路的问题(本身就是易受干扰或自己就是干扰源)。通常建议在调试自己的系统时,先不加看门狗,等完全调试稳定了,在补上(危机产品安全,人身安全的除外)。 6.如何区分有源蜂鸣器和无源蜂鸣器? 从外观上看,如将两种蜂鸣器的引脚都朝上放置时,可以看出绿色电路板的一种是源蜂鸣器,没有电路板而用黑胶密封的一种是有源蜂鸣器。 有源蜂鸣器直接接上额定电源就可以连续发声,而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路上才能发声。 7.电压比较器的用途主要是波形的产生和变换,模拟电路到数字电路的接口。 8.低功耗唤醒的常用方式:处理器进入低功耗后就停止了很多活动,当出现一个中断时,可以唤醒处理器,使其从低功耗模式返回到正常运行模式。因此在进入低功耗模式之前,必须配置莫个片内外设的中断,并允许其在低功耗模式下继续工作。如果不这样,只有复位和重新上电才能结束低功耗模式。处理器唤醒后首先执行中断服务程序,退出后接着执行主程序中的代码。 9.触摸屏的特征: 1)透明,直接影响到触摸屏的视觉效果。从这一点看红外线技术触摸屏和表面声波触摸屏由于只隔了一层纯玻璃,视觉效果突出。而很多触摸屏是很多层的复合薄膜,仅用透明一点来概括它的视觉效果是不够的,还可以包括色彩失真度,反光性,清晰度。色彩失真度也就是图中的最大色彩失真度,自然是越小越好。反光性主要是指由于镜面反射造成图像上重叠后产生的光影,如人影。大多数存在反光性的触摸屏提供另外一种型号,磨砂面触摸屏,也叫防眩型。 2)触摸屏是据对坐标系统,也就是不管在什么情况下,同一点的输出数据时稳定的,如果不稳定,就会定位不准,也就是触摸屏最怕的问题:漂移。技术原理上凡是不能保证同一点触摸每一次采样数据相同的触摸屏都免不了漂移问题,目前有漂移现象的只有电容触摸屏。 10.注册中断服务函数:中断服务函数已经编写好,但当中断事件发生时,CPU还是无法找到它,因为我们还缺少最后一步:注册中断服务函数。注册有两种方法:一是直接利用中断注册函数,优点是操作简单,可移植性好,缺点是由于把中断向量表重新映射到SRAM中而导致执行效率下降:还有一种是需要修改启动文件,优点效率很高,确定可移植性不高。 11.很多的MCU提供数字电源VDD/GND和模拟电源VDDA/GNDA。通常建议是采用两路不同的3.3V电源供电。但为了节省成本,也可以采用单路3.3V电源,但VDDA/GNDA要通过电感从VDD/GND分离出来。一般GNDA和GND最终还是要连接在一起的,建议用一个绕线电感连接并且接点尽可能靠近芯片(电感最好放置在PCB背面)。

    时间:2018-08-14 关键词: MCU 单片机

  • 关于C语言内存的一些理解

     内存这个大话题 key:心里一定要有内存的逻辑图。 程序是什么? 程序 = 代码 + 数据 代码放在Flash中代码段,可变的数据(全局变量、局部变量)放在内存中。 运行程序的目的是什么? 得到运行结果; 关注运行过程;既要结果又要过程; 为什么需要内存? 程序中有可变数据(全局变量、局部变量),这些可变数据就是放在内存中的。 内存如何管理? 每个内存单元都有唯一的地址,通过寻址来管理内存。 关键点 一个字节为一个内存单元,一个内存单元有一个内存地址。 C语言是如何操作内存的? 定义变量时,编译器自动的申请一块内存供我们使用。 管理内存的各种方式? 数组、结构体、栈(FILO)、堆(大内存)

    时间:2018-08-08 关键词: C语言

  • 单片机学习记录——开发总流程

     开发总流程 1.打开keil,建立新的工程。 2.新建 .c 文件和 .h 文件,再把.c文件添加到工程中。 3.在新建的.c文件中编辑c代码就可以了。 4.编译程序,生成.hex可执行文件。 所需查看的文档 查看原理图,了解硬件如何接线,知道控制哪几个IO口 查看单片机的datasheet和各个外设芯片的datasheet,了解如何编程,尤其是外设芯片的工作时序。 如何烧录程序至单片机? 答:编译编写好的单片机程序,生成.hex文件,打开烧录软件,选择单片机型号和COM端口,再选择.hex文件,点击下载,然后打开开发板的电源。至此,程序就已烧录进单片机。

    时间:2018-08-08 关键词: 单片机 单片机开发

  • 教你如何在短时间内快速掌握一款新的MCU

    任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址方式基本上是类似的。因此,对于任何一款MCU,主要应从如下的几个方面来理解和掌握: * MCU的特点:要了解一款MCU,首先需要知道就是其ROM空间、RAM空间、IO口数量、定时器数量和定时方式、所提供的外围功能模块(Peripheral Circuit)、中断源、工作电压及功耗等等。 * 了解这些MCU 特点后,接下来第一步就是将所选MCU的功能与实际项目开发的要求的功能进行对比,明确那些资源是目前所需要的,那些是本项目所用不到的。对于项目中需要用到的而所选MCU不提供的功能,则需要认真理解MCU的相关资料,以求用间接的方法来实现,例如,所开发的项目需要与PC机COM口进行通讯,而所选的MCU不提供UART口,则可以考虑用外部中断的方式来实现; * 对于项目开发需要用到的资源,则需要对其手册进行认真的理解和阅读,而对于不需要的功能模块则可以忽略或浏览即可。对于MCU学习来讲,应用才是关键,也是最主要的目的。 * 明确了MCU的相关功能后,接下来就可以开始编程了。对于初学者或初次使用此款MCU的设计者来说,可能会遇到很多对MCU的功能描述不明确的地方,对于此类问题,可以通过两种方法来解决,一种是编写特别的验证程序来理解资料所述的功能;另一种则可以暂时忽略,程序设计中则按照自己目前的理解来编写,留到调试时去修改和完善。前一种方法适用于时间较宽松的项目和初学者,而后一种方法则适合于具有一定MCU开发经验的人或项目进度较紧迫的情况; * 指令系统千万不要特别花时间去理解。指令系统只是一种逻辑描述的符号,只有在编程时根据自己的逻辑和程序的逻辑要求来查看相关的指令即可,而且随着编程的进行,对指令系统也会越来越熟练,甚至可以不自觉地记忆下来; MCU的基本功能: 对于绝大多数MCU,下列功能是最普遍也是最基本的,针对不同的MCU,其描述的方式可能会有区别,但本质上是基本相同的: * Timer(定时器):Timer的种类虽然比较多,但可归纳为两大类:一类是固定时间间隔的Timer,即其定时的时间是由系统设定的,用户程序不可控制,系统只提供几种固定的时间间隔给用户程序进行选择,如32Hz,16Hz,8Hz等,此类Timer在4位MCU中比较常见,因此可以用来实现时钟、计时等相关的功能;另一类则是Programmable Timer(可编程定时器),顾名思义,该类Timer的定时时间是可以由用户的程序来控制的,控制的方式包括:时钟源的选择、分频数(Prescale)选择及预制数的设定等,有的MCU三者都同时具备,而有的则可能是其中的一种或两种。此类Timer应用非常灵活,实际的使用也千变万化,其中最常见的一种应用就是用其实现PWM输出(具体的应用,后续会有特别的介绍)。由于时钟源可以自由选择,因此,此类Timer一般均与Event Counter(事件计数器)合在一起; * IO口:任何MCU都具有一定数量的IO口,没有IO口,MCU就失去了与外部沟通的渠道。根据IO口的可配置情况,可以分为如下几种类型: 1.纯输入或纯输出口:此类IO口有MCU硬件设计决定,只能是输入或输出,不可用软件来进行实时的设定; 2.直接读写IO口:如MCS-51的IO口就属于此类IO口。当执行读IO口指令时,就是输入口;当执行写IO口指令则自动为输出口 3.程序编程设定输入输出方向的:此类IO口的输入或输出由程序根据实际的需要来进行设定,应用比较灵活,可以实现一些总线级的应用, 如I2C 总线,各种LCD、LED Driver 的控制 总线等; 对于IO口的使用,重要的一点必须牢记的是:对于输入口,必须有明确的电平信号,确保不能浮空(可以通过增加上拉或下拉电阻来实现);而对于输出口,其输出的状态电平必须考虑其外部的连接情况,应保证在Standby或静态状态下不存在拉电流或灌电流。 * 外部中断:外部中断也是绝大多数MCU所具有的基本功能,一般用于信号的实时触发,数据采样和状态的检测,中断的方式由上升沿、下降沿触发和电平触发几种。外部中断一般通过输入口来实现,若为IO口,则只有设为输入时其中断功能才会开启;若为输出口,则外部中断功能将自动关闭(ATMEL的ATiny系列存在一些例外,输出口时也能触发中断功能)。外部中断的应用如下: ** 外部触发信号的检测:一种是基于实时性的要求,比如可控硅的控制,突发性信号的检测等;而另一种情况则是省电的需要; ** 信号频率的测量;为了保证信号不被遗漏,外部中断是最理想的选择; ** 数据的解码:在遥控应用领域,为了降低设计的成本,经常需要采用软件的方式来对各种编码数据进行解码,如Manchester和PWM编码的解码; ** 按键的检测和系统的唤醒:对于进入Sleep状态的MCU,一般需要通过外部中断来进行唤醒,最基本的形式则是按键,通过按键的动作来产生电平的变化; * 通讯接口:MCU所提供的通讯接口一般包括SPI接口,UART,I2C接口等,其分别描述如下: ** SPI接口:此类接口是绝大多数MCU都提供的一种最基本通讯方式,其数据传输采用同步时钟来控制,信号包括:SDI(串行数据输入)、SDO(串行数据输出)、SCLK(串行时钟)及Ready信号;有些情况下则可能没有Ready信号;此类接口可以工作在Master方式或Slave方式下,通俗说法就是看谁提供时钟信号,提供时钟的一方为Master,相反的一方则为Slaver; ** UART(Universal Asynchronous Receive Transmit):属于最基本的一种异步传输接口,其信号线只有Rx和Tx两条,基本的数据格式为:Start Bit + Data Bit(7-bits/8-bits) + Parity Bit(Even, Odd or None) + Stop Bit(1~2Bit)。一位数据所占的时间称为Baud Rate(波特率)。对于大多数的MCU来讲,数据为的长度、数据校验方式(奇校验、偶校验或无校验)、停止位(Stop Bit)的长度及Baud Rate是可以通过程序编程进行灵活设定。此类接口最常用的方式就是与PC机的串口进行数据通讯。 ** I2C接口:I2C是由Philips开发的一种数据传输协议,同样采用2根信号来实现:SDAT(串行数据输入输出)和SCLK(串行时钟)。其最大的好处是可以在此总线上挂接多个设备,通过地址来进行识别和访问;I2C总线的一个最大的好处就是非常方便用软件通过IO口来实现,其传输的数据速率完全由SCLK来控制,可快可慢,不像UART接口,有严格的速率要求。 * Watchdog(看门狗定时器):Watchdog也是绝大多数MCU的一种基本配置(一些4位MCU可能没有此功能),大多数的MCU的Watchdog只能允许程序对其进行复位而不能对其关闭(有的是在程序烧入时来设定的,如Microchip PIC系列MCU),而有的MCU则是通过特定的方式来决定其是否打开,如Samsung的KS57系列,只要程序访问了Watchdog寄存器,就自动开启且不能再被关闭。一般而言watchdog的复位时间是可以程序来设定的。Watchdog的最基本的应用是为MCU因为意外的故障而导致死机提供了一种自我恢复的能力。 MCU程序的编写: MCU的程序的编写与PC下的程序的编写存在很大的区别,虽然现在基于C的MCU开发工具越来越流行,但对于一个高效的程序代码和喜欢使用汇编的设计者来讲,汇编语言仍然是最简洁、最有效的编程语言。对于MCU的程序编写,其基本的框架可以说是大体一致的,一般分为初始化部分(这是MCU程序设计与PC最大的不同),主程序循环体和中断处理程序三大部分(见图1 a 和 b),其分别说明如下: * 初始化:对于所有的MCU程序的设计来讲,出世化是最基本也是最重要的一步,一般包括如下内容: ** 屏蔽所有中断并初始化堆栈指针:初始化部分一般不希望有任何中断发生; ** 清除系统的RAM区域和显示Memory:虽然有时可能没有完全的必要,但从可靠性及一致性的角度出发,特别是对于防止意外的错误,还是建议养成良好的编程习惯; ** IO口的初始化:根据项目的应用的要求,设定相关IO口的输入输出方式,对与输入口,需要设定其上拉或下拉电阻;对于输出口,则必须设定其出世的电平输出,以防出现不必要的错误; ** 中断的设置:对于所有项目需要用到的中断源,应该给予开启并设定中断的触发条件,而对于不使用的多余的中断,则必须给予关闭; ** 其他功能模块的初始化:对于所有需要用到的MCU的外围功能模块,必须按项目的应用的要求进行相应的设置,如UART的通讯,需要设定Baud Rate,数据长度,校验方式和Stop Bit的长度等,而对于Programmer Timer,则必须设置其时钟源,分频数及Reload Data等; ** 参数的出世化:完成了MCU的硬件和资源的出世化后,接下来就是对程序中使用到的一些变量和数据的初始化设置,这一部分的初始化需要根据具体的项目及程序的总体安排来设计。对于一些用EEPROM来保存项目预制数的应用来讲,建议在初始化时将相关的数据拷贝到MCU的RAM,以提高程序对数据的访问速度,同时降低系统的功耗(原则上,访问外部EEPROM都会增加电源的功耗)。 * 主程序循环体:大多数MCU是属于长时间不间断运行的,因此其主程序体基本上都是以循环的方式来设计,对于存在多种工作模式的应用来讲,则可能存在多个循环体,相互之间通过状态标志来进行转换。对于主程序体,一般情况下主要安排如下的模块: ** 计算程序:计算程序一般比较耗时,因此坚决反对放在任何中断中处理,特别是乘除法运算; ** 实时性要求不高或没有实时性要求的处理程序; ** 显示传输程序:主要针对存在外部LED、LCD Driver的应用; * 中断处理程序:中断程序主要用于处理实时性要求较高的任务和事件,如,外部突发性信号的检测,按键的检测和处理,定时计数,LED显示扫描等。一般情况下,中断程序应尽可能保证代码的简洁和短小,对于不需要实时去处理的功能,可以在中断中设置触发的标志,然后由主程序来执行具体的事务――这一点非常重要,特别是对于低功耗、低速的MCU来讲,必须保证所有中断的及时响应。 * 对于不同任务体的安排,不同的MCU其处理的方法也有所不同。例如,对于低速、低功耗的MCU(Fosc=32768Hz)应用,考虑到此类项目均为手持式设备和采用普通的LCD显示,对按键的反应和显示的反应要求实时性较高,应此一般采用定时中断的方式来处理按键的动作和数据的显示;而对于高速的MCU,如Fosc>1MHz的应用,由于此时MCU有足够的时间来执行主程序循环体,因此可以只在相应的中断中设置各种触发标志,并将所有的任务放在主程序体中来执行; * 在MCU的程序设计中,还需要特别注意的一点就是:要防止在中断和主程序体中同时访问或设置同一个变量或数据的情况。有效的预防方法是,将此类数据的处理安排在一个模块中,通过判断触发标志来决定是否执行该数据的相关操作;而在其他的程序体中(主要是中断),对需要进行该数据的处理的地方只设置触发的标志。――这可以保证数据的执行是可预知和唯一的。

    时间:2018-08-07 关键词: MCU 单片机

  • 复习!PWM基础概念知识

     PWM脉宽调制,是靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率。而输出频率的变化可通过改变此脉冲的调制周期来实现。这样,使调压和调频两个作用配合一致,且于中间直流环节无关,因而加快了调节速度,改善了动态性能。 由于输出等幅脉冲只需恒定直流电源供电,可用不可控整流器取代相控整流器,使电网侧的功率因数大大改善。利用PWM逆变器能够抑制或消除低次谐波。加上使用自关断器件,开关频率大幅度提高,输出波形可以非常接近正弦波。

    时间:2018-08-07 关键词: pwm

  • 单片机上拉电阻、下拉电阻的详解和选取

     一、定义 1、上拉就是将不确定的信号通过一个电阻嵌位在高电平!“电阻同时起限流作用”!下拉同理! 2、上拉是对器件注入电流,下拉是输出电流 3、弱强只是上拉电阻的阻值不同,没有什么严格区分 4、对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路输出电流通道。 二、拉电阻作用 1、一般作单键触发使用时,如果IC本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。 2、数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定! 3、一般说的是I/O端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接,I/O端口的输出类似与一个三极管的C,当C接通过一个电阻和电源连接在一起的时候,该电阻成为上C拉电阻,也就是说,如果该端口正常时为高电平;C通过一个电阻和地连接在一起的时候,该电阻称为下拉电阻,使该端口平时为低电平,作用吗:比如:“当一个接有上拉电阻的端口设为输入状态时,他的常态就为高电平,用于检测低电平的输入”。 4、上拉电阻是用来解决总线驱动能力不足时提供电流的。一般说法是拉电流,下拉电阻是用来吸收电流的,也就是我们通常所说的灌电流 5、接电阻就是为了防止输入端悬空 6、减弱外部电流对芯片产生的干扰 7、保护cmos内的保护二极管,一般电流不大于10mA 8、通过上拉或下拉来增加或减小驱动电流 9、改变电平的电位,常用在TTL-CMOS匹配 10、在引脚悬空时有确定的状态 11、增加高电平输出时的驱动能力。 12、为OC门提供电流 三、上拉电阻应用原则 1、当TTL电路驱动COMS电路时,如果TTL电路输出的高电平低于COMS电路的最低高电平(一般为3。5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。…………………….. 2、OC门电路“必须加上拉电阻,才能使用”。 3、为加大输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。 4、在COMS芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻产生降低输入阻抗,提供泄荷通路。 5、芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限增强抗干扰能力。 6、提高总线的抗电磁干扰能力。管脚悬空就比较容易接受外界的电磁干扰。 7、长线传输中电阻不匹配容易引起反射波干扰,加上下拉电阻是电阻匹配,有效的抑制反射波干扰。 8、在数字电路中不用的输入脚都要接固定电平,通过1k电阻接高电平或接地。 四、上拉电阻阻值选择原则 1、从节约功耗及芯片的灌电流能力考虑应当足够大;电阻大,电流小。 2、从确保足够的驱动电流考虑应当足够小;电阻小,电流大。 3、对于高速电路,过大的上拉电阻可能边沿变平缓。综合考虑 以上三点,通常在1k到10k之间选取。对下拉电阻也有类似道理。 对上拉电阻和下拉电阻的选择应“结合开关管特性和下级电路的输入特性进行设定,主要需要考虑以下几个因素”: 1。驱动能力与功耗的平衡。以上拉电阻为例,一般地说,上拉电阻越小,驱动能力越强,但功耗越大,设计是应注意两者之间的均衡。 2。下级电路的驱动需求。同样以上拉电阻为例,当输出高电平时,开关管断开,上拉电阻应适当选择以能够向下级电路提供足够的电流。 3。高低电平的设定。不同电路的高低电平的门槛电平会有不同,电阻应适当设定以确保能输出正确的电平。以上拉电阻为例,当输出低电平时,开关管导通,上拉电阻和开关管导通电阻分压值应确保在零电平门槛之下。 4。频率特性。以上拉电阻为例,上拉电阻和开关管漏源级之间的电容和下级电路之间的输入电容会形成“RC延迟”,电阻越大,延迟越大。上拉电阻的设定应考虑电路在这方面的需求。 下拉电阻的设定的原则和上拉电阻是一样的。 OC门输出高电平时是一个高阻态,其上拉电流要由上拉电阻来提供,设输入端每端口不大于100uA,设输出口驱动电流约500uA,标准工作电压是5V,输入口的高低电平门限为0.8V(低于此值为低电平);2V(高电平门限值)。 选上拉电阻时:500uA x 8.4K= 4.2即选大于8.4K时输出端能下拉至0.8V以下,此为最小阻值,再小就拉不下来了。如果输出口驱动电流较大,则阻值可减小,保证下拉时能低于0.8V即可。当输出高电平时,忽略管子的漏电流,两输入口需200uA,200uA x15K=3V即上拉电阻压降为3V,输出口可达到2V,此阻值为最大阻值,再大就拉不到2V了。选10K可用。【最大压降/最大电流、最小压降/最小电流】 COMS门的可参考74HC系列设计时管子的漏电流不可忽略,IO口实际电流在不同电平下也是不同的,上述仅仅是原理,一句话概括为:“输出高电平时要喂饱后面的输入口,输出低电平不要把输出口喂撑了”(否则多余的电流喂给了级联的输入口,高于低电平门限值就不可靠了) 此外,还应注意以下几点: A、要看输出口驱动的是什么器件,如果该器件需要高电压的话,而输出口的输出电压又不够,就需要加上拉电阻。 B、如果有上拉电阻那它的端口在默认值为高电平,你要控制它必须用低电平才能控制如三态门电路三极管的集电极,或二极管正极去控制把上拉电阻的电流拉下来成为低电平。反之, C、尤其用在接口电路中,为了得到确定的电平,一般采用这种方法,以保证正确的电路状态,以免发生意外,比如,在电机控制中,逆变桥上下桥臂不能直通,如果它们都用同一个单片机来驱动,必须设置初始状态。防止直通! 驱动尽量用灌电流。 电阻在选用时,选用经过计算后与标准值最相近的一个! P0为什么要上拉电阻原因有: 1。 P0口片内无上拉电阻 2。 P0为I/O口工作状态时,上方FET被关断,从而输出脚浮空,因此P0用于输出线时为开漏输出。 3。 由于片内无上拉电阻,上方FET又被关断,P0输出1时无法拉升端口电平。 P0是双向口,其它P1,P2,P3是准双向口。准双向口是因为在读外部数据时要先“准备”一下,为什么要准备一下呢? 单片机在读准双向口的端口时,先应给端口锁存器赋1,目的是使FET关断,不至于因片内FET导通使端口钳制在低电平。 上下拉一般选10k!

    时间:2018-08-07 关键词: 单片机 上拉电阻

  • 关于STC单片机IO口的状态

     新入职一个公司,做智能家居的,只用宏晶51单片机。好长时间没搞了,今天就遇到一个问题之前没遇到过,就是配置IO口的工作类型。 数据手册里面是这样说的,在此多说一句,数据手册做的真烂。 这里举个例子。 如果给P1M1赋值0X03,给P1M0赋值0X05,那么P1口各个引脚对应的模式就是: { P1M1=0x03=00000011b P1M0=0x05=00000101b } P1M1 P1M0 IO口模式0 0 P1.7准双向口0 0 P1.6准双向口0 0 P1.5准双向口0 0 P1.4准双向口0 0 P1.3准双向口0 1 P1.2推挽输出1 0 P1.1高阻1 1 P1.0开漏

    时间:2018-08-07 关键词: 单片机 stc

  • 51单片机内核的中断及中断向基础知识

     51内核的最基础的中断源请求有外部中断、定时器中断和串口中断,这也是学习和开发者最长用的。当然还有其他的中断源,比如ADC、SPI、PWM等。以外部中断0为例,在编程中常使用的方式为: void INT0()interrupt 0 using 1 { …… } 在这里特别做上笔记:其中前面的void INT0() 只是代表一个普通没有形参的函数而已,函数名写成什么都是可以的,这个到不重要。那么后面的就一个一个词的扣把:(2-1-i-c-中国-电子网,防抓取) 其中 interrupt n 组成一组,n用来指明中断号,在函数后使用了interrupt关键字后,就会自动的生成中断向量,51内核中断号如下图,这是我今天查的正在使用的MCU: 例如: 12 interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1; interrupt 3 指明是定时器中断1 。。。 对于51内核的MCU,不同厂家及不同型号的内部资源会有所不同,上图是我正在开发的一款中颖SH88F516单片机,由上图可见内部资源还算可以,能够满足一般的产品。后面的using n 指的是使用第n组寄存器。这个之前我在使用的过程中往往忽略了这个,也没有出现什么问题。但是今天注意到这个问题,查完资料后用上发现效果还不如不用,很有肯能是没有把这个知识用好的原因把。对比之后给我的感觉是在使用C语言写程序时,能不用就不用吧。查资料解释说假如在中断函数中使用了using n,中断不再保存R0-R7的值,这也就意味着假如一个高优先级的中断及一个低优先级的中断同时使用了using n,而这个n恰恰相等,那就等着哭把,因为这个BUG还真不是那么好找出来的(今天我就遇到了这个问题)。21ic整理 其次就是中断优先级的问题了,如图上面的中断表,在右侧第二栏标的很清楚,除了复位之外,就数外部中断0优先级最高了,依次往下排列,那么问题来了,今天刚好就碰到了需要串口0的优先级比定时器0的优先级高。没办法,只好接着啃数据手册,还好这寄存器不多,一会就查到了下表和相关的描述: 所以按照描述修改下优先级就可以达到目的了。 总结:用到回过头来用到51的中断,发现有些东西在之前学习的时候并没有太在意,导致现在在开发产品上使用的时候不清楚用途。因为工作跟学习性质是不一样的,作为开发者的角度来说,质量往往是第一要求。同时会接触到很多新鲜的事物和技术,但是话又说回来了,最基本的知识还是需要打牢。

    时间:2018-07-24 关键词: 内核 51单片机

  • 单片机学习笔记之51内核软件延时和串口的巧妙方法

     不知道大家学习51是怎么过来的,反正我是一路忽悠过来的。现在用51来开发产品必须要充分用到它的内部资源,本来主频、资源就比不上32,不充分的利用怎么才能开发好的产品,那么今天我又学习到两个小技能:延时和串口的发送中断 情况是这样的,在产品的开发中,遇到了74HC595控制数码管,这个数字逻辑芯片用过的都知道,一位数码管还好,要是有多位那就得不断的刷新,为快不破,进而达到不同位显示不同断码(数字)的效果。这个刷新频率还有讲究,我不知道我的理论对不对,反正我知道民用电50Hz接在灯泡上,人眼是看不出灯泡在不断的闪烁的。那么就根据这个原理我只要保证在50Hz以上的频率(20ms以内)及时的刷新一次显示就行了。不过实际效果是我延时个5ms刷新一次才差不多看不到频闪,延时是软件的for循环延时,不太准,但是也差不多把。我也不明白为什么要到5ms才能把频闪给消除掉。反正就按照实际效果来咯。问题来了,5ms的周期性刷新,难道MCU就单纯的给这个数码管刷新不干别的活了,这往往是不太可能的。那在调试的过程中我实现的方法是这样的: 程序没有操作系统,就是普通的while循环,一个循环里面有很多任务,跑一趟下来时间可能比较长,那我就多copy几个刷新函数呗,根据任务大概的耗时放置在不同的位置。这样下来结果还是比较明显的,最起码效果好很多。接着就是新问题了,当一个任务函数执行的时间比较长的情况下,还是会出现频闪,有朋友可能会想到,那就在任务函数里面放刷新显示函数呗,的确这是一个好方法。在程序中我也用到了。可是有些任务函数对时间要求比较严格,还就真的不能放在里面干扰它的底层驱动程序。重点来了,我就来记录下我使用的两个方法; 1、 巧妙的使用任务函数本身的延时函数 例如我在工程里面用到了DHT11温湿度传感器,这个传感器(包括DS18B20)是单总线协议,对时间要求相当严格,我就看着底层驱动去找,找到了一个时间相对来说比较长的地方: 上图是DHT11的时序图,红线标注的地方是MCU给传感器的其实信号,这里手册上说的是至少拉低18ms,那就在这个地方做文章,以下是我修改的代码: 只是让这个20ms的时间去干点别的事情,就是刷新数码管。当然了,如果有操作系统的话,操作系统延时的调用机制会把效率进一步提高。在这里只要保证红色方框内的执行时间和需要延时的时间差不多,保证能正常读取到传感器数据就行了,我也就估算出来的没有实际测试时间,毕竟不方便仿真,不在公司手边也没有示波器。 2、串口发送中断的使用 除了这里的延时时间修改之外还有一个地方比较棘手,那就是串口发送一帧数据,一帧数据比较长,用一个个字节等待发送完成的方式太费时间了,其中又不好加上刷新函数,怎么办,突然想到了之前用过32的串口发送中断。于是就查了下寄存器试用了下,还真可以。表示之前几乎没有用过串口的发送中断,最多用过接收中断。修改前和修改后的代码如下: 注释的就是一个个字节数序发送了,发送一个字节的函数原型如下: 修改后的串口中断函数: 从代码的结构来看,大致的原理就是在没有数据需要发送的时候串口中断处于关闭状态,当有数据需要发送的时候,先把数据先准备好存储在一个数组里面,然后调用发送函数。发送函数的内容先是把串口的中断打开(ES=1),清零发送完成标志位(TI = 0),把需要发送的第一个数据放进以为寄存器(SBUF = dat[0]),把模拟的发送数据地址指向发送的第二个字节(因为第一个已经发送了),然后就等着中断吧。每发送完成一个字节串口就会进入中断函数,在中断函数里面先判断是不是发送中断(51内核串口的发送中断和接收中断使用的是同一个中断向量),确保是发送中断后先清除中断标志,然后继续放入需要发送的下一个数据(SBUF = WIFI_TX_DATA[TX_CNT++];)同时需要发送的数据地址后移。判断需要发送的数据是不是全部发送完成了,发送完了那就关闭串口中断。这样一帧数据就完美的发送完成而且效率有所提升! 上述方法只是一个简单的处理,侦长度是定长14个字节,如果是不定长度的侦也是可以根据实际情况修改的。还有一个问题我在这里没有处理但是需要注意,那就是有一种情况需要考虑到,当一帧数据还没有发送完成,新的一帧数据又需要发送。那么这种情况就需要修改下存储的方法了。这里记上一笔,解决方式是把需要发送的数据存进一个相对大一点的数组里面,然后给这个数组分配两个指针,分别是头指针(p)和尾指针(q),每次发送的时候先判断是不是(p=q)如果是的话就证明之前的数据都发送完了,现在可以畅通无阻;如果不相等,那就继续存储并同时后移尾指针q的位置(如果溢出了那就重新回头呗—循环数组的方法)。

    时间:2018-07-24 关键词: 单片机 51内核

  • 【单片机】调试稳定的三极管一键开关机电路(附详细讲解)

     先上一个低功耗的一键开关机电路,这个电路的特点在于关机时所有三极管全部截止几乎不耗电。 原理很简单: 利用Q10的输出与输入状态相反(非门)特性和电容的电流积累特性。刚上电时Q6和Q10的发射结均被10K电阻短路所以Q6和Q10均截止,此时实测电路耗电流仅为0.1uA,L_out输出高,H_out输出低。此时C3通过R22缓慢充电最终等于VCC电压,当按下S3后C3通过R26给Q10基极放电,Q10迅速饱和,Q6也因此饱和,H_out变为高电平,当C3放电到Q10be结压降0.7V左右时C3不再放电,此时若按键弹开C3将进一步放电到Q10的饱和压降0.3V左右,当再次按下S3,Q10即截止。 这个电路可以完美解决按键抖动和长按按键跳档的问题,开关状态翻转只发生在按键接触的瞬间,之后即便按键存在抖动或长按按键的情况开关状态不会受到影响。这是因为R22的电阻很大(相对R23,R26,R25)当C3电容的电压稳定后,R22远不足以改变Q10的开关状态,R22要能改变Q10的状态必须要等S3弹开后C3将流过R22的小电流累积存储,之后再通过S3的瞬间接触快速大电流释放从而改变Q10的状态。 非低功耗的三极管一键开关机电路: 这个电路的原型来自互联网,参数有调整,原理和第一个低功耗电路相似在此不再赘述。以上两个电路都深入了解之后再看本帖的主题一键三档电路: 这个电路实际就是本帖前两个电路的融合,可以实现低功耗待机和1档、2档、关机等3个档位。上电之初由于Q1,Q4,Q5的be结都并联了电阻,因此所有三极管都截止电路低功耗待机,C3开始充电到VCC电压。当按下S1后,Q5饱和,同时Q1也因此饱和,L_out1输出低电平Q4截止—>Q3截止、Q2饱和,C3放电为0.3V(Q5的饱和压降)左右。再次按下S1,Q5截止L_out1输出高电平—>Q2截止,Q4饱和L_out2输出低电平,由于R4和C1的延时作用Q3会延迟饱和,可以保证Q2完全截止后Q3基极才会为低电平,因此Q2,Q3都不会饱和。当再次按下S1,Q5由截止变为饱和L_out1再次输出低电平—>Q2饱和(同时Q4截止),Q3饱和延迟—>Q1截止,电路进入待机状态。

    时间:2018-07-24 关键词: 单片机 三极管

  • 单片机有源蜂鸣器驱动之效率编程

     蜂鸣器是很常见的设备,分为无源和有源两种。根据项目需求选择不同类型的蜂鸣器。最近的项目里有用到有源蜂鸣器对有源蜂鸣器。还是老一套,把电路板画完,接着编程。 在项目中原理图如下: 如果不能保证I/O的输出性能可以根据情况增加上拉或者下拉电阻。 切入正题:在程序里面这个蜂鸣器的驱动就是个高低电平驱动。高电平三极管导通、蜂鸣器发声,低电平三极管关断、蜂鸣器不发声。这的确很简单,程序上最开始我是这样写的: 当然,如果单片机没有很好的I/O跳变函数也可以这样修改: 这里稍作解释: 1) 函数功能:蜂鸣器发声驱动 传入参数:蜂鸣器发声的次数 2) 传入的次数cnt需要再函数内翻倍。这是因为传入的参数是想让蜂鸣器连续的发cnt声。但是蜂鸣器除了发声还有不发声的时候。也就是说蜂鸣器每响一次都需要关闭一次,如果没有关闭操作肯定就不会出现响几声而是连续的响一声,这个也很容易推理。 3) 在while循环完之后需要加一个蜂鸣器关闭操作。 这里假如传进的参数是2,目的是让蜂鸣器响两声。根据程序的执行步骤: cnt2变成4。 第1次while(4) 蜂鸣器开 cnt自减到3 第2次while(3) 蜂鸣器关 cnt自减到2 第3次while(2) 蜂鸣器开 cnt自减到1 第4次while(1) 蜂鸣器关 cnt自减到0 第5次while(0) 跳出while 可以看出其实在while之后蜂鸣器状态已经是关闭的了,但是保险起见,确保函数调用完之后蜂鸣器是关闭的状态。比如第一个函数I/O跳变的就更需要保障了,因为代码上只能看出跳变,看不到跳变之后的状态。 至此,一个简单的蜂鸣器电路和驱动程序就都温习完了,接下来上干货: 在写程序的时候很多时候讲究程序的效率,比如这个蜂鸣器驱动,驱动过程中会降低效率,厉害的人很快能看出来,就是这个Delay延时的问题。但是上面也说了,不延时也是不行的。所以趋于效率我尝试着换了一种方法驱动蜂鸣器。 代码如下: 实现起来也很简单,简单说下原理: 1)首先是提供蜂鸣器驱动的I/O配置, 2)其次是定时器的配置 3)最后是定时器中断函数实现 我选用的定时器是项目单片机中最简单的一个定时器,配制成1ms中断,能够提供溢出中断。其实这个定时器我常用做计系统运行时间Systick_ms。但是该项目对这个系统时间没有用到,那就用这个定时器做文章把。 实现方法: 1、同样函数在调用蜂鸣器驱动的时候接口是一样的,传入的参数还是蜂鸣器的响声次数。 2、函数体变了,这里改成了两个变量的赋值,第一个BELL_CNT同普通方法中的cnt2,这里不再赘述。第二个是FLAG_BELL是用来保存蜂鸣器是否需要驱动的状态变量。所以既然是调用驱动函数,那肯定这个变量要为真。 3、定时器中断函数里面加上了一个静态变量NOW,他的作用就是和Systic_ms产生一个50ms的时间片,干嘛用?肯定是给蜂鸣器开关之间的延时用咯。模拟软件延时嘛。然后再来分析下这段代码: 1)首先这个NOW和Systic_ms是无条件需要赋值保证50ms时间片的。对应的代码为NOW=Systick_ms+50; 2)判断蜂鸣器驱动状态变量是不是真,如果不为真就关闭蜂鸣器,这个也是无条件的。 3)如果状态变量为真:蜂鸣器先跳变Bell_Tog();当然如果没有这个跳变函数也可以用上述的判断cnt的方法,就不多写了都是一样的。同时次数自减BELL_CNT--;同时判断是不是减到0了,减到0了说明响完了啊,那就把状态变量赋值为假。再次进来不管蜂鸣器是开着的还是关着的都会执行关闭操作,这个跟上面说的保险一样。 4)最后,这两个变量用的是全局变量,这里是以结构体的形式呈现的,因为很多情况这两个函数不在一个C里面。如果硬要写在一个C可以忽略本条。

    时间:2018-07-24 关键词: 单片机 蜂鸣器

  • 关于STM32的几种输入模式以及外部中断的配置

    最近做毕业设计,需要用按键来触发外部中断。实验的时候是正常的,但是换了个核心板以及用上自己做的PCB电路板后,出现了一些问题。问题如下: 要求:将连接按键的IO口配置为上拉输入,按键一端接IO口,一端接地,即当按键按下后,该IO口会产生一个下降沿,触发下降沿中断。 问题:将相应的IO口配置好后,测了引脚的的电压,并不是3.3V左右,而是0.1V左右。于是猜想: 1. 外围电路对IO口产生了影响。 2. STM32内部上拉能力较弱,一次只能上拉一个IO口。 于是开始从这两个想法着手解决。首先第一个,很容易就排除了。将外围电路撤掉,我用的是杜邦线,直接拔掉测量引脚上的电压,依然是0.1V左右,于是第1个猜想排除。 第二个,查看万能的参考手册,发现每一个IO口都是有独立的驱动电路,这样第2个也排除了。 最后各种纠结,然后发现:在主函数的开头部分初始化的时候,我把初始化的那个函数给注释掉了。低级错误,见笑了。 现在总结一下: STM32的输入有4种输入模式: 模拟输入 GPIO_AIN 用于AD转换 浮空输入 GPIO_IN_FLOATING 引脚处于浮空模式,电平状态是不确定的。外部信号输入什么,IO口就是什么状态。 上拉输入 GPIO_IPU 防止IO口出现不确定的状态,比如,当IO口悬空时,就会通过内部的上拉电阻将该点钳位在高电平。 下拉输入 GPIO_IPD 功能与上拉电阻类似,防止IO口出现不确定的状态,比如,当IO口悬空时,就会通过内部的下拉电阻将该点钳位在低电平。 STM32中空的I/O管脚是高电平还是低电平取决于具体情况。 1、IO端口复位后处于浮空状态,也就是其电平状态由外围电路决定。 2、STM32上电复位瞬间I/O口的电平状态默认是浮空输入,因此是高阻。做到低功耗。 3、STM32的IO管脚配置口默认为浮空输入,把选择权留给用户,这是一个很大的优势:一方面浮空输入确保不会出现用户不希望的默认电平(此时电平取决于用户的外围电路);另一方面降低了功耗,因为不管是上拉还是下拉都会有电流消耗。从另一个角度来看,不管I/O管脚的默认配置如何,还是需要在输出的管脚外加上拉或下拉,这是为了保证芯片上电期间和复位时输出的管脚始终处于已知的电平。 4、在没有任何操作的情况下,STM32通用推挽输出模式的引脚默认低电平,也就是有电的状态。所以在配置的时候通常会先把引脚的电平设置拉高,让电路不产生电流。有电到没电这一过程也就是引脚电平从低到高的过程。 5、STM32的I/O管脚有两种:TTL和CMOS,所有管脚都兼容TTL和CMOS电平。也就是说从输入识别电压上看,所有管脚不管是TTL管脚还是CMOS管脚都可以识别TTL或CMOS电平。

    时间:2018-07-17 关键词: STM32

  • 电子技术的发展简史

     电子技术和电子学,是与电子有关的理论与技术。现在,人们已经掌握了大量的电子技术方面的知识,而且电子技术还在不断地发展着。这些知识是人们长期劳动的结晶。 我国很早就已经发现电和磁的现象,在古籍中曾有“磁石召铁”和“琥珀拾芥”的记载。磁石首先应用于指示方向和校正时间,在《韩非子》和东汉王充著《论衡》两书中提到的“司南”就是指此。以后由于航海事业发展的需要,我国在十一世纪就发明了指南针。在宋代沈括所著的《梦溪笔谈》中有“方家以磁石磨针锋,则能指南,然常微偏东,不全南也”的记载。这不仅说明了指南针的制造,而且已经发现了磁偏角。直到十二世纪,指南针才由阿拉伯人传入欧洲。 在十八世纪末和十九世纪初的这个时期,由于生产的需要,在电磁现象方面的研究工作发展得很快。库仑在1785年首先从实验室确定了电荷间的相互作用力,电荷的概念开始有了定量的意义。1820年,奥斯特从在实验时发现了电流对磁针有力的作用,揭开了电学理论的新的一页。同年,安培确定了通有电流的线圈的作用与磁铁相似,这就指出了此现象的本质问题。有名的欧姆定律是欧姆于1826年通过实验得出的。法拉第对电磁现象的研究有特殊的贡献,他在1831年发现的电磁感应现象是以后电子技术的重要理论基础。在电磁现象的理论与使用问题的研究上,楞次发挥了巨大的作用。他在1833年建立确定感应电流方向的定则(楞次定则)。其后,他致力于电机理论的研究,并阐明了电机可逆性的原理。他在1844年还与英国物理学家焦耳分别独立地确定了电流热效应定律(焦耳—楞次定律)。与楞次一道从事电磁现象研究工作的雅可比在1834年制造出世界上第一台电动机,从而证明了实际应用电能的可能性。电机工程得以飞速的发展是与多里沃-多勃罗沃尔斯基的工作分不开的。这位杰出的俄罗斯工程师是三相系统的创始者,他发明和制造出三相异步电机和三相变压器,并首先采用了三相输电线。在法拉第的研究工作上,麦克斯韦在1864年至1873年提出了电磁场理论。他从理论上推测到电磁波的存在,为无线电技术的发展奠定了基础。1888年,赫兹通过实验获得电磁波,证实了麦克斯韦的理论。但实际利用电磁波为人类服务的还应归功于马克尼和波波夫。大约在赫兹实验成功七年后,他们彼此独立地分别在意大利和俄国进行通信实验,为无线电技术的发展开辟了道路。 人类在与自然界斗争的过程中,不断总结和丰富着自己的知识。电子技术就是在生产斗争和科学实验中发展起来的。1883年美国发明家爱迪生发现了热电子效应,随后在1904年弗莱明利用这个效应制成了电子二极管,并证实了电子管具有“阀门”作用,它首先被用于无线电检波。1906年美国的德弗雷斯在弗莱明的二极管中放进了第三个电极—栅极,而发明了电子三极管,从而建树了早期电子技术上最重要的里程碑。又经过五年研究改进,从1911年开始了使用电子技术的时代。所以,电子技术作为一门新兴科学,其发展至今不过七八十年。 半个多世纪以来,电子管在电子技术中立下了很大功劳;但是电子技术的成本高,制造繁,体积大,耗电多,从1948年美国贝尔实验室的几位研究人员发明晶体管以来,在大多数领域中已逐渐用晶体管来取代电子管。但是,由于电子管的独特优点,在有些装置中,不论从稳定性,经济性或功率上考虑,还需采用电子管。 1948年用半导体材料做成的第一只晶体管,叫“半导体器件”或“固体器件”,1951年有了商品,这是出现分立元件的又一个里程碑。20世纪50年代末提出“集成”的观点。1950年Kilby在IRE的一次会议上宣布“固体电路”的出现,以后叫“集成电路”。集成电路的出现和应用,标志着电子技术发展到了一个新的阶段。它实现了材料,元件,电路三者之间的统一;同传统的电子元件的设计与生产方式,电路的结构形式有着本质的不同。1960年集成电路处于“小规模集成”阶段,每个半导体芯片上有不到100个元器件。1966年进入“中规模集成”阶段,每个芯片上有100到1000个元器件。1969年进入“大规模集成”阶段,每个芯片上的元器件达到10000左右。1975年更进一步跨入“超大规模集成”阶段,每个芯片上的元器件多达10000个以上。从1960年至1980年的二十年间,芯片上元器件的“集成度”增加了1000000倍,每年递增率约为2倍。目前的超大规模集成,在几十平方毫米的芯片上有上百万个元器件,已经进入“微电子”时代,大大促进了先进科学技术的发展。 随着半导体技术的发展和科学研究,生产和管理等的需要,电子计算机应时而兴起,并且日臻完善。从1946年诞生第一台电子计算机以来,它们已经经历了电子管,晶体管,集成电路及超大规模集成电路四代,每秒运算速度已达10亿次。现在正在研究开发第五代计算机(人工智能计算机)和第六代计算机(生物计算机),它们不依靠程序工作,而凭借人工智能工作。特别是七十年代卫星计算机问世以来,由于它价廉、方便、可靠、小巧,大大加快了电子计算机的普及速度。 数字控制和数字测量也在不断发展和日益广泛地应用。数字控制机床和“自适应”数字控制机床相继出现。目前利用电子计算机对几十台乃至百台数字控制机床进行集中控制(所谓“群控”)也已经实现。 在工业上晶体闸流管也获得了广泛应用,使半导体技术进入了强电领域。 随着生产和科学技术发展的需要,现在电子技术的应用已经渗透到了人类生活和生产的各个方面。西方学者将之归纳为四个方面,或者叫做四个“C”。有两种说法:一种是元器件制造工业,通讯,控制和计算机;另一种说法是通讯,控制,计算机和文化生活,如广播、电视、录音、电化教学、电子文体用具、电子表等。 由于电子技术得到高度发展和广泛应用(如空间电子技术、生物医学电子技术、信息处理和遥感技术、微波应用等),它对于社会生产力的发展,也起了变革性的推动作用。电子水准是现代化的一个重要标志,电子工业是实现现代化的重要物质技术基础。电子工业的发展速度和技术水平,特别是电子计算机的高度发展及其在生产领域中的广泛应用,直接影响到工业、农业、科学技术和国防建设,关系着社会主义建设的发展速度和国家的安危;也直接影响到亿万人民的物质、文化生活,关系着广大群众的切身利益。

    时间:2018-07-17 关键词: 电子技术

首页  上一页  1 2 3 4 5 6 7 8 9 10 下一页 尾页
发布文章