您的位置 首页 嵌入式

福利:资深单片机工程师的开发经验总结

福利:资深单片机工程师的开发经验总结-目前介绍单片机应用的文章很多,但介绍单片机开发工具制作的文章却较少。由于单片机是一门实践性很强的课程,如果采用传统的开发模式,则要购买价格昂贵的仿真器、编程器等开

  1、与发光二极管串联的电阻(排阻)的核算和选取,一般发光二极管的正常发光的电流是3~10mA,在发光二极管上发生的压降是1.7

  V(轨管) R=(5-1.7)/3~10 (k)

  2、单片机TTL电平 高电平:+5V;低电平:0V。

  RS232串口电平 高电平:—12V ;低电平:+12V。 能够通过MAX232电平转化芯片,转化之间的电平。

  3、单片机上电I\O口的寄存器为高电平,其他寄存器为低电平。

  4、三极管的开关效果:在B、E直接正向电压,E、C是导通的。

  5、蜂鸣器:

  1) 有源蜂鸣器直接接上额外电压就能够接连发声。

  2)无源蜂鸣器和电磁扬声器相同,需求接在音频输出电路中才干发声。

  3)有源蜂鸣器带振动源,无源的不带。

  4)有源蜂鸣器的抱负信号是直流电。

  5)无源蜂鸣器的抱负信号为方波信号。

  方波发声函数:void beep()

  { fmq=0;

  delay 500us();

  fmq=1;

  delay 500us();

  }

  6、核算单片机指令周期:

  指令周期(us) = 12 / 晶振频率(Mhz)

  选用12M的晶振,一个指令周期为1us

  7、89C51的芯片最高支撑24M的晶振

  以上是笔者对单片机开发的初探,结合自己的实践做的几点概括,但笔者和咱们都会感觉到不是很过瘾,笔者通过收拾前人的经历总结,看到了许多值得很咱们一同共享的一些开发经历!!

  现在介绍单片机运用的文章许多,但介绍单片机开发工具制造的文章却较少。由于单片机是一门实践性很强的课程,假如选用传统的开发方法,则要购买价格昂贵的仿真器、编程器等开发工具来作试验。其实由于芯片功用的日益完善,咱们能够运用芯片的在体系编程(ISP)功用制造出有用而贱价的开发工具。本文旨在协助DIY爱好者开发制造出合适自己的开发工具。

  1 当时常用开发方法

  现在,根本上有两种开发方法可供挑选:用仿真器、用编程器。

  ① 用仿真器。长处:便利,能够设置断点,能够调查存储器及寄存器的内容。缺陷:价格昂贵,不同类型的单片机要购买不同的仿真器;仿真器毕竟不是单片机,有时代码在仿真器上能通过,但在单片机中不能正常作业,反而增加了调试的难度。

  ② 用编程器。长处:价格相对廉价,一般一款编程器可编程多种器材。缺陷:操作适当不便利,每次要将芯片在方针板与编程器之间搬运,并且还要在编译操作界面与编程器操作界面之间切换,大部分时刻在做简略的重复作业。

  2 新的开发方法介绍及芯片挑选

  本文介绍的开发工具选用一种新的开发方法(相似于编程器开发方法)。由于运用了芯片的在体系编程功用,因而不需求移动芯片。在软件规划时规划成:一旦代码文件被从头编过,即主动下载到芯片,并主动复位运转,是真实的“所编即所得”。

  现在许多单片机都支撑在体系编程。8051系列单片机支撑在体系编程的也许多,但大多数是支撑通过PC机的串口对单片机进行编程。这样有四个不便利利的当地:一是项目自身与PC机串行通讯不便利利;二是要增加1片MAX232电平转化芯片;三是有的芯片要按特定的进程进入下载方法,编程进程需求手艺干涉;四是有的芯片需求固件(定制的程序)的支撑,假如不小心损坏了固件,则芯片的在体系编程功用也没有了。

  通过比较,Atmel公司出产的AT89S8252是一种比较抱负的芯片,合适制造开发工具。此芯片有如下特色:

  ◆ 与8051兼容;

  ◆ 内含8KB可擦写1000次的程序存储器,2KB可擦写超越100 000次的数据存储器及256字节8位宽内部RAM;

  ◆ 可通过SPI接口在体系串行编程,与8051兼容

  ◆ 串行编程时有主动擦写周期,在调试大程序时能够分段下载,节省时刻;

  ◆ 低电压下载,无需12V编程电压。

  3 AT89S8252串行编程

  (1) AT89S8252串行编程方法

  当芯片的RST引脚置高电平时,一切程序和数据存储器能够通过SPI总线接口[SCK,MOSI(input),MISO(output)]编程。RST变高今后,在编程或擦除操作之前有必要首要发送一条编程答应指令。在串行编程方法下,芯片会在字节编程之前主动刺进一个擦除周期。因而,除非芯片的代码维护位被编程,编程之前不需求履行全片擦除指令。SPI接口之SCK时钟频率须低于晶振频率的1/40。

  (2) AT89S8252串行编程进程

  ① 在XTAL1与XTAL2之间衔接一个3~24MHz的晶振;在VCC与GND之前加上电源电压,将RST置高,等候10ms。

  ② 发送串行编程答应指令。

  ③ 发送写/读/擦除等指令及数据,串行数据高位在前,低位在后,数据在时钟的上升沿确定。

  ④ 假如上一步是写指令,至少等候2.5ms。

  ⑤ 需求时重复③、④两步。

  ⑥ 将RST置低,芯片开端运转。

  (3) AT89S8252串行编程指令

  AT89S8252串行编程指令如表1所列。

  表1

  

  (4) AT89S8252串行编程时序图

  AT89S8252串行编程时序如图1所示。

  

  图1

  4 硬件规划

  ① 通过核算机并口与单片机SPI口衔接;

  ② 为了维护核算机并口,需求增加1片74HC244作为阻隔。

  有用的原理图如图2所示。(已通过实践查验,可放心运用。)

  

  图2

  5 用VB编程进行并口操控

  打印端口的基地址一般为0x278、0x378或0x3BC,能够从操控面板中查到。为了便利读者,表2列出了常用打印端口引脚及寄存器位元的阐明。

  

  表2

  在Windows环境下最简略易学的言语恐怕非VB莫属,所以咱们的开发工具也选用VB作为编程言语。但由于Windows的维护,VB无法直接读写打印端口,因而咱们需求别的的程序模块来完结打印端口的直接读写。在Internet网上能够找到许多此类模块,并且适当多的模块能够免费运用。通过试用,笔者引荐运用Winio v2.0。该模块支撑Win9X/NT/2000/XP(http://www.internals.com Yariv Kaplan ),并且带有具体的协助、比如程序及源码。运用时,将Winio.sys、Winio.dll、Winio.vxd及Winio.bas四个文件拷贝到作业目录下,在VB中直接增加Winio.bas模块即可。本例中用到的函数有四个,别离阐明如下。

  ① IniTIalize():答应端口操控函数。在运用端口输入输出函数之前调用一次,成功回来“1”,失利回来“0”。

  ② Shutdown():封闭端口操控函数。在退出程序时履行一次,成功回来“1”,失利回来“0”。

  ③ GetPortVal(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean:读取端口函数,PortAddr 为端口地址, Portval为端口值,bSize为要读取的字节数。读取成功时回来“1”,失利时回来“0”。

  ④ SetPortVal(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte) As Boolean:写端口函数。PortAddr 为端口地址, Portval为要写的值,bSize为要写入的字节数。写入成功回来“1”,失利回来“0”。

  四个函数在Winio.bas模块中的声明如下:

  Declare FuncTIon IniTIalizeWinIo Lib “WinIo.dll” () As Boolean

  Declare FuncTIon ShutdownWinIo Lib “WinIo.dll” () As Boolean

  Declare Function GetPortVal Lib “WinIo.dll” (ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean

  Declare Function SetPortVal Lib “WinIo.dll” (ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte) As Boolean

  6 Intel HEX 格局文件

  由于一般编译软件发生的用于写入芯片的文件都是Intel HEX格局的文件。Intel HEX文件归于文本文件,能够用记事本检查。一个Intel HEX文件的一行称为一个记载,每个记载都是由十六进制字符组成的,两个字符表明一个字节的值。Intel HEX文件一般由若干条记载组成,每个记载都具有如下的方法:

  :LLAAAATTDD.。.DDCC

  “:”——记载的开始标志;

  LL——记载长度,表明该记载中的数据字节数;

  AAAA——数据装入的首地址(16位);

  TT——记载类型,00表明数据记载,01表明文件完毕;(留意:有的编译软件会发生大于01的记载类型,本运用中对大于01记载类型的记载疏忽掉即可。)

  DD——数据值(字节);

  CC——校验和。(将其自身与记载中除开始标志外的一切字节相加应为0,不为0则有错。)

  VB编程具体阐明见本刊网络弥补版(http://www.dpj.com.cn)。(由于各子程序的流程都较简略,所以直接给出源码,而未画出流程图。程序选用由底至顶的规划办法。)

  结语

  尽管上述程序能完结各种根本的功用,但并不完善,并未考虑各种异常状况,读者可根据实践状况进行完善。编程功力较差的朋友可直接到笔者的网站(http: //www.mcudiy.com)下载相对较完善的运用程序 。假如充沛理解了上述程序,那么DIY一个AVR或PIC单片机的开发工具也非难事。在笔者的网站也有制造完结的“MCS51/AVR/PIC三合一下载器材料”供爱好者下载。

  由于AT89S8252的价格仍是较贵,所以现在市场上较难买,不过Atmel公司推出的代替AT89C51/52的AT89S51/52也有在体系编程功用,且价格廉价。其在体系编程的完结办法与AT89S8252相似,对本例部分程序稍作修正即可支撑该器材。笔者制造的“MCS51/AVR/P%&&&&&%三合一下载器”增加了对AT89S51/52的支撑。

  再来几点:

  先从最简略的AT89C5X(51,52,55等等)说起吧,做这个的时刻最长,知道的或许多些,书本上的东西这儿我不多说,首要谈些实践运用中的经历与经历。书能够参看北航出的一本专门讲AT89系列的,还不错,主张咱们购买。

  AT89C51我认为是一个十分规范的51单片机了,4个P口,1个串口,RAM只要规范的128Byte,Flash也只要4K,功用还算完全,我就以它为根底,所以开发进程中遇到的问题吧。

  第一个问题:复位源的问题

  咱们最常用的复位方法便是电阻加%&&&&&%吧,AT89C51是高电平复位,这种方法不安稳,在产品调试时能够运用,由于在调试时咱们一般运用了仿真器,而许多仿真器都会自己输出复位信号,而屏蔽掉方针板发生的复位信号,所以调试时复位信号是没有问题的,咱们公司运用的是长沙菊阳的仿真器,用的是比较先进的技能,还算能够,仿真AT89系列的芯片一点问题没有,还很安稳的说。这儿有一个十分重要的问题要说下,咱们有时候会遇到这样的一个问题:自己的程序在仿真时运转一点问题也没有,但烧录后却不行了。结合我的经历有两种原因。一是时序或许变了,这个咱们都知道,我不多说,还有一个原因便是复位信号的问题。具体状况如下:

  (1)复位电路有问题,不能正常发生复位信号。由于调试时仿真器或许给你供给了复位信号,而脱离仿真器后就没有了;

  (2)看门狗的问题。有些51芯片带有看门狗复位功用,如At89c55WD,当程序敞开了看门狗后,有时候程序的初始化内容太多了,往往会发生了复位信号,特别是用C言语编程功用时,有时候尽管你分明在程序开端时某个当地封闭了看门狗,但程序仍然会复位,这是由于C言语履行功率比汇编低,看似几行代码,有时候要很长时刻的,所以在运用开门狗时必定要留意这个问题。而这个问题在运用仿真器时简单被忽视,由于即便你的程序里看门狗复位了,可是仿真器(菊阳仿真器能够敞开/屏蔽这个功用)往往会屏蔽了这个复位信号,所以程序仍然会正常运转的。当你把程序烧好后再运转时,你却为发现刚调试好的程序却无法正常运转了,那是由于你的程序一直在不断复位了,留意用示波器调查RST脚或许看不到复位信号的,由于看门狗复位并不影响RST脚的电平。再一种状况便是芯片内部不带看门狗,可是电路中有CPU监控芯片的,它往往是能够供给复位信号的,并且是多种原因的复位信号,假如你发现上述状况,就能够用示波器检查RST脚看是否有电平改变。

  所以主张咱们做51产品开发时尽量运用CPU监控芯片,向X5045便是十分好用的,由于它还带有Eprom功用,这在许多场合运用的到的,也能够用MAX708等专用复位芯片了,既安稳又便利。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/166488.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部