单片机开发经验总结

发布者:快乐的天使最新更新时间:2016-09-28 来源: eefocus关键字:单片机  开发经验 手机看文章 扫描二维码
随时随地手机看文章
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
单片机开发经验总结 - 赵明 - Alexander

(4)  AT89S8252串行编程时序图

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

单片机开发经验总结 - 赵明 - Alexander
图1

4  硬件设计

  ①  通过计算机并口与单片机SPI口连接;
  ②  为了保护计算机并口,需要增加1片74HC244作为隔离。

  实用的原理图如图2所示。(已经过实践检验,可放心使用。)

单片机开发经验总结 - 赵明 - Alexander
图2

5  用VB编程进行并口控制

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

表2
单片机开发经验总结 - 赵明 - Alexander

  在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/PIC三合一下载器”增加了对AT89S51/52的支持。

 

文章来源:http://www.laogu.com/wz_17380.htm                   Powerd by laogu

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

再来几点:

先从最简单的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等专用复位芯片了,既稳定又方便。

关键字:单片机  开发经验 引用地址:单片机开发经验总结

上一篇:单片机数字滤波程序
下一篇:用I/O口模拟IIC总线协议遇到的一些问题

推荐阅读最新更新时间:2024-03-16 15:12

基于AT89S52单片机的水位控制系统
  为了实现对容器内水位的精确控制,提出采用AT89S52作为主控芯片,24位高精度A/D转换芯片HX711处理称重传感器输出微弱电压信号的变化,并将其转换为数字信号,通过软件将ADHX711转换后的数字信号换算成相应的水位值显示在液晶屏12864上。测试结果显示,水位显示值与实际值误差≤0.2 mm,设定水位值与实际值误差≤0.4 mm。实验结果表明,该系统测试稳定性好、精度高。   随着水箱在现代生活中的广泛应用,如生活用水储备、太阳能热水器储水设备等,若采用人工控制,不仅效率低、操作繁琐,且易造成“空箱”、“溢水”等现象。基于此,文中利用单片机设计一款主从式水位控制系统,从机是水位控制器,主机能通过串行通信口对从机进行远
[单片机]
基于AT89S52<font color='red'>单片机</font>的水位控制系统
基于单片机的电梯自动控制系统的设计与实现
伴随着社会的发展与进步,人们的生活水平的提高和节约用地的倡导,越来越多的高楼耸立,使人们的生活和工作受到很大的影响,垂直运输的问题也随之出现,人们迫切需要一套安全、快捷、高效、稳定的电梯控制系统。电梯控制模型的设计主要涉及数电、模电、单片机及接口技术、C51的编程等知识,可谓知识面含量非常广,但因现代的微电子技术、计算机技术和嵌入式微控制器技术等的飞速发展,让我们做出应用型的电梯已成为可能。目前各小区居民楼都已经安装上了快捷、方便的电梯系统,但某些方面如安全性和稳定性还有待提高,用户也给出了更高的要求。 目前电梯控制主要有继电器控制、可编程控制器控制、微机控制(单片机控制)这3种控制方式。利用单片机控制电梯具有成本低、高精度的重量检
[单片机]
基于<font color='red'>单片机</font>的电梯自动控制系统的设计与实现
MSP430F449单片机RTC时钟C语言程序(带闹钟)
功能: 实现软件万年历功能,并自动识别闰年,A屏每显示5秒种就自动切换到B屏,B屏再显示5秒种就自动切换到C屏,C屏再显示5秒种就自动切换到A屏,通过按键在A屏、B屏和C屏之间切换 ,可通过按键手动设定和调整时间,当调整时对应调整位要有闪烁功能,有闹钟功能,可设置几点几分闹钟,当前时间等于闹钟时间时,用点亮LED指示,直到某个键(自定义)被按下时,熄灭LED灯 ***************************************************/ #include msp430x44x.h unsigned char cnt;
[单片机]
交换控制单片机电路设计方案解析
1、引言 小型会议系统或语音群聊系统是由多路音频电路组成的.为了使通话井然有序,需要通过音频交换电路来控制各路音频信号的输出。音频交换电路主要用于完成语音信号的切换。以实现同频终端的话音通信。经对可靠性、经济性、兼容性和供货情况进行多方面的综合考虑,该控制系统选用了AT89S52型单片机和交换控制矩阵器件MT8816AE。其中,AT89S52型单片机具有实用,价廉,功耗小,速度快,体积小,功能强等优点:MT8816AE是CMOS单片集成电路,具有功耗小,可靠性高等特点。 2、控制系统组成和电路设计 它由主控计算机、音频交换电路、终端设备等组成。其工作原理是:在主控计算机捕获终端的工作频率后。向交换控制单片机发出指令,交换矩阵
[单片机]
Proteus 仿真软件在单片机设计中的应用
  1.引言   单片机在很多产品中得到广泛的应用,无论是51 系列、AVR、还是PIC 系列,他们各有各的特点,学习者也是逐年增加,但是在学习开发过程中,我们往往在确定方案后做试验的开支往往比较大,尤其是对于一些学生或者初学者这就可能成为他们学习的障碍。在我们使用Proteus 软件以来大大节省了时间和开发费。尤其将此软件用在单片机开发中是一个不错的选择。我们这里主要讲述的是Proteus 软件与Keil 软件的结合与应用。   2.Protues 软件介绍与应用   2.1 Protues 软件介绍   Proteus 是目前最好的模拟单片机外围器件的工具,它可以仿真51 系列、AVR,PIC 等常用的MCU 及其外围
[单片机]
Proteus 仿真软件在<font color='red'>单片机</font>设计中的应用
一种基于单片机的智能节电器的研究
三相交流异步电动机的 节电器 节电保护一直是电机领域研究的热点,特别是近几年来全国出现电力供应紧张的局面,使得对交流异步电动机的节能设备的研究和推广更为迫切。三相异步电动机由于结构简单, 智能节电器 使用方便可靠而受到广泛应用,但它却是电能消耗的最大用户,据测算有50%以上的电能被它消耗,而有20%的电能是在没有做任何有用的工作下耗掉的。 在实际使用过程中,三相异步电动机往往不是在额定功率下工作的,常常是在轻载下运行,这就形成了所谓的“大马拉小车”现象。这种现象既造成了能源大量浪费,又造成电机功率因数降低(满载时功率因数为9000}空载时功率因数只有2000),从而所消耗的电能转换为热使得电机温度升高,这对电动机的使用寿命有严重的
[单片机]
一种基于<font color='red'>单片机</font>的智能节电器的研究
ZigBee-CC2530单片机 - 实现软件自动复位
程序源码 #include ioCC2530.h #define LED1 P1_0 // P1_0定义为P1_0 #define LED2 P1_1 // P1_0定义为P1_1 /************************************************************** 函数名称:led_Init 功能:LED初始化 入口参数:无 出口参数:无 返回值:无 **************************************************************/ void led_Init(void) { P1SEL = 0x00; //P1为普
[单片机]
单片机在电源设计中的应用
电源设计人员经常面临种种互相对立的要求。一方面要缩小体积、降低成本,另一方面又要提供更多功能并提高输出功率。受原理上的限制,模拟电源本身的功能有限,而模拟电源控制器的设计更是越来越复杂。由于这一原因,有些设计人员转向了纯数字电源设计。然而,对于许多设计人员来说,如此快速地转向不熟悉的领域并不容易。比较可行的一种折衷方法是采用传统模拟电源,但增加数字单片机做为前端。 这种设计的优点在于电源本身的控制仍然使用模拟技术来实现。因此电源设计人员不需要从头重新开始全数字设计就可以为现有设计增加新的功能。采用这种方法,设计中仍然使用熟悉的误差放大器、电流检测以及电压检测电路。当然,尽管有些设计单元(如补偿网络)仍然采用分立器件实现,但其余部
[电源管理]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved