您好,就是我的电控在打8000V空气放电时单片机会复位,打的位置是显示面板,这个应该怎么解决。

  • 单片机冷启动后片内RAM为随机值,运行中的复位操作改变片内RAM区中的内容21个复位后的状态为确定值,见下表值得指出的是,记住一些特殊功能寄存器复位后的主要狀态对于了解单片机的初态,减少应用程序中的...

  • 若没有二极管D当电源因某种干扰瞬间断电时,由于C能迅速将电荷放掉待电源恢复時,单片机不能上电自动复位导致程序运行失控。电源瞬间断电干扰会导致程序停止正常运行形成程序“乱飞”或进入“死循环”。若...


    复位电路中放电二极管D不可缺少。当电源断电后电容通过二极管D迅速放电,待电源恢复时便可实现可靠上电自动复位若没有二极管D,当电源因某种干扰瞬间断电时由于C不能迅速将电荷放掉,待电源恢复时单片机不能上电自动复位,导致程序运行失控电源瞬间斷电干扰会导致程序停止正常运行,形成程序“乱飞”或进入“死循环”若断电干扰脉冲较宽,可以使RC迅速放电待电源恢复后通过上電自动复位,使程序进入正常状态;若断电干扰脉冲较窄断电瞬间RC不能充分放电,则电源恢复后系统不能上电自动复位
    这里有个更有意思的解释:

    如果RESET端对地没那个电容,


    也就不需要这个二极管了
    只要电源接通,那么这个电容就会“逐渐充满电”这个过程必须要有,正是这个过程保证了CPU正确地“RESET”
    当电容充满电之后我们把电源开关断开了,这个电容中的电“何去何从”呢VCC和GND之间接了N多的器件,所有的器件都对它说:“把你那点电给我吧我还能坚持一下。”电容说:“给你们没问题可是我他娘脑袋上有个电阻挡我的财路,你們先别急我慢慢把电放给你们。”
    当电容刚刚要把电通过那个上拉电阻放出来电源开关突然又接通了。CPU开始冲电容吼:“孙子!你Y的那个充电过程怎么没啦我还要复位呢!”电容不干了:“废话,我上次充的电还没放呢这他妈电源又通啦!”CPU急了:“那我怎么办我嘚复位啊!”电容眼珠一翻:“管你Y怎么办,死去吧你!”
  • 该状态位在复位后仍然有效并允许程序检测到问题并执行其他恢复或记录事件。 如果BOR被禁用会怎样一般情况下,其表现为电源电压稳定下降至于原因,可能是电源老化或电池放电 如上图所示,V1是正常电源...

  • STM32L431RCT6单爿机自制板复位按键不灵的可能问题 自制的STM32L431RCT6单片机的板子出现了这样的问题: 1、在Keil uVision5中能够正常下载程序但能进行调试。具体现象为点擊调试按钮能够正常转到调试界面但...

              

    STM32L431RCT6单片机自制板复位按键不灵的可能问题

              

    自制的STM32L431RCT6单片机的板子出现了这样的问题:
    1、在Keil uVision5中能够正常丅载程序,但不能进行调试具体现象为点击调试按钮后能够正常转到调试界面,但处于一直运行状态程序卡死
    2、Keil UVision5设置了下载程序后自動运行,但在下载程序后并没有自动运行
    3、通过电源开关进行断电和上电后程序正常运行,但使用复位按键大概率无法复位(偶尔可能鈳以)
    经过查阅资料后发现是该单片机的BOOT0引脚必须通过10k电阻(其他阻值可能也可以)上拉(外部flash启动)或者下拉(内部flash启动)
            
  • 由于换了电脑,就下载了keil的最新版安装完函数库之后,发现烧录程序单片机没反应期初以为是程序错了,一直改程序把所有的都注释了,最后改荿这种样子 int main(void) { LED_Init(); while(1) {} } reset ...


    由于换了电脑就下载了keil的最新版,安装完函数库之后发现烧录程序单片机没反应。起初以为是程序错了一直改程序,把所有的都注释了最后改成这种样子

    reset and run也勾选了
    结果还是没鸟用,一度怀疑自己难道连LED灯都搞不定了吗。不是改硬件就是改软件前前后後搞了两个小时。后来用开发板一试因为开发板有复,我按了一下竟然成功了,原来是复位问题赶紧问了度娘,原来是新版本增加叻pack这个选项把里面的Enable勾选去掉就可以了。
  • 当时我在建立STM32 mini板和MATLAB 的USB串口通信时发现在MATLAB配置好串口的相关代码,在STM32 mini板上的程序也没有任何問题的情况下运行MATLAB程序时,STM32 mini板居然出现复位情况导致MATLAB能正常...


    当时我在建立STM32 mini板和MATLAB 的USB串口通信时,发现在MATLAB配置好串口的相关代码后在STM32 mini板上的程序也没有任何问题的情况下,运行MATLAB程序时STM32mini板居然出现复位情况导致MATLAB不能正常读取从STM32 mini板发来的串口数据当时的我很苦恼,各種找bug,然而发现代码这些都没问题啊折腾了好久。所以我就开始在网上各种找资料历尽千辛万苦,功夫不负有心人我终于在STM32的一个论壇上找到了答案,这个论坛上也有别的网友出现了这个问题

    还是人多力量大啊,果然有网友给出了答案原来在MATLAB串口配置的代码里需要加上两行代码:
     这里的“s”就是在MATLAB里创建的串口设备对象。至于这两行代码的具体意思我没有过多追究,我的目的是能解决问题就行
    
    當我在MATLAB的m文件里面加上这两行后,运行MATLAB程序发现STM32 mini板复位的问题迎刃而解。我真是感叹网友的力量真的很强大啊!!
    所以我觉得我有必要紦这些东西分享出来让大家在遇到的时候,能够在网上找到答案
  • 做公司的一个项目,实现一个功能就是 机器在进行一项功能时(这项笁作时间挺长)想要取消这项工作,重新选择想了半天没想出来,结果同事提醒了一句可以在程序中加一个外部中断,在中断...但是茬运行过程中出现...

  • 所谓自动下载就是说当前单片机已经在运行程序了,但这个程序必须具备串口中断功能通过串口接收特定字符标志,使得单片机知道应该从运行用户程序状态退出复位后进入监控状态(即ISP状态),为下载新的用户程序...

  • SST单片机可以需要编程器直接通过串行通信口,将程序下载到单片机ROM中且下载的程序在单片机断电仍会保存,不会丢失程序下载,直接复位或者重新上电单片机就鈳以工作 2) 在线仿真功能。SST单片机还...

  • 前言:用jlink调试代码观察现象与拔掉jlink对系统重新上电观察到的现象理论是一样的才对,然而重新上电感觉单片机根本就运行(也就是单片机根本就没复位),于是就去验证单片机有没有运行(在mian函数入口...

  • 答案解析:复位后寄存器嘚值 题型:单选题 2、有关存储器的说法哪一个正确( )。 A.数据存储器和程序存储器是两个独立的存储器 B.数据存储器的工作寄存器區域和位寻址区域相互独立重叠 C.特殊功能寄存器...

  • flash 程序存储空间(断电数据丢失) RAM 数据存储空间(存储程序运行过程中产生的和需要的数据,断电数据丢失) SFR 特殊功能寄存器(单片机的功能主要是通过用户对SFR的读写来实现单片机的功能) 单片机...

  • 最近在使用STM32做一个對继电器检测和分析的电路但是电路板出来之后,发现复位电路基本无效就是按按都没有用,单片机根本无法下载程序和运行看叻下网上的很多电路,和我的也都一样如图图中的RESET是接的...

  • 而且一些单片机厂家也一定能提供C编译器。而汇编语言一条指令就对应一個机器码,每一步执行什幺动作都很清楚并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便所以在单片机开发中,我们還是建议...

  • 若没有二极管D当电源因某种干扰瞬间断电时,由于C能迅速将电荷放掉待电源恢复时,单片机不能上电自动复位导致程序運行失控。电源瞬间断电干扰会导致程序停止正常运行形成程序“乱飞”或进入“死循环”。若...

  • 那么定时时间到就会使单片机复位瑺用的WDT芯片如MAX813,5045IMP 813等,价格4~10元不等  软件看门狗  软件看门狗技术的原理和这差不多,只不过是用软件的方法实现我们还是以51系列来講,我们知道在51...

  • Vpd是备用电源当主电源Vcc发生故障,降低到某一固定的低电平时Vpd自动接入RST端,提供备用电源以保证片内ROM丢失,从而使嘚单片机复位后能正常工作 2. 单片机内部某些寄存器控制如何使用第一还是第二功能; ...

  • 主要是对HEX格式文件的修改参考HEX文件格式 ...3:可以预留内蔀FLASH最后一块为自己用,记录一些复位原因软件运行不正常的原因,方便检查程序BUG的原因 仅供思路,具体实现过程可以参考本人IAP仿

  • 3.上電后复位下看看跑跑,有可能没设置reset and run 4.有核心板的话把核心板从底板上拆下来只对核心板下载试试 5.芯片断电再上电(重启) 6.在线调试试试能能跑有时在线调试能跑,板子上电.

  • 若没有二极管D当电源因某种干扰瞬间断电时,由于C能迅速将电荷放掉待电源恢复时,单片機不能上电自动复位导致程序运行失控。电源瞬间断电干扰会导致程序停止正常运行形成程序“乱飞”或进入“死循环”。若...

  • 复位後单片机是从地址0000H处开始执行地址0000H又会指向主程序入口,即主函数处即片内下载的用户程序而不会执行前面已经固化的检测串口那段程序。这就是为什么单片机每次下载要冷启动而复位

  • 关闭比较器和CVref(可编程偏上参考电压)、WTD、T1OSC、BOR(欠压复位)等3:PORTB片内弱上拉4:所有鈈用的模块全部关闭,在用到时再打开5:MCLR引脚必须处于逻辑高电平pic单片机在执行SLEEP指令进入睡眠省电模式...

  • 但是随之而来的问题是掉电電容放电过程中,单片机的供电电压在缓慢下降当下将到某个值但还没有降到复位门限电压之前,如果此时再次开机则单片机不能正瑺启动,导致单片机重复上电工作混乱下面具体分析这...

  • 我们修改为合理的地址,照样能直接运行如果从理论分析,此时中断向量表位置不同了cpu上电怎么知道正确的复位中断起始地址呢?(我们设了中断向量表偏移也是等到了该程序运行起来才设置的呀)这个原洇应该是...

  •  这里有一个非常重要的问题要说下,大家有时候会遇到这样的一个问题:自己的程序在仿真时运行一点问题也没有但烧录卻不行了。结合我的经验有两种原因一是时序可能变了,这个大家都知道我多说,还有一个...

  • IAP IAP(In Applicating ...芯片通过满足触发条件(用户自己设定)进入引导区运行引导程序在BOOT程序下将目标程序下载到下载区,下载完成并校验通过再将下载区内容复制到用户程序区运行复位程序,IAP完.

  • 3、单片机的堆栈栈顶由( )来指示复位时起位置在( )单元。 4、当P1口做输入口输入数据时必须先向该端口的锁存器写入( ),否则输入数据可能出错 5、单片机内部数据传送指令( )用于单片机内部RAM单元及...

  • 近在搞430的FLASH的自定义法(利用串口)程序烧写,烧写完成斷电复位reset按键就可以运行新的程序。但是和学长交流了一下这种方法不够好,希望有一种软复位的方式于是百度了一下,都是些对看门狗进行写入...

  一、基于单片机的多功能防醉驾系统装置设计

  基于ATmega16超低功耗单片机的2J2001A型数码酒精探测控制仪探测传感器安装在汽车内,分别在主驾驶车位上的头顶上、方向盘仩、每一个车门的边上安装当驾驶人员进入驾驶座位后,可以自动对酒精浓度进行探测当系统通过对5个酒精测试仪的数据分析后,会判定出驾驶员是否是饮酒驾车和醉酒驾车并分别采取对应的措施,以确保行车和驾驶员的安全系统可以根据检测到的酒精含量是否超標控制汽车点火器打开或者关闭,如果超标则驾驶人员无法启动汽车同时安全带会自动收紧,而且系统会呼叫相应的人员过来帮助驾驶員因此从根本上杜绝了酒后驾车的出现。该系统具有性价比高智能化程度高,工作稳定可靠的优点

  系统采用超高灵敏度酒精传感器用旁热型半导体式酒精气敏元件MQ3,超低功耗ATmega16单片机系统自动探测酒精浓度的方法,可以防止驾驶人员逃避检测以判断驾驶员是否昰酒后开车,系统总体设计如图1所示主机电路包括8个模块,分别是酒精传感电路模块、电源模块、GPS定位模块、键盘控制模块、液晶显示模块、声光报警模块、语音呼叫模块、继电器控制模块该系统放置在汽车仪表盘位置,当司机打开车门时酒精探测控制仪启动,此时發动机处于被锁状态汽车无法启动。酒精传感器加热后探测控制仪对酒精传感器探测的气体信号进行检测。由于酒精含量与酒精传感器检测后产生的电压信号成特定的比例关系因而可根据电压信号进行酒精含量的判断。检测到的信号经过放大和滤波之后通过单片机內置的12位ADC转换为数字信号,由单片机对此信号进行处理判断假设酒精含量没有超标,LCD显示屏幕显示当前酒精浓度同时绿色指示灯(正瑺)亮起,控制继电器不起作用汽车随之启动;反之红色指示灯(不正常)亮起并进行声光报警,控制继电器切断点火装置电源同时安铨带收紧,系统启动呼叫紧急联系人装置通过GPRS导航仪测定当前位置并以语音或短信“我现在在XX方位,我喝醉了请速来”告诉给紧急联系人,此时驾驶人员无法启动汽车从根本上实现控制酒后驾车。汽车启动后控制仪随即进入低功耗状态,只有酒精浓度探测电路一直笁作一旦驾驶人员驾驶过程中饮酒,控制仪立即恢复到正常工作状态

  2 系统主要电路设计

  本控制仪采用了由Atmel公司研发出的新一玳高性能、低功耗、高集成化的8位微处理器,具有先进的RISC结构大多数指令的执行时间为单个时钟周期增强型ATmega16单片机,它的工作电压为4.5~5.5 V工作频率为0~16 MHz,支持JTAG端口仿真和编程仿真效果比传统仿真更真实有效。它的高度集成不但大大降低了故障率而且在成本、体积、稳萣性方面都有明显优势。系统主控电路如图2所示包含晶振电路、复位电路等。

  (2)酒精检测电路

  酒精传感器采用旁热型半导体式酒精气敏元件MQ3探测范围为10~1000ppm。酒精检测电路由高精度酒精传感器、信号调理放大电路、滤波电路和单片机内置12位ADC等组成主要功能是檢测酒精含量,判断其是否超标如图3所示。

  指示灯电路有红绿黄三个指示灯红灯是电源指示灯,工作时亮;绿灯是检测提示灯因為酒精探头需要一定时间加热,才能达到理想的灵敏度加热时间到,绿灯亮表示可以进行浓度探测;黄灯为报警指示灯,黄灯不亮表礻可以行车;当黄灯亮时,表示酒精浓度超标不可以驾驶,同时黄灯闪烁的频率越高酒精浓度越高。如图4所示

  (4)液晶显示电路

  此系统选用的是广州瑞通科技有限公司的SED1335图形点阵LCD模块。这是一款低功耗的点阵图形式LCD可以工作在3.3 V供电的情况下,显示格式为128(列)×64(行)具有多功能指令,内部带有中文字库既可以工作于串行方式又可以工作于并行方式,很容易与16位的单片机相连本系统中與单片机的连接采用并行工作模式,以液晶显示控制芯片ATmega16的异步串行通信端USART为外部数据或控制指令的输入断口如图5所示。

  (5)GPS导航系统设置电路

  本设计在系统终端采用了GPS导航系统模块作为开发平台当酒精检测系统发出醉酒超标信号时,该模块就会将所在地点的信息发到语音呼叫模块上在平时无醉酒(饮酒)情况下,该模块就充当GPS实时导航系统为驾驶员提供必要的信息。

  (6)继电器控制電路

  控制继电器有两个主要部分一个是控制系统,另一个是被控制系统其起动机的工作原理如图6所示。

  (7)语音呼叫系统控淛电路

  语音呼叫系统是继酒精检测电路发出超标信号后该系统读取GPS模块传送过来的信息并通过语音呼叫系统把饮酒者所在地点信息傳给其最近联系人,让他过来帮忙如:“我现在在XX方位,我喝醉了请速来”。其电路如图7所示

  (8)报警和键盘电路

  利用蜂鳴器作为报警器,当酒精含量超标时发出禁止行车警告音;不超标时发出允许行车提示音。由单片机的I/O口驱动蜂鸣器来实现

  软件部汾根据系统功能进行模块化编程。控制仪主程序流程图如图8所示实现酒精含量检测、酒精含量是否超标判别、酒精含量显示、声光报警等功能。系统初始化后对酒精传感器进行加热,自动进入测量状态然后采集酒精含量电压信号,与设定的精度浓度进行比较如果高於这个浓度,则显示该浓度并进行声光报警,同时切断点火电路驾驶人员不能发动汽车;如果低于这个浓度,则显示所测的浓度同时啟动发动机。

  通过电路中预留的JTAG接口调试程序依据检测系统不同功能的需要,采用模块化的设计将程序分成几个主要的功能模块:气体检测、工作电压设置、采样数据上传。

  酒精监控系统是为预防或杜绝醉酒驾车引发交通事故发生而设计的通过对各个电路功能及软件工作流程的研究与制作,基本实现了设计要求系统具有自动测量、智能化程度高、功耗低等特点,对预防酒后驾车具有很好的效果在实际应用中具有很好的推广价值。

  二、智能电饭煲中单片机的应用

  微电脑或电脑控制的智能电饭煲符合现代人的要求囚性化的界面设计,使得人们一眼看出当前工作状态让您更安心,各种烹调过程全部由电脑自动控制并且大多的智能电饭煲采用太空“黑晶”内胆,超硬耐磨恒久美观,所有的这些特点符合现代人的省时、省力、耐用的观念

  本文主要介绍利用SPMC65P2404A芯片来对电饭煲的過程进行控制,SPMC65P2404A是凌阳公司的8位元单片机最高工作频率为8MHz,工作电压2.5V~5V有192字节的RAM和4K字节的OTP ROM,有23个可编程IO口8通道10位A/D转换器,2通道8位定时/計数器2通道16位定时/计数器,1个12位PWM输出口有低电压、上电、看门狗、外部信号、错误地址复位,并且有一个蜂鸣器输出口

  利用凌陽8位MCU设计的智能电饭煲控制系统原理框图如图2-1所示,通过按键来选择功能模式、显示电路完成显示当前状态和定时时间;通过温度传感器来對温度进行采样;通过MCU的控制最终实现对继电器的控制从而来控制对加热盘的加热与否,电源部分完成对单片机系统和外围电路提供5V电源并且对加热盘进行加热。

  图2-1 控制系统构成框图

  1、由单片机SPMC65P2404A控制的电饭煲的硬件原理图如图3-1所示它包括按键输入部分,温度检測输入电路复位和晶振电路,PA6、PA7完成对顶盖和底盘的温度的检测PA5完成对继电器的控制,SPMC65P2404A是系统的核心部分

  图3-1 电饭煲的电路原理圖

  SPMC65P2404A是凌阳公司的8位元单片机,最高工作频率为8MHz工作电压2.5V~5V,有192字节的RAM和4K字节的OTP ROM有23个可编程IO口,8通道10位A/D转换器2通道8位定时/计数器,2通道16位定时/计数器1个12位PWM输出口,有低电压、上电、看门狗、外部信号、错误地址复位并且有一个蜂鸣器输出口……。利用这些资源能够实现电饭煲的功能。

  显示电路由共阳极数码管和10个LED组成通过单片机位选和所送的数据来点亮相应的LED和数码管的显示状态。其电蕗原理图如图3-2所示:

  图3-2 显示电路

  电源部分为单片机提供+5V的直流稳压源并且通过降压、整流、滤波之后的+14V电压对继电器进行供电,通过控制三极管射极的导通与否来控制继电器的工作状态电源电路原理图如图3-3所示

  图3-3 电源电路

  4、温度采集部分电路图:

  J2囷J3是温度传感器的两个接口,其中J2和J3分别是顶盖和底盘温度传感器的接口单片机检测的信号实际上是与温度传感器分压的电阻的电压值,因为温度传感器的电阻值会随温度的上升而减小所以分压电阻的电压值间接反映了某一时刻的温度,电路原理图如图3-4所示:

  图3-4 温喥传感器电路

  4.1 主程序流程

  从样机分析中大致设计整个系统整个系统输入包括2个温度传感器,5个按键;输出包括2位七段数码管、10个發光二极管、继电器控制信号等根据控制功能,将程序设计为几个主要的模块程序主流程见图4-1所示:

  4.2 子程序介绍

  诊断程序主偠进行温度采集并判断传感器是否良好,主要对2个温度传感器连续检测20次若测到的数据不在范围内(温度范围:-10℃~160℃),则表明传感器短路或断路错误数码显示“E”,并禁止按键操作

  2、 键盘扫描子程序

  程序每循环一次扫描一次键盘,如果扫描到有键按下则暫存键值,如果连续5次扫描到的键值都一样则认为是稳定的键值。

  3、 系统共有5个按键在不同的状态下,每个键只要轻按一次就有效系统的五个键接于PA1 、PA3、PA2 、PA0、PA4,如果按键值有效则返回值的相应位为0否则相应位为1。

  4、 温度采集子程序

  热敏电阻灵敏度高為了防止干扰及其它原因导致测出的温度值变化太快,引起控制部件频繁动作温度采集采用滑动平均值滤波方法。即在同一个通道上连續采集三个数据取其中的中间值。

  系统共有2位七段数码管显示及10个发光二极管显示数码管主要有6种状态需要显示:待机状态、出錯显示、焖饭、保温、煮饭中及定时时间显示。发光二极管显示所选择的功能、开始及保温状态功能显示需采用轮循方式,在按下开始鍵之前开始灯闪烁。进入保温状态后保温指示灯亮。LED显示程序由位码扫描子程序及数码显示状态选定子程序组成

  三、STC单片机自動下载系统设计

  STC单片机下载程序不需要编程器烧写,可以通过串口下载美中不足的是,STC单片机下载时必须进行冷启动即下载信号加到单片机串口以后必须对单片机断电再上电,这给用户带来了一些不便尤其是反复调试程序需要多次下载时,显得更加繁琐

  为叻解决这一问题,有必要研制一种STC单片机专用的自动下载系统使系统接收到上位机发往单片机的下载信号后,自动冷启动STC单片机完成丅载任务。

  STC单片机下载时需要使用宏晶公司提供的STCISP软件。下载开始时上位机软件首先向单片机发出下载命令。自动下载系统收到仩位机对单片机发出的下载命令后实现对单片机的断电、上电冷启动操作。单片机经冷启动后收到命令数据流后作出回应,开始下载程序需要注意的是,单片机在正常工作中串口有可能接收数据,由于自动下载系统与单片机串口连接因而系统必须具有自动判断接收的数据流是否为下载命令的能力,保证及时冷启动目标单片机

  为了检测下载程序的命令数据流,可以采用如下方法:从PC的串口引絀连接线接至PC的另一个串口,用串口调试助手打开;用STC-ISP软件发送下载命令可以检测到在波特率为9 600 bps的情况下,该软件持续向单片机发送十陸进制的0x80;当自动下载系统连续接收到足够数量的0x80时即可判定接收到了下载命令数据流,从而进入冷启动程序

  自动下载系统需要接收上位机发往目标单片机的下载命令程序流,并对目标单片机进行冷启动STC15F104E是宏晶公司研发的一款单片机,具有省去一些外部电路而功能較全面的优点

  该单片机的特点有:

  ◆内部集成了可靠复位,省去了外部复位电路

  ◆内部集成了R/C时钟(在常温下仅有5‰温漂),省去了外部晶振

  ◆内部集成了2个16位可重装载定时器,与普通8051单片机兼容

  ◆为DIP8/SOP8封装,体积较小功耗较低。

  ◆增强型8051内核单时钟周期,信号处理速度快实时性较好。

  由于STC15F104E可以省去传统单片机的复位电路、外部晶振电路且采用贴片封装,因此占用电路板面积非常小适合集成在电路板上,因而作为本系统的主控芯片

  如图1所示,整个系统以STC15F104E为核心进行设计STC15F104E的P3.0脚与目标单爿机STC89C52RC的串口接收端相连,即将发往目标单片机的信号连接到自动下载系统实现信号的获取和处理。由丁自动下载系统不需要发出任何信息STC15F104E的P3.1引脚悬空,不与目标单片机相连

  对目标单片机进行冷启动,实现断电、再上电可以用三极管作为电子开关实现。必须注意箌的是三极管的最大可通过电流不要小于单片机电路的所需电流。如果三极管仅作为单片机供电的开关由于STC89系列单片机的正常丁作模式功耗为2~7 mA,90系列三极管通常情况下可以满足需求但在某些情况下,单片机的串口上电后会给单片机供电使单片机各引脚电平处于不確定的状态,因而必须对目标电路板整体进行冷启动三极管必须满足目标电路板的总电流需求。由于三极管8550的最大可通过电流为1.5 A可以滿足绝大多数电路的供电需求。所以选择三极管8550连接到目标单片机STC89C52RC的VCC脚作为对其冷启动的开关。

  如图1所示D1为指示灯,其亮灭可以通过STC15F104E的P3.3脚控制在程序中加入相应的语句即可实现灯的亮灭与闪烁,以显示系统的状态

  STC单片机自动下载系统软件流程如图2所示。在初始化后系统循环检测是否接收到下载信号;经过判断证实接收到下载信号后,就切断目标单片机电源;等待适当的时间后再给目标单片機上电。单片机正常工作期间系统接收到发往目标单片机串口的非下载命令程序,经自动判断后不作任何动作

  3.1 串口模拟程序

  甴于STC15F104E没有串口,因而必须利用定时器模拟串口其方法是,定义一个常量根据所需要的波特率对该常量赋值,并将该常量值赋到定时所鼡的寄存器中在模拟外部晶振为11.059 2 MHz、波特率为9 600 bps的情况下,设置常量BAUD为0xFE80并将该常量赋值到TL1、TH1两个寄存器中,实现定时每到相应时间触发萣时中断程序,将外部引脚的状态读入并存入预先设定的数组中完成模拟串口读入字节的任务。

  3.2 下载命令检测程序

  在STC上位机软件发出的下载命令中波特率为9 600 bps时数据流为连续的0x80。由于在单片机正常工作时也有可能接收0x80下载系统只有严格检测到连续多个0x80时,才能判断为接收到了下载命令如果其中有一个不是0x80,则重新检测计数这里设定为当系统连续接收到200个0x80时,判定为接收到了下载命令

  3.3 冷启动操作和指示灯程序

  接收到下载命令后,STC15F104E首先关闭定时器中断停止模拟串口的接收工作。之后将P3.4置1切断目标单片机的电源。延迟1~2 s后置0恢复对目标单片机的供电。考虑到STC上位机下载软件从发送下载命令到单片机开始下载大约需要1~2 s的时间恢复供电后需要继續延迟5 s,保证目标单片机已经开始下载后再启动定时器中断

  STC单片机接收到下载命令后,必须作出回应才能进行下载上位机发出的丅载信号同时发送到目标单片机和自动下载系统,自动下载系统中的单片机的P3.1脚悬空而目标单片机的P3.1与上位机串口相连。这样只有目標单片机能够回应下载命令实现下载,自动下载系统中的单片机不能回应下载命令避免了对上位机的干扰。

  STC单片机自动下载系统省詓了操作人员手动开关电源的不便避免了相应的机械损耗,具有较高的实用价值

  四、Proteus的单片机演奏系统

  当前的很多用单片机實现音乐演奏的系统都是利用开发板结合仿真器实现的,这种方法不是很复杂实现也较方便,但是调试不是很方便且成本也较高。 本攵提出的一种基于Proteus 的单片机演奏音乐的方法非常简单实用,且该方法基于软件来实现的所以成本非常低,调试方便效果也很不错,適合于爱好音乐的单片机学习者 单片机系统的设计分两大部分:硬件设计部分和软件设计部分。

  硬件部分比较简单如果在开发板仩做实验可仿下面图1 电路连接。

  AT89C51 单片机的P2.5 口控制一个8550 的三极管三极管控制电磁蜂鸣器的电源通断。

  如果用Proteus 软件来仿真的话电蕗更加简单,见图2

  图2 在Proteus 环境下用单片机控制蜂鸣器发声的原理图。

  需要的关键元件:单片机和蜂鸣器

  为了便于软件编程,先要了解单片机唱歌的基本原理

  什么是声音呢?声音是空气的振荡不同的振荡频率我们就可以听到不同声调的声音。 音的频谱范围约在几十到几千赫兹

  其次,如何让蜂鸣器发声蜂鸣器有很多种类,但大致分为两类:有源式(直流电就发声但频率单一);無源式(根据输入方波频率而发出不同的声音)。 这里选择无源式蜂鸣器

  单片机唱歌的基本原理:利用程序来控制单处机某个口线絀一定频率的方波到蜂鸣器,蜂鸣器就可以发出一定音调的声音若再利用不同的延时程序改变输出频率,就可以改变音调进而就可让單片机发出“1”、“2”,“3”“4”,“5”“6”,“7”的音乐

  通过软件延时或者定时器延时来的方式以不同频率改变口线的的高低电平状态来实现的。 如果只是让蜂鸣器发声这已经够了 但是我们要的是唱歌,所以还有一些工作需要作

  输出不同频率的方波,鉯实现1、2、3、4 等的不同音调;比如发出200HZ 的音频,其周期为1/200s即5ms. 这样,当 P2.5 的高电平或低电平的持续时间为2.5ms 时就能发出200HZ 的音调。 我们可以写┅个延时子程序用R3 来提供参数,R3=1 时延时为20us,那么R3 取(7DH)时就可以发出200Hz 的音调,提供不同的R3 常数可以得到不同的音调变化。

  利鼡通用发声程序可以编写乐曲演奏程序乐曲是按照一定的高低,长短和强弱的关系组成的音调在一首乐曲中,每音符的音高和音长与頻率和节拍有关(如图3 所示)

  图3 音符的音高和音长与频率的关系

  图3 画出了两个音阶(一个音阶是8 个音符)的钢琴键和每个键的喑符名及其频率(HZ),低音阶以低C(130.8Hz)到中C(261.7Hz)高音阶以中C 到高C(523.3Hz)黑键比它旁边的白键高半个音或低半个音 组成乐曲的每个音符的频率和持续时间是乐曲程序发声所需要的两个重要数据。 频率可以从图中得到音符的持续时间可根据乐曲速度及每个音符的节拍数来确定,是可以从乐谱中得到的

  控制一个音符输出的时间,比如1 拍、1/4 拍 在4/4(四四拍)中,四分音符为一拍每小节4 拍,全音符持续4 拍②分音符持续2 拍,四分音符持续1 拍八分音符持续半拍。 而全音符需要1s 的时间则二分音符持续时间为0.5s(50×10ms),四分音符的持续时间为0.25s(25×10ms)八分音符持续时间为0.125s(12.5×10ms)。

  知道了音调与频率和时间的关系就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两個数据表,然后编写程序依次取出表中的时间值和频率值

  仅上所叙还不够,要准确奏出一首曲子必须准确地控制乐曲节奏,即一喑符的持续时间 例如,一首曲子的节奏为每分种94 拍那么一拍就为60/94=0.64s.

  音乐的节拍我们可用定时器来控制,简单的说一个一拍的音符唱0.64s,我们就设置一个定时器定时0.64s时间一到就换下一个音符。 但是由于单片机的T0,在12MHz 晶振下最大定时时间只能为65ms因此不可能直接用改變T0 的时间初值来实现不同节拍。 如何定时一个更大的时间我们可以用T0 来产生10ms 的时间基准,然后设置 一个中断计数器通过判别中断计数器的值来控制节拍时间的长短。

  例如对1/4 拍音符定时时间为0.16s,相应的时间常数(中段计数器)为16(即10H);对3 拍音符定时时间为1.92s,相应時间长数为192(即C0H)

  因为一首曲子不止一个音符,我们不可能对每一个音符的音阶都去“手工”的提供时间常数为了实现的简化,峩们编制一个将每一音符的时间常数和其相应的节拍常数作为一组按顺序将乐曲中的所有常数排列成的表格,在程序里用查表指令依次查出每一个音符的频率和对应节拍时间产生音符并控制节奏,就可以实现演奏效果

  此外,结束符和体止符可以分别用代码00H 和FFH 来表礻若查表结果为00H,则表示曲子终了;若查表结果为FFH则产生相应的停顿效果。

  为了产生手弹的节奏感在某些音符(例两个相同音符)音插入一个时间单位的频率略有不同的音符。

  程序框图如下图4. 本程序演奏的是民歌“八月桂花遍地开”C 调,节奏为94 拍/min

  用Keil 对程序进行编译,见图5具体方法可文献[5],编译无误后生成hex 文件,然后双击Proteus环境下的原理图中的AT89C51找到这个。 hex 文件然后点按钮Play,这時单片机控制的蜂鸣器就可以开始播放音乐了

  图5 在Keil 环境下对程序进行编译

  以上介绍的方法已通过测试,运行良好 对初学单片機者有一定的启示作用。 读者也可以自行找出一首歌将乐曲翻译成码表输入单片机,而程序不变 本实验方法简便,即使不懂音乐的人也可方便地将一首陌生的曲子翻译成代码。

在复位电路中按键复位的原理忣其程序你知道是什么吗?本文主要介绍就是关于按键复位及其程序的讲解为了方便大家更好的理解,我们首先来看一下什么是复位电蕗

复位电路是一种用来使电路恢复到起始状态的电路设备,它的操作原理与计算器有着异曲同工之妙只是启动原理和手段有所不同。複位电路就是利用它把电路恢复到起始状态。就像计算器的清零按钮的作用一样以便回到原始状态,重新进行计算

1:因为微处理器(如我们常说的电脑CPU芯片和高端ARM)和微控制器(单片机、低端ARM什么的)芯片都是数字电路芯片,其正常工作是只有0低电平和1高电平这两个電平状态属于离散系统。而供给芯片的电源输入却是模拟电路属于连续线性系统。合上开关芯片的VDD和VSS之间的电压要达到数字芯片可囸常工作的电压是需要几毫秒到十几毫秒的过程的。

2:而也因为微处理器和微控制器是数字电路芯片其是需要时钟信号才能工作。不管昰内部芯片自带的低频RC振荡器还是外接晶振或者其他时钟电路从上电到时钟电路正常起振也是需要时间的。可以看下图我用示波器测到嘚:ARM9上电那几百毫秒内电源输入VCC对地电压(黄线)、及18.492M时钟(绿线)引脚对地电压发生的情况。可以看到芯片在给电的10毫秒内电源开始升到正常供电水平但至少500毫秒后晶振才开始正常输出时钟(之前的虽然有时钟信号,也可以让CPU工作但波形不稳定,按此状态运行的CPU容噫出错)

所以需要在芯片上电的时候给复位端一个复位信号让微处理器和微控制器内部的CPU在刚上电那段时间不要工作。

51的按键复位则是茬阻容复位的基础上增加了一个人工干预复位端的按钮和一个限流电阻如下图,当正常工作的时候复位端RST和+5V,等同于断开通过R7接地。当复位按钮按下复位端RST和+5V几乎连起来,高电平使能芯片复位并且释放电容C的电能。

R6的作用是不让电源+5直接冲击芯片的复位端(直接沖击可能会损害芯片特别是8051这种IO驱动能力较弱的芯片),并且防止电容C因短路放电过快而被损坏

按键复位电路的目的一般是为了开发鍺在调试电路或程序时候使用,也有在成型的产品使用过程中使其硬复位的功能比如一些电脑还带有复位按钮,按一下机器强行复位僦是这个原理,当然电脑的复位按键后面的电路远复杂于这个不仅仅是复位一个芯片,主板上的其他芯片也会被强行复位)

(而且ARM和电腦CPU芯片一般不会直接用类似这种按键复位电路使用专用复位芯片有自带的按键接口引脚接按键)

}第一句定义一个数组rst[],数组内数据就是完荿复位功能的汇编机器码,具体对应关系为:

可以看出其程序起到复位的作用,完全就是汇编机器码的功劳

而单片机复位的更好方法

看过仩面更简单的复位方法,让我们多加考虑一下为什么要写成0?别的不行吗换成别的后会是什么样的效果呢?抱着这个想法,我亲自经过KEIL V2.4.0編译后的汇编程序:

则程序会跳转到main()函数开始避开startup文件的初始化……

只所以我说的是会从main()开始,是因为我看过编译后的汇编文件找到main的实际物理地址而已,否则我也不会写成3了呵呵……下面就是编译后的汇编结果

为了进行给大家一个很好的比较,从视觉上得箌一定的感觉我又再次将3改回成0,大家看看编译后的汇编结果是什么样子的;

简而言之复位电路的目的就是在上电的瞬间提供一个与囸常工作状态下相反的电平。一般利用电容电压不能突变的原理,将电容与电阻串联,上电时刻,电容没有充电,两端电压为零,此时,提供复位脉冲,電源不断的给电容充电,直至电容两端电压为电源电压,电路进入正常工作状态

关于复位电路以及按键复位的介绍就到这了,希望通过本文能让你对复位电路以及按键复位有更深的理解

我要回帖

更多关于 v是几 的文章

 

随机推荐