单片机应用编程技巧 (FAQ)1. C语言和汇编语言在开发单片机时各有哪些优缺点?
答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优势是占用资源少、程序执行效率高。可是不一样的CPU,其汇编语言可能有所差别,因此不易移植。
C语言是一种结构化的高级语言。其优势是可读性好,移植容易,是广泛使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。
对于目前广泛使用的RISC架构的8bit
MCU来讲,其内部ROM、RAM、STACK等资源都有限,若是使用C语言编写,一条C语言指令编译后,会变成不少条机器码,很容易出现ROM空间不够、堆栈溢出等问题。并且一些单片机厂家也不必定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动做都很清楚,而且程序大小和堆栈调用状况都容易控制,调试起来也比较方便。因此在单片机开发中,咱们仍是建议采用汇编语言比较好。
若是对单片机C语言有兴趣,HOLTEK的单片机就有提供C编译器,能够到HOLTEK的网站(
[url]www.holtek.com.cn[/url] )免费下载使用。
2. C或汇编语言能够用于单片机,C++能吗?
答:在单片机开发中,主要是汇编和C,没有用C++的。
3. 搞单片机开发,必定要会C吗?
答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优势是占用资源少、程序执行效率高。可是不一样的CPU,其汇编语言可能有所差别,因此不易移植。
对于目前广泛使用的RISC架构的8bit
MCU来讲,其内部ROM、RAM、STACK等资源都有限,若是使用C语言编写,一条C语言指令编译后,会变成不少条机器码,很容易出现ROM空间不够、堆栈溢出等问题。并且一些单片机厂家也不必定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动做都很清楚,而且程序大小和堆栈调用状况都容易控制,调试起来也比较方便。因此在资源较少单片机开发中,咱们仍是建议采用汇编语言比较好。
而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特色,并具有汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,并且能够直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中普遍采用的由顶向下结构化程序设计技术。此外,C语言程序具备完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。所以,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增长软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。
综上所述,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。因此做为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好可以掌握基本的C语言编程。
4. 当开发一个较复杂而又开发时间短的项目时,用C仍是用汇编开发好?
答:对于复杂而开发时间紧的项目时,能够采用C语言,但前提是要求对该MCU系统的C语言和C编译器很是熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最广泛的一种高级语言,但不一样的MCU厂家其C语言编译系统是有所差异的,特别是在一些特殊功能模块的操做上。若是对这些特性不了解,那调试起来就有的烦了,到头来可能还不如用汇编来的快。
5. 在教学中要用到8088和196芯片单片机教材,请问那里能够找到关于这方面的书或资料?
答:有关这方面的教材,大学里经常使用的一本是《IBM-PC汇编语言程序设计》清华大学出版社出版的,在网上以及书店都是能够找到的,另外网上还能够搜索到不少其余的教材如:《微机原理及汇编语言教程》(杨延双
张晓冬 等编著 )和《16/32 位微机原理、汇编语言及接口技术》(做者: 钟晓捷 陈涛 ,机械工业出版社
出版)等,能够在较大型的科技书店里查找或者直接从网上订购。
6. 初学者究竟是应该先学C仍是汇编?
答:对于单片机的初学者来讲,应该从汇编学起。由于汇编语言是最接近机器码的一种语言,能够加深初学者对单片机各个功能模块的了解,从而打好扎实的基础。
7. 我是一名武汉大学电子科技大3的学生,学了电子线路、数字逻辑、汇编和接口、C语言,可是老是感受很迷茫,觉好象什么都不会。怎么办?
答:大学过程是一个理论过程,实践的机会比较少,每每会形成理论与实践相脱节,这是国内大学教育系统的通病,不过对于学生来讲切不可好高骛远。通常从大三会开始接触到一些专业课程,电子相关专业会开设相关的单片机应用课程而且会有简单的实验项目,那么要充分把握实验课的机会,多多地实际上机操做练习。平时能够多看看相关的电子技术杂志网站,看看别人的开发经验,硬件设计方案以及他人的软件设计经验。有可能的话,还能够参加一些电子设计大赛,借此机会2--3我的合做作一个完整系统,会更有帮助。到了大四毕业设计阶段,也能够选择相关的课题做些实际案例增加经验。作什么事情都有个经验的积累过程,按部就班。
8. 请问做为学生,如何学好单片机?
答:学习好单片机,最主要的是实践,在实践中增加经验。在校学生的话,实践机会的确会比较少,可是有机会的话,能够毕业实习选择相关的课题,这样就能够接触到实际的项目。并且若是单片机微机原理是一门主课的话,相信学校会安排比较多的实践上机机会。有能力的话,能够找一些相关兼职工做作作,会更有帮助。并且单片机开发应用须要软硬件结合,因此不能只知足于编程技巧如何完美,平时也要注意硬件知识的积累,多上上电子论坛网站,买一些相关杂志。可能的话,能够到电子市场去买一些小零件,本身搭一个小系统让它工做起来。
12. 8位机还能延续多久!
答:以如今MCU产品主力仍是在8位领域,主要应用于汽车应用、消费性电子、电脑及PC周边、电信与通信、办公室自动化、工业控制等六大市场,其中车用市场多在欧、美地区,而亚太地区则以消费性电子为主,
并以量大低单价为产品主流,目前16位MCU与8位产品,还有至关幅度的价差,新的应用领域也仍在开发,业界预计,至少在2005年前8位的MCU还是MCU产品的主流。
13. 学习ARM及嵌入式系统是否比学习其它通常单片机更有使用前景?对于一个初学者应当具有哪些相关知识?
答:通常在8位单片机与ARM方面的嵌入式系统是有层次上的差异,ARM适用于系统复杂度较大的高级产品,如PDA、手机等应用。而8位单片机因架构简单,硬件资源相对较少,适用于通常的工业控制、消费性家电等等。对于一个单片机方面的软件编程初学者,应以HOLTEK系列或8051等8位单片机来作入门练习。而初学者应当具有软件编程相关知识,单片机通常软件编程是以汇编语言为主,各家有各家的语法,但大都以RISC的MCU架构为主,其中
RISC (Reduced Instruction Set Computer) 表明MCU的全部指令。都是利用一些简单的指令组成的,简单的指令表明 MCU
的线路能够尽可能作到最佳化,而提升执行速率。另外初学者要具有单片机I/O接口的应用知识,这在于周边应用电路及各类元器件的使用,须配合本身所学的电子学及电路学等。
14. 符合44PIN的80系列8位单片机的MCU有哪些?
答:符合44PIN的80系列8位单片机有Z8674312FSC、Z86E2112FSC、Z86E2116FSC。
15. 请介绍一下MCU的测试方法。
答: MCU从生产出来到封装出货的每一个不一样的阶段会有不一样的测试方法,其中主要会有两种:中测和成测。
所谓中测便是WAFER的测试,它会包含产品的功能验证及AC、DC的测试。项目至关繁多,以HOLTEK产品为例最主要的几项以下:
 接续性测试:检测每一根I/OPIN内接的保护用二极管是否功能无误。
 功能测试:以产品设计者所提供测试资料(TEST PATTERN)灌入IC,检查其结果是否与当时SIMULATION时状态同样。
 STANDBY电流测试:测量IC处于HALT模式时即每个接点(PAD)在1态0态或Z态保持不变时的漏电流是否符合最低之规格。
 耗电测试:整颗IC的静态耗电与动态耗电。
 输入电压测试:测量每一个输入接脚的输入电压反应特性。
 输出电压测试:测量每一个输出接脚的输出电压位准。
 相关频率特性(AC)测试,也是经过外灌必定频率,从I/O口来看输出是否与之匹配。
 为了保证IC生产的长期且稳定品质,还会作产品的可靠性测试,这些测试包括ESD测试,LATCH UP测试,温度循环测试,高温贮存测试,湿度贮存测试等。
成测则是产品封装好后的测试,即PACKAGE测试。便是全部经过中测的产品封装后的测试,方法主要是机台自动测试,但测试项目仍与WAFER
TEST相同。PACKAGE TEST的目的是在肯定IC在封装过程当中是否有任何损坏。
16. 可否利用单片来检测手机电池的充放电时间及充放电时的电压电流变化,并利用一个I/O端口使检测结果在电脑上显示出来?
答:目前市场上的各种智能充电器,大部分都采用MCU进行充电电流和电压的控制。至于要在电脑上显示,好象并不实用,可能只有在一些专门的电池检测仪器中才会用到;对于通常的手机用户来讲,谁会在充电时还须要用一台电脑来作显示呢?要实现单片机与电脑的链接,最简单的方式就是采用串口通信,但须要加一颗RS-232芯片。
17. 在ARM编程中又应当如何?
答:就以嵌入式系统观念为例,通常嵌入式处理器能够分为三类:嵌入式微处理器、嵌入式微控制器、嵌入式DSP(Digital Signal Processor)。
嵌入式微处理器就是和通用计算机的微处理器对应的CPU。在应用中,通常是将微处理器装配在专门设计的电路板上,在母板上只保留和嵌入式相关的功能便可,这样能够知足嵌入式系统体积小和功耗低的要求。目前的嵌入式处理器主要包括:PowerPC、Motorola
68000、ARM系列等等。
嵌入式微控制器又称为单片机,它将CPU、存储器(少许的RAM、ROM或二者都有)和其它接口I/O封装在同一片集成电路里。常见的有HOLTEK
MCU系列、Microchip MCU系列及8051等。
嵌入式DSP专门用来处理对离散时间信号进行极快的处理计算,提升编译效率和执行速度。在数字滤波、FFT(Fast Fourier
Transform)、频谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。
18.
MCU在射频控制时,MCU的时钟(晶振)、数据线会辐射基频或基频的倍频,被低噪放LNA放大后进入混频,出现带内的Spur,没法滤除。除了用layout、选择低辐射MCU的方法能够减小一些之外,还有什么别的方法?
答:在设计高频电路用电路板有许多注意事项,尤为是GHz等级的高频电路,更须要注意各电子组件pad与印刷pattern的长度对电路特性所形成的影响。最近几年高频电路与数位电路共享相同电路板,构成所谓的混载电路系统彷佛有增长的趋势,相似如此的设计常常会形成数位电路动做时,高频电路却发生动做不稳定等现象,其中缘由之一是数位电路产生的噪讯,影响高频电路正常动做所致。为了不上述问题除了设法分割两电路block以外,设计电路板以前充分反省设计构想,才是根本应有的手法,基本上设计高频电路用电路板必需掌握下列三大原则:
 高质感。
 不可取巧。
 不可仓促抢时间。
如下是设计高频电路板的一些建议:
(1)印刷pattern的长度会影响电路特性。尤为是传输速度为GHz高速数位电路的传输线路,一般会使用strip
line,同时藉由调整配线长度补正传输延迟时间,其实这也意味着电子组件的设置位置对电路特性具备绝对性的影响。
(2)Ground做大better。铜箔面总体设置ground层,而链接via的better
ground则是高频电路板与高速数位电路板共同的特征,此外高频电路板最忌讳使用幅宽细窄的印刷pattern描绘ground。
(2)电子组件的ground端子,以最短的长度与电路板的ground链接。具体方法是在电子组件的ground端子pad附近设置via,使电子组件能以最短的长度与电路板的ground链接。
(3)信号线做短配线设计。不可任意加大配线长度,尽可能缩短配线长度。
(4)减小电路之间的结合。尤为是filter与amplifier输出入之间做电路分割很是重要,它至关于audio电路的cross talk对策。
(5)MCU回路Layout考量:震荡电路仅可能接近IC震荡脚位;震荡电路与VDD & VSS保持足够的距离;震荡频率大于1MHz时不需加 osc1 &
osc2 电容;电源与地间要最短位置并尽可能拉等宽与等距的线,于节点位置加上104/103/102等陶瓷电容。
19. Intel系列的96单片机80c196KB开发系统时,都有那些注意事项?
答:一个即时系统的软体由即时操做系统加上应用程序构成。应用程序与做业系统的接口经过系统调用来实现。用80C196KB做业系统的MCU,只能用内部RAM做为TCB和全部系统记忆体(含各类控制表)以及各个任务的工做和资料单元。所以必定要注意如下几点:
(1)对各个任务分配各自的堆迭区,该堆迭区既做为任务的工做单元,也做为任务控制块的保护单元。
(2)系统的任务控制块只存放各任务的堆迭指标,而任务的状态均存放于任务椎栈中。在一个任务退出运行时,经过中断把它的状态进栈,而后把它的堆迭指标保存于系统的TCB中;再根据优先取出优先顺序最高的已就绪任务的堆迭指标SP映象值送入SP中;最后执行中断返回指令转去执行新任务。
(3)各任务的资料和工做单元尽可能用堆迭实现,这样能够容许各任务使用同一个子程序。使用堆迭实现参数传递并做为工做单元,而不使用绝对地址的RAM,可实现可重入子程序。该子程序既可为各个任务所调用,也可实现递回调用。
20. 在demo板上采样电压时,不稳定,采样结果有波动,如何消除?
答:通常来讲,仿真器都是工做在一个稳压的环境(一般为5V)。若是用仿真器的A/D时,要注意其A/D参考电压是由仿真器内部给出,仍是须要外部提供。A/D转换须要一个连续的时钟周期,因此在仿真时不能用单步调试的方法,不然会形成A/D采样值不许。至于A/D采样不稳定,能够在A/D输入口加一电容,起到滤波做用;在软件处理时采用中值滤波的方法。
21. 在车载DVD系统中,如何设计电子防震系统?
答:在车载DVD系统,最好选择高档DVD机,由于高档DVD机都采用电子防震系统(ADVANCEDESP),当记忆缓冲区内的读数下降,先进的电子防震设计会以双速读数系统,作出比正常速度快两倍的读数速率,以减低噪声,即便连续震荡仍可避免跳线状况出现,如今就说说什幺叫电子防震。简单地说:电子防震就是一个信号的储存--释放过程,首先CD要先把信号进行提早读取,也就是咱们见到机子的加速,再把信号储存在RAM中,而咱们在开防震的时候所听到的就是通过RAM的声音,这样就是它的过程。当没有防震时是因为信号是1比1读取的,因此当受到冲击后,就会出现跳音。而当开了防震时,机子受到冲击后,由RAM释放出来的声音使音乐不停地播放,而与此同时,光头迅速进行复位检索,当检索到信号后当即补充,因此不会出现跳音。大概的状况就是这样。可是这样尚未知足用家的要求,因为这种的方法带来的时间短,一般只有3秒,因此跳音的机会仍是蛮高,若是增大RAM又带来造价的增高由于RAM这东西价格较贵,尤为是质量好的。
22. 在电子防震技术中,有那些IC或器件可供选择?
答:在电子防震技术中,最重要的技术之一要数是RAM技术,而一直以来都是由于它的成本问题,因此防震时间都一直不能增长,也就是说RAM自己就有限制,RAM的容量越大,造价就越高。而许多厂家就如何在RAM的限制里获得最大限度的记忆时间展开了开发研究。
23. 如何进行编程能够减小程序的bug?
答:在此提供一些建议,因系统中实际运行的参数都是有范围的。系统运行中要考虑的超范围管理参数有:

物理参数。这些参数主要是系统的输入参数,它包括激励参数、采集处理中的运行参数和处理结束的结果参数。合理设定这些边界,将超出边界的参数都视为非正常激励或非正常回应进行出错处理。
 资源参数。这些参数主要是系统中的电路、器件、功能单元的资源,如记忆体容量、存储单元长度、堆迭深度。在程序设计中,对资源参数不容许超范围使用。
 应用参数。这些应用参数常表现为一些单片机、功能单元的应用条件。如E2PROM的擦写次数与资料存储时间等应用参数界限。
 过程参数。指系统运行中的有序变化的参数。
在上述参数群对一程序编写者而言,须养成良好习惯,在程序的开头,有顺序的用本身喜欢文字参数对应列表来替代,而后用本身定义的文字参数来编写程序,这样在作程序的修改及维护时只在程序的开头作变更便可,不用修改到程序段,才比较容易且不会出错。
24. 有人认为单片机将被ARM等系列结构的嵌入式系统所取代。单片机的生命期还有多长?
答:由于8位单片机与嵌入式系统的ARM在功能结构和单价的差别,故应用层次上就有很大的不一样。 ARM适用于系统复杂度较大的高级产品,如PDA、手机等应用。
而8位单片机因架构简单,硬件资源相对较少,适用于通常的工业控制,消费性家电……等等。评估单片机近期是否会给ARM取代,要观察两个因素:
 芯片成本
因ARM的工做频率较高,电路较庞大,所需的芯片制造工艺要求在0。25U以上,成本较高。8位单片机工做频率相对较低,电路较小,所需的芯片制造工艺在0。5U
便可,成本较低。
 功能定位
ARM的功能较单片机强,但二者定位不一样。就如现阶段不会有人用ARM去做一个简单的工业定时开关。固然,若是二者单价相同也无不可,但现实是有很大的单价差距。
至于未来,因芯片制形成本会不断降低,上述的成本差别影响越来越少!但我估计在日后5年单片机仍有价格优点,仍能存活!但ARM是否会精简架构,下降成本,抢夺低阶市场?我想可能性不大,ARM应该会向上发展。一样,单片机也只能向上发展,如16位,高功能……等。
缘由就是由于芯片制造工艺进步太快。压迫芯片设计往高集成发展。
25. 在单片机C编成时,如何才能使生成的代码具备和汇编同样的效率?
答:若是是使用C语言编程时,不太可能生成的代码具备1:1和汇编同样的效率。
C语言命令要被硬件识别并执行,必须经过编译器编译。编译器分为前端、中端、后端。前端与各类计算机语言写的程序打交道,后端与处理器的基本指令集接轨。因此若是使用C编程时,要达到最高的效率,最好可以很了解所使用的C编译器。先试验一下每条C语言编译之后对应的汇编语言的语句行数,这样就能够很明确的知道效率。在从此编程的时候,使用编译效率最高的语句,这样就能确保单片机C编程的时候一样的功能不一样的C程序,编译效率最高。可是各家的C编译器都会有必定的差别,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的一样功能程度长5-20%,因此不一样厂家的C编译器的编译效率也会有所不一样。
26. ARM单片机和哪一种内核的单片机比较接近?
答:严格的说,ARM不是单片机,是一个嵌入式的实时操做系统。ARM(Advanced RISC
Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。ARM将其技术受权给世界上许多著名的半导体、软件和OEM厂商,每一个厂商获得的都是一套独一无二的ARM相关技术及服务。因此市场上像Intel、IBM、LG半导体、NEC、SONY、菲利浦和国半这样的大公司都有ARM系列,如今不存在什幺ARM单片机和哪一种内核的单片机比较接近的问题。并且因为厂家购买内核后会根据本身芯片应用方向的不一样,自行添加不一样的外挂功能模块,因此,一样内核的芯片其提供的功能是不一样的。
27. 从51转到ARM会有困难吗?
答:从51转到ARM,其实编程之类的原理都是同样的,可是要注意的是ARM是一个RISC的架构,在ARM的应用开放源代码的程序不少,要想提升本身,就要多看别人的程序,linux,uc/os-II等等这些都是很好的源码。
28. 我学过MCS51单片机教材,颇有兴趣,但缺少实践经验,手头没有任何道具可供演练,资金又有限,请问该怎么办?
答:在没有任何条件进行实践时,若是真的有兴趣,能够下载一些具备软件仿真功能仿真软件进行一些编程,像一些作得比较好的51仿真软件应该具备这种功能。HOLTEK的仿真软件HT-IDE3000也具备相应的功能,同时它还具备LCD软件仿真,周边电路的软件仿真。有兴趣的话,也能够去免费下载使用:
[url]http://www.HOLTEK.com.cn/tech/tool/ide.htm[/url]。同时能够到一些电子市场去购买一些简单器件本身练习搭一下电路以增强硬件方面的知识。
29. 若是已经有了针对某MCU的C实现的某个算法,保持框架不变,对核心的部分用汇编优化,有没有一些比较通用的原则?
答:每一个人的编程都有本身的风格与习惯,若是要利用别人的程序,在其中修修改改,若是他的程序并无很好的模块化的话,建议最好不要这幺作,不然原本预期达到事倍功半,说不定反而事半功倍了。要参考他人的程序固然能够,可是首要是要看懂并理解他人程序的算法精髓,而不是在他的基础上打补丁。而关于算法方面的优化,能够购买一些数据结构的书籍,上面有比较详细的说明。
30. 若是准备估计一个算法的MIPS,有什么好的途径?
答:算法的运行时间是指一个算法在计算机上运算所花费的时间。它大体等于计算机执行简单操做(如赋值操做,比较操做等)所须要的时间与算法中进行简单操做次数的乘积。一般把算法中包含简单操做次数的多少叫作算法的时间复杂性。它是一个算法运行时间的相对量度,通常用数量级的形式给出。度量一个程序的执行时间一般有两种方法:

一种是过后统计的方法。由于不少计算机内部都有计时功能,不一样算法的程序可经过一组或若干组相同的统计数据以分辨优劣。但这种方法有两个缺陷:一是必须先运行依据算法编制的程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法自己的优劣。所以人们经常采用另外一种事前分析估算的方法。
 一种是事前分析估算的方法。一个程序在计算机上运行时所消耗的时间取决于下列因素:
(1)依据的算法选用何种策略;
(2)问题的规模。例如求100之内仍是1000之内的素数;
(3)书写程序的语言。对于同一个算法,实现语言的级别越高,执行效率就越低;
(4)编译程序所产生的机器代码的质量。这个跟编译器有关;
(5)机器执行指令的速度。
显然,同一个算法用不一样的语言实现,或者用不一样的编译程序进行编译,或者在不一样的计算机上运行时,效率均不相同。这代表使用绝对的时间单位衡量算法的效率是不合适的。撇开这些与计算机硬件、软件有关的因素,能够认为一个特定算法"运行工做量"的大小,只依赖于问题的规模(一般用整数量n表示),或者说,它是问题规模的函数。
一个算法是由控制结构(顺序、分支和循环三种)和原操做(指固有数据类型的操做)构成的,则算法时间取决于二者的综合效果。为了便于比较同一问题的不一样算法,一般的作法是,从算法中选取一种对于所研究的问题(或算法类型)来讲是基本运算的原操做,以该基本操做重复执行的次数做为算法的时间度量。
算法的MIPS有专门的一门学问,能够去好好参考相关的数据结构书籍。
31. 遥控的编解码思路和设计流程是怎样的?
答:通常来讲完整的遥控码分为头码、地址码、数据码和校验码四个组成部分。头码根据不一样的厂家各不相同,地址码和数据码都由逻辑“1”和逻辑“0”组成。编码的设计目的,就是按照编码规则发送不一样的码值。咱们最多见的码型有SONY、松下、NEC等厂家型号。遥控编码芯片最经常使用的是在空调、DVD、车库门等遥控器上。
设计编码程序能够分为三个部分。
第一部分是了解码型的特性。遥控码的头码和地址码(也称为客户码)是固定不变的,数据码和校验码根据不一样的键值而改变。
第二部分是计算发码时间。遥控码大部分都是由逻辑“1”和逻辑“0”组成,也就是由一串固定占空比、固定周期的方波所组成。一般这些方波的周期是毫秒甚至微秒等级,须要在时间上计算的比较精确。因此选择发码单片机型号的时候,就要考虑到单片机的运行速度是否是够快,以及程序运行时间够不够。
第三部分就是程序的编写。选定单片机型号以后,开始设计程序流程。通常来讲咱们使用I/O口就能够作发码的输出端口。发码程序通常由几个子程序组成,头码子程序、逻辑1子程序,逻辑0子程序以及校验码的算法子程序。一旦咱们获得要发送码的命令后,首先调用头码子程序,而后根据客户码和键值调用逻辑1子程序或者逻辑0子程序,最后调用校验码算法子程序输出校验码。
HOLTEK公司的HT48CA0/HT48RA0、HT48CA3/HT48RA3和HT48CA6是专为遥控器设计的单片机,它们具备专门红外输出口,能够实现绝大部分发码的要求。
设计解码程序也能够分为三部分。
第一部分了解编码波形特性。从分析编码的高、低脉冲宽度入手,了解逻辑“1”和逻辑“0”的波形占空比、周期。了解头码的特性。
第二部分肯定接收方式。通常咱们能够用I/O口查询方法或者INT口中断响应方法来接收编码。这二者的区别是I/O口查询方式比较耗费单片机的运行时间资源,须要不断的去侦测I/O的电平变化,以避免漏掉有效的码值;而INT口中断接收方式则比较节省资源,当外部有电平变化时,单片机才须要去处理,不须要时刻进行侦测。可是INT口中断接收方式不能辨别相同周期不一样占空比的波形特性,当编码所携带的逻辑“1”和逻辑“0”具备这种特性时,就没法经过INT口中断接收方式来辨别了,由于INT中断只是在上升沿或者降低沿的时候才触发。
第三部分将接收的码值存储并分析执行。根据判断高低电平的宽度(定时器或者延时),能够获得码值,也就是咱们所说的解码。通常咱们连续收到3个相同的完整码值,就确认此码的确被发出,并接收成功。当解码结束,根据码值咱们能够判断出是哪一个按键被按下,由此去执行相对的按键功能。
HOLTEK公司的HT48以及HT49(带LCD)系列单片机,均可以符合大多数解码的任务。
32. 在学习单片机的过程当中,如何理解预分频,12时钟模式(6时钟模型)等概念?
答:预分频器的英文是prescaler。它就是将输入的频率信号分频,而后再输出。HOLTEK公司有一款最基本的8位I/O型单片机HT48R05A-1,咱们就以这款单片机为例说明。HT48R05A-1有一个8位向上计数的定时器Counter。系统时钟Fsys(4MHz)进入八阶预分频器(8-stage
Prescaler)进行分频,再进入定时计数器Counter计数。根据软件设置,预分频器能够将Fsys进行2的n次方分频(n=1~8)。举例来讲,若是软件设置为预分频器2分频,那幺预分频器输出的频率就是Fsys/2=2MHz,这个2MHz信号再进入定时计数器Counter。
若是须要HT48R05A-1或者其它各种HOLTEK单片机的详细资料,能够在以下地址下载:
[url]http://www.holtek.com.cn/referanc/htk_book.htm[/url]
。
12时钟模式(6时钟模型)应该就是在MCS51系列中,12个系统时钟为一个机器周期,2个系统时钟为一个状态,即一个机器周期有6个状态。
33. A/D、D/A的采样速率与其它单片机相比有什么优点?
答:HOLTEK A/D Tyep MCU内嵌逐位逼近的A/D转换电路,精度有8bit/9bit/10bit,A/D转换时间最快为76us。
至于D/A,通常是指PWM输出,HOLTEK A/D Type MCU都带有8bit的PWM输出,但HOLTEK
PWM的特色是其输出频率由系统频率决定(既系统频率选定后,PWM频率也就定了),其占空比经过对[PWM]寄存器赋值进行控制,不须要占用定时/计数器资源。
34. 采用AT89S51时,出现了按了复位按钮,RAM中的数据被修改了。这是怎么回事?注:数据放在特殊寄存器以外。
答:若是是RESET脚的复位按钮:通常MCU的RESET复位,其特殊寄存器会被从新初始化,而通用寄存器的值保持不变。
若是复位按钮是电源复位:那就是MCU的上电复位,其特殊寄存器会被初始化,而通用寄存器的值是随机数。
35.
将P2.7用来驱动一个NPN三极管,中间串接了一个1K的电阻。问题是:当我尝试向P2.7写’1’时,发现管脚只能输出大约0.5V的一个电平。这个电路的使用得稳当么?如何正确的使用IO功能?
答:是在仿真时遇到的问题,仍是烧录芯片后遇到的问题?
能够先将P2.7的外部电路断开,测量输出电压是否正常。若是断开后输出电压正常,那就说明P2.7的驱动能力不够,不能驱动NPN三极管,应该改用PNP三极管(通常在MCU应用中,都采用PNP方式驱动)。若是断开后输出电压还不正常,那有多是仿真器(或芯片)已经损坏。
36.
在作充电管理的时候,提升pwm的频率每每以牺牲精度为代价,若是用的AT90S4433(avr)、78P458(elan)频率分别作到16kHz(8bit)和32kHz(8bit),而但愿作到的是100kHz(8bit以上),诸如atiny15那样。怎么办?
答:你所说的PWM是经过定时/计数器来控制其频率和占空比的,因此要提升频率,必然会下降精度。若是要提升PWM的频率,只能经过提升系统振荡频率来解决。
37. 汽车电子用的单片机是8位多,仍是32位?如何看待单片机在汽车电子市场中的前景?
答:现今汽车制造也是一个进步很快的工业,特别是电子应用于汽车上,令多种新功能得以实现。
总的来讲,汽车电子应用分三部份。
 汽车发动机控制:限速控制,涡轮增压,燃料喷注控制等。
 汽车温馨装置:遥控防盗系统,自动空调系统,影音播放系统,卫星导航系统等。
 汽车操控和制动:刹车防抱死系统(ABS),循迹系统(TCS),防滑系统(ASR),电子稳定系统(ESP)等。
汽车上的各系统繁多,且突飞猛进,故利用何种单片机是依各系统规格,要求不一,但有同样可确定是该单片机要符工业规格,才能忍受汽车应用的恶劣环境,高温,电源干扰,可靠度要求。不一样档次的汽车其功能配置相对亦有差异,故8位单片机在较低阶的系统如机械控制,遥控防盗等应该还有空间,但高阶的系统如影音、导航及未来的无人驾驶,就非通常单片机能实现。
因汽车工业现阶段由欧美日数个大集团所把持,相关的汽车电子配件各集团会挑选单片机大厂合做,
故汽车内置的电子系统亦由单片机大厂把持,市场只剩外置系统如遥控防盗,影音导航供小厂开发。
38. 在使用三星的s3c72n4时,以为它的time/counter不够用。如今要同时用到3个counter,该怎么办?
答:您是须要三个外部counter仍是须要三个定时器?若是是三个定时器标志的话,能够取这三个定时最基本的时基做为timer的基础计数,而后以这个时基来计算这三个须要的计数标志的flag,在程序中只须要查询flag是否到,再采起动做。
若是要3个外部脉冲计数的话,这个有必定的难度,若是外部脉冲不是很频繁,能够考虑经过外部中断进行,可是这个方法必须是外部脉冲的频率与MCU执行速度有必定的数量级差,不然mcu可能没法处理其它程序,一直在处理外部中断。
39.
在芯片集成技术日益进步的今天,单片机的集成技术发展也很迅速,在传统的40引脚的基础上,飞利浦公司推出20引脚的单片机系列,使不少的引脚能够复用,这种复用技术的使用在实际应用中会不会影响其功能的执行?
答:如今有不少品牌的单片机都有引脚复用功能,不止飞利浦一家,应该说这个方式前几年就已经有了。在实际应用中不会影响其功能的执行,可是要注意的是,有的MCU若是采用复用引脚的话,该引脚会有一些应用上的限制,这在相应的datasheet里面都会有描述,因此在系统规划的时候都要予以注意。
40. Delta-Sigma软件测量方式,是什么概念?
答:Delta-Sigma原理通常应用在ADC应用中。具体来讲,Delta-Sigma
ADC的工做原理是由差动器、积分器和比较器构成调制器,它们一块儿构成一个反馈环路。调制器以大大高于模拟输入信号带宽的速率运行,以便提供过采样。模拟输入与反馈信号(偏差信号)进行差动
(delta)比较。该比较产生的差动输出馈送到积分器(sigma)中。而后将积分器的输出馈送到比较器中。比较器的输出同时将反馈信号(偏差信号)传送到差动器,而自身被馈送到数字滤波器中。这种反馈环路的目的是使反馈信号(偏差信号)趋于零。比较器输出的结果就是1/0
流。该流若是1密度较高,则意味着模拟输入电压较高;反之,0密度较高,则意味着模拟输入电压较低。接着将1/0流馈送到数字滤波器中,该滤波器经过过采样与抽样,将1/0流从高速率、低精度位流转换成低速率、高精度数字输出。
简而言之,Delta就是差动,Sigma就是积分的意思。Delta-Sigma软件测试,个人理解应该是经过软件模拟差动积分的过程。具体来讲,就是侦测外部输入的电压(或者电流)信号变化,而后经过软件积分运算,得出外部信号随时间变化的基本情况。
41. 一般采用什么方法来测试单片机系统的可靠性?
答:单片机系统能够分为软件和硬件两个方面,咱们要保证单片机系统可靠性就必须从这两方面入手。
首先在设计单片机系统时,就应该充分考虑到外部的各类各样可能干扰,尽可能利用单片机提供的一切手段去割断或者解决不良外部干扰形成的影响。咱们以HOLTEK最基本的I/O单片机HT48R05A-1为例,它内部提供了看门狗定时器WDT防止单片机内部程序乱跑出错;提供了低电压复位系统LVR,当电压低于某个容许值时,单片机会自动RESET防止芯片被锁死;HOLTEK也提供了最佳的外围电路链接方案,最大可能的避免外部干扰对芯片的影响。
当一个单片机系统设计完成,对于不一样的单片机系统产品会有不一样的测试项目和方法,可是有一些是必须测试的:
 测试单片机软件功能的完善性。 这是针对全部单片机系统功能的测试,测试软件是否写的正确完整。
 上电掉电测试。在使用中用户必然会遇到上电和掉电的状况,能够进行屡次开关电源,测试单片机系统的可靠性。
 老化测试。测试长时间工做状况下,单片机系统的可靠性。必要的话能够放置在高温,高压以及强电磁干扰的环境下测试。

ESD和EFT等测试。能够使用各类干扰模拟器来测试单片机系统的可靠性。例如使用静电模拟器测试单片机系统的抗静电ESD能力;使用突波杂讯模拟器进行快速脉冲抗干扰EFT测试等等。
固然若是没有此类条件,能够模拟人为使用中,可能发生的破坏状况。例如用人体或者衣服织物故意摩擦单片机系统的接触端口,由此测试抗静电的能力。用大功率电钻靠近单片机系统工做,由此测试抗电磁干扰能力等。
42. 在开发单片机的系统时,具体有那些是衡量系统的稳定性的标准?
答:从工业的角度来看,衡量系统稳定性的标准有不少,也针对不一样的产品标准不一样。下面咱们大概介绍单片机系统最经常使用的标准。
 电试验(ESD)
参考标准: IEC 61000-4-2
本试验目的为测试试件承受直接来自操做者及相对对象所产生之静电放电效应的程度。
 空间辐射耐受试验(RS)
参考标准:IEC 61000-4-3
本试验为验证试件对射频产生器透过空间散射之噪声耐受程度。
测试频率:80 MHz~1000 MHz
 快速脉冲抗扰测试(EFT/B)
参考标准:IEC 61000-4-4
本试验目的为验证试件之电源线,信号线(控制线)遭受重复出现之快速瞬时丛讯时之耐受程度。
 雷击试验(Surge)
参考标准 : IEC 61000-4-5
本试验为针对试件在操做状态下,承受对于开关或雷击瞬时之过电压/电流产生突波之耐受程度。
 传导抗扰耐受性(CS)
参考标准:IEC 61000-4-6
本试验为验证试件对射频产生器透过电源线传导之噪声耐受程度。
测试频率范围:150 kHz~80 MHz
 Impulse
脉冲经由耦合注入电源线或控制线所做的杂抗扰性试验。
43. 在设计软体时,大多单片机都设有看门狗,须要在软体适当的位置去喂狗,以防止软体复位和软体进入死循环,如何适当的喂狗,即如何精确断定软体的运行时间?
答:大多数单片机都有看门狗定时器功能(WDT,Watch Dog
Timer)以免程序跑错。HOLTEK有一款基本I/O型单片机--HT48R05A-1,咱们就以它为例作个说明吧。
首先了解一下WDT的基本结构,它实际上是一个定时器,所谓的喂狗是指将此定时器清零。喂狗分为软件和硬件两种方法。软件喂狗就是用指令来清除WDT,即CLR
WDT;硬件喂狗就是硬件复位RESET。当定时器溢出时,会形成WDT复位,也就是咱们常说的看门狗起做用了。在程序正常执行时,咱们并不但愿WDT复位,因此要在看门狗溢出以前使用软件指令喂狗,也就是要计算WDT相隔多久时间会溢出一次。HT48R05A-1的WDT溢出时间计算公式是:256*Div*Tclock。其中Div是指wdt预分频数1~128,Tclock是指时钟来源周期。若是使用内部RC振荡做为WDT的时钟来源(RC时钟周期为65us/5V),最大的WDT溢出时间为2.1秒。
当咱们获得了WDT溢出时间Twdt后,通常选择在Twdt/2左右的时间进行喂狗,以保证看门狗不会溢出,同时喂狗次数不会过多。
软件运行时间是根据不一样的运行路线来决定的,若是能够预见软件运行的路线,那么能够根据T=n*T1来计算软件的运行时间。n是指运行的机器周期数,T1是指机器周期。HOLTEK单片机是RISC结构,大部分指令由一个机器周期组成,只须要知道软件运行了多少条指令,就能够算出运行时间了。HOLTEK的编译软件HT-IDE3000中,就有计算运行时间的工具。可是对于CISC结构的单片机,一条指令能够由若干个机器周期组成,那么就须要根据具体执行的指令来计算了。
44.
咱们是一家开发数控系统的专业厂,利用各类单片机和CPU开发了不少产品,在软件开发上也采用了不少通用的抗干扰技术,如:软件陷阱、指令允余、看门狗和数字滤波等等,但实际运用中仍是很不可靠,如:常常莫名其妙地死机、程序跳段、I/O数据错误等,而且故障的重复性很不肯定,也不是周期性地重复。每每用户使用中出现故障,但又没法重现,很让人头痛。反复检查硬件也设查出缘由,因此对软件的可靠性非常怀疑。怎么办?
答:防止干扰最有效的方法是去除干扰源、隔断干扰路径,但每每很难作到,因此只能看单片机抗干扰能力够不够强了。单片机干扰最多见的现象就是复位;至于程序跑飞,其实也能够用软件陷阱和看门狗将程序拉回到复位状态;因此单片机软件抗干扰最重要的是处理好复位状态。
通常单片机都会有一些标志寄存器,能够用来判断复位缘由;另外也能够本身在RAM中埋一些标志。在每次程序复位时,经过判断这些标志,能够判断出不一样的复位缘由;还能够根据不一样的标志直接跳到相应的程序。这样能够使程序运行有连续性,用户在使用时也不会察觉到程序被从新复位过。
能够在定时中断里面设置一些暂存器累加,而后加到预先设定的值(一个比较长的时间),SET标志位,这些动做都在中断程序里面。而主程序只须要查询标志位就行了,可是注意标志位使用后,记得清除,还有中断里面的时基累加器使用之后也要记得清除。
来自:[机器人技术论坛]-机器与智能网