随笔分类 -  51 MCU

摘要:FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。 至于那个“总工”说的话如果不是张一刀记错了的话,那是连基本概念都不对,只能说那个“总工... 阅读全文
posted @ 2014-02-16 20:51 Bingoo&Echo 阅读(33000) 评论(0) 推荐(2)
摘要:大家都知道51单片机有的寄存器R0-R7共有四组。最近1年来,我在与新手朋友交流时发现,很多朋友对寄存器组的使用时经常出现问题。虽然这并不是多难的问题,但如果出现错误,也会造成很严重的后果。首先介绍一下51的寄存器组:通过设置PSW寄存器的第3位和第4位可以任意切换寄存器组。在进入中断前,切换寄存器组,可以方便的保护原寄存器组的数据不被中断里的语句破坏,很方便。RS1RS0字节地址000组寄存器00H~07H011组寄存器08H~0FH102组寄存器10H~17H113组寄存器18H~1FHRS1=PSW.4RS0=PSW.3常见错误有三种:1、为中断函数指定了第0组寄存器C程序:voidin 阅读全文
posted @ 2013-12-05 21:52 Bingoo&Echo 阅读(4237) 评论(0) 推荐(2)
摘要:编译器会单独变异每一个模块源文件(.c文件),并一一为之生成一个唯一的目标文件。这一编译过程是与外界完全隔离的——即便模块源文件中通过“#include”方法包含了别的模块接口描述,并使用了相关的接口函数和接口变量,编译器在编译当前模块时也并不会去真正核实这些信息,可谓“两耳不闻窗外事,一心只‘译’圣贤书”。为了避免一个模块接口文件在同一个模块源文件中被重复包含,可以在头文件的开头处加入条件编译代码。 如果在头文件中放入了某个函数的代码实体,这一部分代码将随着接口描述文件一起被绑定到每一个包含了该头文件的的模块源文件中参与编译。在最后,编译器整合所有目标文件时,会发现存在多个同名的函数实... 阅读全文
posted @ 2013-11-24 21:32 Bingoo&Echo 阅读(286) 评论(0) 推荐(0)
摘要:ISP(在系统编程)是一种不依赖于单片机自身软件的程序下载方式,特点是不需要从电路板上取下单片机,通过某种方式使单片机进入ISP模式,开放编程接口,由其使用的计算机将新的程序代码写入到存储器内。我们平时用于AVR单片机的“串行编程”实际上就是ISP用法。 IAP(在应用编程)与ISP相比,IAP需要单片机自身软件的支持,单片机中的软件从外界获得新的程序代码,并将它们写入自己的程序存储器中。如果更新的程序部涉及当前运行的部分,系统甚至不需要停下当前的工作,就可以更新程序代码。 阅读全文
posted @ 2013-11-24 20:57 Bingoo&Echo 阅读(515) 评论(0) 推荐(0)
摘要:使用中断方式进行串口接收时,读取串口缓冲区的语句应尽可能靠近串口接收完成中断服务函数的入口处。当数据被连续接收时,函数的总执行时间不能大于一个帧的接收时间,考虑中断返回后主程序的运行等因素,这个时间还应留有充分的余量! 串口的第一级缓冲,用于组装逐位传输的帧数据。数据从RXD端逐位输入。串口第二级缓冲,用于程序访问。当接收到完整的帧结构后,数据被搬移到第二级缓冲等待程序取出。与此同时,串口接收完成中断被申请。 串口模块的缓冲区只用1Byte,如果接收到的数据没有被及时取出,就可能被后面的数据冲掉。然而,繁忙的主控程序在此时可能刚好“无暇顾及”接收到的数据包,这就必须在串口模块和主控程序... 阅读全文
posted @ 2013-11-24 19:09 Bingoo&Echo 阅读(615) 评论(0) 推荐(0)
摘要:BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器。对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存储器中所有的数据都是不可读的,这就在运行旧程序和写入新程序之间造成了一个矛盾。 使用BOOT区是解决这个矛盾的方法之一,它将FLASH存储器从物理上分为两个独立的区域,对其中的一个区的数据写入不会影响到另一个区的数据读取操作。我们可以让单片机的程序在其中一个区(通常是BOOT区)运行,而运行着的程序代码写入另外一个区(通常为应用程序区)内。 AVR高档单片机ATmega系列中含有BOOT代... 阅读全文
posted @ 2013-11-24 16:04 Bingoo&Echo 阅读(3685) 评论(1) 推荐(0)
摘要:用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势。Keil公司的C51编译器支持经典8051和8051派生产品的版本,通称为Cx51。应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己的特点。本文介绍的是Cx51程序设计时堆栈的计算方法。 1.堆栈的溢出问题。MCS51系列单片机将堆栈设置在片内RAM中,由于片内RAM资源有限,堆栈区的范围也是有限的。堆栈区留得太大,会减少其他数据的存放空间,留得太少则很容易溢出。所谓堆栈溢出,是指在堆栈区已经满了的时候还要进行新的压栈操作,这时只好将压栈的内容存放到非堆栈区的特殊功能寄存器(SFR)中或者.. 阅读全文
posted @ 2013-04-09 19:01 Bingoo&Echo 阅读(11461) 评论(1) 推荐(0)