单片机设计经验技巧精华集锦(六)

最新更新时间:2013-05-27来源: 互联网关键字:单片机  设计经验  精华集锦 手机看文章 扫描二维码
随时随地手机看文章
2:C51为什么要嵌套汇编

  51单片机一个显著优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合ISO7816协议的cpu卡的读写,对时序要求比较严格。其实就是用io脚做出来的同步半双工串口。支持cpu卡的程序一般比较庞大,需要用c51来组织,但是由于c编译的不确定性,必须把底层程序封装成汇编语言模块嵌入到工程中。这就带来几个问题:如何声明函数、参数如何传递等。限于篇幅,不能说得很细。下面举例:

  汇编程序单独保存一个文件,加入到工程中,函数如下:

  _proc_a:

  mov a, r7

  inc a

  mov r7, a

  ret

  用c语言在.h文件中声明: extern unsigned char proc_a(unsigned char val);

  调用时形如: retvalue = proc_a(0x11);

  说明:

  a:汇编程序如果带参数,则需要在汇编程序前多加一个下划线。而声明它的地方不用加(伟福编译器这么要求的)。

  b:函数的形参中第一参数用R7传递,函数返回值用R7返回,这是C51的通用规范。其他参数都有相应规定。函数可以返回一个位,用psw的c位返回。

  c:上面的语句,执行顺序是把0x11给R7,然后跳转子程序,子程序将它加1后送回。

  d:函数跳转到汇编程序时,本区的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考虑调用后是否要恢复这些常规资源。上例中,A的值被函数使用了,编程者不必恢复调用前的值。

  3:51单片机的P0口特殊之处

  许多新手都碰到这个问题,其实很简单,这涉及到芯片的io脚是怎么做出来的。这对硬件工程师来说十分重要。TTL的io脚模型:

  

  P1,P2,P3口都可以理解成左图,注意vcc下面有个电阻,因此可以理解成:引脚输出1的能力弱。地那边没有电阻,可以理解成引脚吸入电流能力强。而P0口,可以理解成右图。这就是集电极开路输出,也叫OC输出。可以看出,当CTR=1时,三极管导通,引脚被接地;当ctr=0时,三极管截止,引脚浮空,也叫三态。这个端口这么做的目的是考虑P0口肩负读写数据和地址复用,这个关系要仔细看懂cpu时序图。因此,P0口要加合适的上拉电阻,绝不要加下拉电阻。上拉电阻的选择要看外部负载情况。

  4:P1-3口如何输入输出

  从上节的左图可以看出。做输出时,ctr=1则输出强信号0,ctr=0则输出弱信号1。当io脚做输入时,应使ctr=0,这样三极管截止。外部信号如果是1,则上拉电阻加强了这个1,单片机就会读到1。当外部信号为0时,注意,必须将上拉电阻的上拉作用全部抵消,才能在引脚上得到0。

  因此,对于程序来说,把io脚置1就处于接收状态,当然也是输出1状态。程序置io口为1,读取的信号是不是1就依靠外部电路了,如果外部电路没有“吃掉”上拉电阻的电流,则读取得到1,反之,虽然程序置io脚为1,但是读取得到的就是0。

  因此,如果用io脚的高电平驱动外部电路时,要小心外部电路把这个1“吃掉”从而输出不了1。而作为输入时,为0电平的外设必须足够有能力将io脚拉低。所以,用io脚直接点亮led的时候,最好用反逻辑,就是输出0,让led亮。这样能保证驱动能力。就是io脚接led的负端,led的正端过电阻接vcc。

  因此,io脚输出1时,外部电路将它强行接地是没有关系的,而io脚输出0的时候,外部电路强行接电源就会把io脚损坏。所以,程序加电之后,一般把所有io口都写成1:MOV P0,0FFH。

  P3口引脚复用,必须引脚都处于输出1状态。例如,把RXD脚输出0,则它什么数据都读不进来了,笔者早期曾调试一整天才发现串口收不到数据是没有把RXD置1的原因,把时间都浪费在外围了,当时很是汗颜。

  5:有关晶振

  单片机的晶振在内部可以简化成一个反向器。当晶振输入脚XI刚过坎压、被认为是1的一瞬间,输出脚XO就输出0,这个0会带动晶振使XI电压下降,当降低到坎压被认为是0的一瞬间,输出脚XO就输出1。这样周而复始。

  因此,用示波器观察正常工作的晶振输入脚XI时,得到的是一个不高不低的近似水平线。而XO则是幅值很大的正弦波。测量晶振输入脚XI时,示波器表笔要打在X10档上,否则,表笔就能把晶振弄停。

  因此布线时,晶振输入脚XI要尽量靠近晶振,而XO脚可稍远。同时XO具有一定的驱动能力,某些芯片可以用它驱动其它时序电路(不推荐这么做,因为系统可靠性下降)。

  写到这里,才发觉51单片机的问题太多了,这篇文字简直就是沧海一粟。以后再补充吧,另行成文。

  四、单片机经验之谈

  一、前言

  很多单片机初学者在与我交流的时候总是的一句话是我现在是单片机初学者,我怎样才能更快的学好单片机,学习单片机有市场不,对于这个问题现在就我自己如何学单片机,如何入门,如何熟练,整个过程谈谈自己的想法。先说说单片机,现在用的比较多的的MCS-51的单片机(但是考虑到成本及引脚资源在实际开发中用的单片机型号不一),它的学习资料非常多,且学习成本非常低,如果你听说企业里用的是什么什么芯片,但是不知道,你问过没有,那个仿真器需要多少钱,51单片机对于智能控制入门来说是非常好的,一线下载程序,ARM太神秘,PLC太高贵,想来想去还是51。那怎样才能更快更好的学好单片机呢?单片机这门课是一项非常重视动手实践的科目,而且单片机也是一门集计算机编程与电子技术为一身的学科,如果你是单片机高手,那么说明你也是计算机编程和电子技术高手。

  二、学习单片机时候一定要看书

  不能总是看书,但是学习它首先必须得看书,那这不很矛盾。因为从书中你需要大概了解单片机各个功能寄存器(比如引脚控制寄存器、定时、中断、串口相关寄存器),控制单片机的核心是用程序去控制单片机的各个功能寄存器,给寄存器赋值二进制数据0或者1,这样一来对于引脚寄存器单片机可以根据二进制数据0和1输出高低电平控制外部设备,对于内部资源寄存器,单片机也通过二进制数据0和1使用单片机内部的功能。比如单片机引脚寄存器P1,语句P1=0xfe;(MOV P1,#0FEH)。说明现在控制单片机P1口的第一个引脚输出低电平,其他引脚输出高电平。比如中断中断允许寄存器IE,语句IE=0x81;(MOV IE,#81H) 则说明控制中断打开总开关和外部中断0的子开关。至于看书,只需大概了解单片机各管脚、各个特殊功能寄存器都是干什么的?能实现什么样的功能?这个非常重要,这也许是看书的最主要的目的。第一次,第二次你可能看不明白,但这不要紧,因为还缺少实际的感观认识。通过接下来的实验就可以非常感观的认识,在这个过程一定要花时间,学习程序不能硬背,但是学习寄存器一定要下功夫,理解他的功能所在。推荐一本书,就这一本就足够了,书名是《例说8051》有汇编语言和C语言版本的,非常强悍的一本书,但是我用一个五一放假的时间看完了这本书,看完后,觉得自己已经是单片机高手了。书中图文并茂,内容安排紧张有序,并非市面上很多说教的技术文档式的书,什么学完概念,学指令,学完指令学接口,学完接口才知道,原来学习单片机是学天书。根据书本的安排循序渐进的看完前两章,然后一定是实践,一定是实践啊,这是非常关键的一步,在战场上上纸上谈兵的列子很多,在学习单片机也一样,很多相关专业的研究生甚至博士生直到毕业都不清楚单片机的IO口的分布,不知道分布谈何说开发呢?更有一些所谓的单片机高手只停留在编程,以为了买了一块高级学习板,练习完了里面所有的程序,感觉自己排第二没人敢拍第一,觉得下一步不知道如何学习单片机了。殊不知,他们中的很多人到最后单片机LED的电阻加多大都不清楚更不用说单片机的引脚分布,你说,如果这样去开发那不是“草菅人命”啊。不是纸上谈兵是什么啊。

  三、学习单片机准备什么所以啊?

  学习单片机看书不够,实践也要从实际出发,现在的技术太模块了,什么都可以模块,模块的到最后,技术人员都成了只会用了,祖先的留下的知识,基础的知识该知道还是一定要知道的啊。 毕竟学习单片机的最终目的是开发,是通过创造智能控制的实物,体现自己的价值。关于实践有两种方法可以选择一种方法:购买一块51单片机的实验板,不要求功能太的,对于初学者来功能非常多的那种板子,上面有很多东西你这辈子都用不着,更有实验板为了增加功能,降低成本,实验板上到处用的是贴片元件,双面布线,越复杂就越有水平,好像他们在设计的时候就想着,学习单片机只要根据我的提示下载程序就可以了,更有甚者将下载器和集成了实验板上。很多初学者学完单片机还认为,原来单片机不是一块芯片,是老教材上经常提到的使用已经不到的单板机。我觉得初学单片机有这几个模块就够了,剩下的得自己去开发。流水灯、数码管、键盘、蜂鸣器、串口通讯、AD等这就差不多了。如果上面我提到的这些,你能熟练应用,那可以说对于单片机方面的硬件你已经入门了,剩下的就是自己练习设计电路,不断的积累经验。设计的电路的时候必须要学习下PCB板设计软件,毕竟现在做开发要产品批量化还得电脑辅助设计啊,手工的效率太低了。但是在学习的过程中建议自己动手焊接。在焊接前一定要了解电路连接,网上随便搜索可以找到很多电路原理图,但是都不一定都能用,所以建议备一块面包板,有了它你在焊接电路前就可以先测试下了。如果在面包板上测试成功,后来的焊接你就志在必得了,如果失败,大不了重新再找一个。只要过了第一关,后面的路就好走,万事起步难。方法二:你身边如果有单片机入门者,动手能力比较强,请他帮忙,搭个简单的单片机最下电路,哪怕是控制一个LED工作的电路。对于他们来说,做个单片机的最小系统板是轻而易举,而对于初学者可就难多,这中间的一层窗户纸破了就什么都简单了。因为只有对硬件了解了,才能熟练运用。只有知道程序是和下载到单片机内部的,才会清楚为什么要写单片机程序,这个动力来自于哪里,来至于心里有底。单片机编程就是与单片机对话,如果不知道对方谁,有没有再听,你还会有说话的激情吗。当然了如果没有这样的人,还是那句话,在网上多找几个最小电路电路原理图,在面包板上焊接就可以了。当然了这个也不会的,那建议你一定要买一块实验板,以后单片机的学习实验及项目测试验都用的上。

  四、如何迈入单片机开发世界

  有了单片机实验板你就要多练习,最好是自己有台电脑,少下载几部电影,少网络游戏,把实验板和电脑连好,安装上必备的软件,下载参考程序,并修改参考程序,从最简单的交通灯实验做起,等你发现你能控制交通灯,并了解交通的软硬设计的时候你已经入门了,你会发现单片机是多么迷人的东西啊,这不是在学习知识,而是在提升自我的价值。用途那么广的交通的设计都不在话下了,你还会觉得你没有学到东西吗。还会觉得自己什么都不会吗?计算机编程、电子技术的专业知识都用上了啊。

  当你编写的程序按你的意愿实现时,你比做什么事都开心,那种学习的收获感和成就感还有充实感是非常难得的。然后让数码管亮起来显示你所需要的数字。这两部分会了以后,你已经不能自拔了,你已经开始考虑你这辈子要走哪一行了。就这样学习,在写程序的时候你肯定会遇到很多问题,而这时你再去翻书找,这其中你会找你之前学过的编程的书,还有数电模电的书,你会发现原来之前学的知识还是有用的。遇到不懂再去找以前学过的书本查阅这才是 “温故而知新,可以为师矣”的大道理啊。

  知识必须用于现实生活中,解决实际问题,用单片机设计个简易的家电定时器、红外遥控器什么,这样才能发挥它的作用,好好想想,上了这么多年大学,探索了那么久,犹豫徘徊,天天上课,在课堂上学到了什么?是不是为了期末60分的考试而忙碌,侥幸靠了90分,很高兴啊,在别人面前吹自己专业知识如何如何学习的好,殊不知,大学考试不像高中考试啊,那了奖学金又怎样。但是下学期开学回来一想,所学的知识已经忘记的一干二净。学到什么了?为什么要推荐学习单片机,因为单片机是工科生学的,集合计算机编程电子技术及多门控制语言为一体的学科,与其说学习是在学习单片机,不如说是在学习一个大学科。

  五、学习单片机是汇编编程还是C语言编程 关于用汇编和C语言编程的问题。这个问题困恼很多人,可能主要是学校教学和部分教材的教育引导引起的吧,大一开了C语言编程,没等学生知道到底C语言有什么实际的用途,马上其他的语言一起来过来了。即使是开始了专门的单片机课程,但是课程的内容与技术文档很相识,指令很多,但是完整的不多,所以学完了也不知道,到底为什么要学习编程。很多同学大一就开设了C语言的课,我也上过,但是那时候就是天天几乘几,几加几啊,求个阶乘啊,用C语言去解决小学数学问题,每周两次上机,对着书本不停的敲打,下课了也不知道自己到底掌握了什么,掌握了这个有什么用途。学完了有什么用?如果在面试的时候,老板问,你学过编程吗,你脑子里马上是什么“C语言,VC什么VB。很多,什么C语言是基础是面向工程的,什么VC是高级面向对象的”,但是老板又问,你能将你所学习的C语言应用到实际中不,比如设计一个定时报警器的C语言。这下傻了,学校里没有学过啊。

  单片机编程用C语言或汇编语言都可以,但是我建议用C语言比较好,模块化管理编程方便,移植性强,适合编写大程序。如果原来有C语言的基础那学起来会更好,如果没有,也可以边学单片机边学C语言。虽然很多人是从汇编语言开始接触单片机的,但是写小程序汇编语言还是简单的,如果要实现一些算法,那汇编语言就不简单了。虽说C语言编译以后代码量明显比汇编长,而且执行效率也没有汇编语言高,但是在以前单片机开发中芯片工艺的限制,及单片机主频的限制,很多单片机内部存储器小的可伶,主频也小得可伶。但是现在不一样了,芯片内部的存储器根不不在乎这点差别。主频也越来越高。

  那汇编语言是不是不学了呢?不是的,一定要学习,有两方面首先入门单片机的时候要用汇编语言,它的语法简单。第二如果你要做单片机的程序的高级设计师,那汇编语言是非掌握不可的,很多像高级单片机ARM都是汇编语言作为引导代码的,还有就是很多新出品的单片机起先也是先有汇编语言编译器之后才有C语言编译器。所以,我觉得对于单片机学习汇编语言入门,C语言精通,汇编语言再精通。最后,对于单片机的学习,入门为先,入门了以后就要去关注市场,关注企业,企业需要什么样的人才,我想有了基础以后在面试之前了解下企业所需要的单片机类型,很快就上手了,毕竟学习是相同的。

关键字:单片机  设计经验  精华集锦 编辑:神话 引用地址:单片机设计经验技巧精华集锦(六)

上一篇:单片机设计经验技巧精华集锦(五)
下一篇:如何看懂电路图(六):数字逻辑电路详解

推荐阅读最新更新时间:2023-10-12 20:46

基于EMP78P156单片机的RC测温的实现
以前做一个电熨斗的项目,其中要使用到温度的测量,但是为了节省成本,要用不带AD的单片机来控制。测温部分是利用RC来测温,就是利用热敏电阻结合RC电路来实现温度的测量,可以精确到1℃。本电路采用了台湾义隆单片机EM78P156来实现温度的测量和控制。 一、总体控制电路: 图 1 二、 RC测温原理: 利用单片机I/O口来实现RC测温,电路很简单,而且也不难实现,最主要的是要有个概念,如何实RC测温,也就是RC测温的原理。这里具体的介绍一下,可以在这个原理基础上进行修改很扩展为多路的测温。如下图(2) 图中: P1.0、P1.1和P
[单片机]
基于EMP78P156<font color='red'>单片机</font>的RC测温的实现
动力系统的下一步发展
尽管电动汽车和混合动力汽车一路高歌猛进,传统的汽油和柴油动力汽车在未来许多年内仍将是市场的主流。预计到 2023 年,传统动力汽车仍将在全球轻型汽车产量中占据 85% 份额,如下图所示。 但是,这并不意味着汽车的动力系统控制要求将会一成不变。汽车制造商和他们的供应商正面临着日益严格的燃油经济性和尾气排放控制要求。在近期发生的柴油发动机排放丑闻之前,这种情况就早已出现,只不过现在更加严格。 这导致汽车厂商需要更多、更复杂的后处理技术,而过去未采用后处理技术的车辆也需要安装后处理系统。为了确保这类后处理系统能够妥善工作,我们显然需要更加复杂的动力系统控制。事实上,梅赛德斯从 2014 年起就已经开始为某些搭载汽油发动机的车型安
[汽车电子]
动力系统的下一步发展
MPC5676R:多核32位MCU汽车动力总成解决方案
Freescale公司的MPC5676R是采用 Power Architecture技术的32位多核Qorivva MCU,主要用在汽车动力总成系统。 MPC5676R集成了两个180MHz 处理器 ,三个第二代高性能时间处理器单元(eTPU2),6MB闪存,128路定时器(3×eTPU2和1×eMIOS),四个 ADC ,384kB RAM(数据存储)以及不需要外接元件进行 爆震检测 的信号处理电路。主要用在动力总成引擎控制、汽油直接注入、混合动力汽车、爆震检测、传动控制等。 32位Qorivva MPC5676R微控制器(MCU)基于Power Architecture技术,是飞思卡尔公司的第一款用于先进动力总成控制
[单片机]
MPC5676R:多核32位<font color='red'>MCU</font>汽车动力总成解决方案
意法半导体提供集成数字滤波器的新STM32L4微控制器
eeworld网消息,中国,2017年5月11日 —— 意法半导体开始量产STM32L45x超低功耗微控制器(MCU)。新微控制器配备基于简单易用、价格亲民的STM32Cube平台的开发生态系统。 STM32L451、STM32L452和STM32L462产品线集成Sigma-Delta调制器(DFSDM)用数字滤波器,可以在一款价格低廉的微控制器上实现高级音频功能,例如,噪声抑制或声音定位。高达512 KB片上闪存和160 KB SRAM为代码和数据提供充足的存储空间。 新系列微控制器还集成真随机数发生器,让联网智能设备等注重安全应用的开发变得更容易。STM32L462还进一步加强了安全设备开发支持,集成一个硬件AES-
[半导体设计/制造]
50条STM32单片机学习笔记
1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2 1,意思是APB2接高速设备 2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用 3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz 4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC(Low Speed Inte
[单片机]
50条STM32<font color='red'>单片机</font>学习笔记
采用C51与插拔式FLASH闪存设计无纸记录仪
  ATMEL公司推出的带有看门狗功能的单片机AT89C55WD带有20K的程序存储器,是8051系列中一款较为先进的产品,其看门狗功能可以大大提高产品的稳定性,大容量的内部程序存储器可以容纳功能丰富的软件。   以往的许多无纸记录仪均采用3.5英寸软盘作为数据存贮介质,但软盘存贮的可靠性差、存储容量有限、成本较高等诸多缺点实在难以克服。   作为一种高科技的非易失性存储设备,FLASH闪存首先在数码相机、PDA、移动电话等数字产品当中得到了应用,随着工艺的进步和价格的下降,逐步向其他应用领域扩展,其容量大、功耗低、速度快、不易受损等优点正受到人们越来越多的青睐,而且最大的好处是,随着技术水平的进步,FLASH闪存的容量也在不断
[应用]
采用单片机的沥青智能软化点测试仪简介
引言 直径为10mm的沥青球试样安放于浸泡在传热介质中的支架上,当加热到一定温度时,沥青熔化,此时从试样上会有沥青溶液通过支架上的孔滴下,被装在其下面的光电检测装置检测到,这时的温度就为沥青的软化温度。整个过程在1000mL的烧杯里进行。 1系统硬件结构 整个系统为以AT89C51单片机为核心的控制器,硬件结构框图见图1所示,可以分为以下几个部分。 (1)单片机及键盘、显示器等外围电路采用AT89C51单片机芯片作为处理器,其片内自带4KB的E2PROM,且指令系统与Intel MCS-51完全兼容。本系统采用汇编语言编程,控制程序容量约2KB,所以不需另外扩展程序存储器,使得控制电路得到简化,另外
[单片机]
采用<font color='red'>单片机</font>的沥青智能软化点测试仪简介
基于MSP430系列单片机的CAN总线接口转换卡设计
摘要:IT公司的MSP430系列单片机是一种超低功耗的混合信号控制器,具有丰富的片内外设,有极其广阔的应用范围。介绍基于MSP430系列单片机的RS232/RS485 CAN总线通信转换接口的设计与实现,重点讨论其硬件配置和软件功能,给出电气原理和软件流程。 关键词:MSP430;CAN总线;接口;转换卡;设计 1 引言 控制器局域网(Controller Area Network,简称CAN)是德国奔驰公司20世纪80年代为解决汽车众多控制设备与仪器仪表之间的数据交换开发的一种串行通信协议。它作为现场总线的一种广泛应用于各种工业现场,根据不同的需要或以主从方式、或以多主方式工作。CAN总线使用的通信介质为双绞线或其他电缆,传
[应用]
小广播
最新模拟电子文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved