新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机关键技术基础详解(二)

单片机关键技术基础详解(二)

作者: 时间:2016-11-24 来源:网络 收藏

  2.5分析编程的难点和技术解决方案

  即使1个熟练的编程人员,编程过程中会遇到一些困难。为了能比较顺利地完成程序设计,应根据程序所完成的功能和程序流程对整个程序的框架分析一下,并根据自己掌握的技能定位整个程序的难点,然后找到最佳的算法。例如对于稍微大一点的项目,键盘扫描和显示部分的程序编制应该是单片机编程的难点。

  (1)无论是键盘扫描还是显示过程都和硬件部分息息相关

  送片选信号选取键盘就必须搞清单片机芯片是高电平选通还是低电平选通;选通键盘后,还需要读回键盘的状态。对读回的键盘状态还要进行防抖处理;若键盘抖动,放弃读回的数据,重新读键盘状态;若确定为键盘按下,才能对按键值进行处理;处理后的键值送显示或作为其它使用。由此可知以上的每一过程都和硬件电路打交道。

  (2)键盘扫描和显示牵涉到的算法比较复杂

  因为扫描键盘的过程就是遍历每个按键,识别抖动,识别按键是否松开等过程;除此之外还要延迟合适的时间,以便再次读取键值。显示过程也要遍历每个数码管或液晶字符;其中查表过程,送显示过程都要用到比较复杂的循环遍历算法。

  (3)数字键和功能键的区分

  是数字键就送显示,是功能键就转相应的功能子程序,把两者结合起来就构成比较复杂的散转程序。MCS51单片机有现成的散转子程序可供参阅,PIC可以参照MCS51的散转子程序套用。

  以上3点都是单片机编程的难点部分,在编程之前都应该找出来仔细分析。通过分析,将所有可能成为难点之处都一一找出并找出相应的算法,在以后的程序编写过程中也相应地比较顺利。

  2.6写程序

  在上面的准备工作完成后,就可以着手编写程序。因为有了明确的程序流程,有了充足的资料,可能遇到的难点基本上找到了解决方法;这样,事先准备得比较充分,即使在以后的程序编写过程中遇到困难,也较易解决。这样就可以节省很多时间,以便静下心来认真按照方案和流程编写程序。另外,一般写完1个功能程序就进行调试,通过后再编写另外1个功能代码,这样可以防止全部代码编写完毕后再调试可能带来的相互影响,从而可以搞清楚到底是哪部分程序有问题。

  2.7程序调试

  程序的调试过程是1个比较复杂的过程,有些需要高度的技巧和一定的方法。一般的编程软件都提供单步、单步越过、断点、运行到光标处等基本方法,一般掌握这几种基本方法就可以解决绝大部分问题。经过长时间的调试实践之后自然就可以掌握一定的调试技巧,即熟能生巧。

  3结束语

  以上是编程一般单片机程序必须经过的7大步骤,假如这7个过程的工作做得比较充分,一定能够编写出令人满意的单片机程序。

三、关于单片机中的flash和eeprom

  FLASH的全称是FLASH EEPROM,但跟常规EEPROM的操作方法不同

  FLASH 和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有 FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。

  至于那个“总工”说的话如果不是张一刀记错了的话,那是连基本概念都不对,只能说那个“总工”不但根本不懂芯片设计,就连MCU系统的基本结构都没掌握。在芯片的内电路中,FLASH和EEPROM不仅电路不同,地址空间也不同,操作方法和指令自然也不同,不论冯诺伊曼结构还是哈佛结构都是这样。技术上,程序存储器和非易失数据存储器都可以只用FALSH结构或EEPROM结构,甚至可以用“变通”的技术手段在程序存储区模拟“数据存储区”,但就算如此,概念上二者依然不同,这是基本常识问题。

  没有严谨的工作精神,根本无法成为真正的技术高手。

  EEPROM:电可擦除可编程只读存储器,Flash的操作特性完全符合EEPROM的定义,属EEPROM无疑,首款Flash推出时其数据手册上也清楚的标明是EEPROM,现在的多数Flash手册上也是这么标明的,二者的关系是“白马”和“马”。至于为什么业界要区分二者,主要的原因是 Flash EEPROM的操作方法和传统EEPROM截然不同,次要的原因是为了语言的简练,非正式文件和口语中Flash EEPROM就简称为Flash,这里要强调的是白马的“白”属性而非其“马”属性以区别Flash和传统EEPROM。

  Flash的特点是结构简单,同样工艺和同样晶元面积下可以得到更高容量且大数据量下的操作速度更快,但缺点是操作过程麻烦,特别是在小数据量反复重写时,所以在MCU中Flash结构适于不需频繁改写的程序存储器。

  在很多应用中,需要频繁的改写某些小量数据且需掉电非易失,传统结构的EEPROM在此非常适合,所以很多MCU内部设计了两种EEPROM结构,FLASH的和传统的以期获得成本和功能的均衡,这极大的方便了使用者。随着ISP、IAP的流行,特别是在程序存储地址空间和数据存储地址空间重叠的MCU系中,现在越来越多的MCU生产商用支持IAP的程序存储器来模拟EEPROM对应的数据存储器,这是低成本下实现非易失数据存储器的一种变通方法。为在商业宣传上取得和双EEPROM工艺的“等效”性,不少采用Flash程序存储器“模拟”(注意,技术概念上并非真正的模拟)EEPROM数据存储器的厂家纷纷宣称其产品是带EEPROM的,严格说,这是非常不严谨的,但商人有商人的目的和方法,用Flash“模拟”EEPROM可以获取更大商业利益,所以在事实上,技术概念混淆的始作俑者正是他们。

  从成本上讲,用Flash“模拟”EEPROM是合算的,反之不会有人干,那么那位“总工”和楼上某网友所说的用EEPROM模拟Flash是怎么回事呢?这可能出在某些程序存储空间和数据存储空间连续的MCU上。这类MCU中特别是存储容量不大的低端MCU依然采用EEPROM作为非易失存储器,这在成本上反而比采用Flash和传统EEPROM双工艺的设计更低,但这种现象仅仅限于小容量前提下。因Flash工艺的流行,现在很多商人和不够严谨的技术人员将程序存储器称为Flash,对于那些仅采用传统EEPROM工艺的MCU而言,他们不求甚解,故而错误的将EEPROM程序存储器称为“ 模拟Flash”,根本的原因是他们未理解Flash只是一种存储器结构而非存储器的用途,错误的前提自然导致错误的结论。商业上讲,用EEPROM模拟 Flash是不会有人真去做的愚蠢行为,这违背商业追求最大利益的原则,技术上也不可行,而对于技术人员而言,尤其是IC业内的“总工”如果再这么讲那只能说明他或她要么根本不了解相关技术细节,要么非常不严谨,这都不符合“总工”的身份。本质的问题是Flash是一种存储器类型而非MCU中的程序存储器,即使MCU的程序存储器用的是Flash,但其逆命题不成立。

  在此写此文,一方面是要澄清技术概念,另一方面更是不想令错误的说法误人子弟,搞技术也需要严谨的科学精神。

  28系列是最早的EEPROM,28F则是最早的Flash,甚至Flash一词是Intel在1980S为推广其28F系列起的“广告名”,取其意“快”,仅此而已。当年的Flash不比传统EEPROM容量更大只是容量起点稍高。至于现在的手册中有无EEPROM字样并不重要,非要“较枝”的话,看看内容有无“电可擦除”存储器的说法,至少我随手打开SST的Flash手册上都写的很清楚,不过这些根本就是无意义的皮毛,典型的白马非马论。

  至于AVR的地址连续问题是我随手之误,应指68HC系列,但即使如此,就算我没有用过包括AVR在内的任何MCU也跟Flash的性质毫无关系。

四、自制AVR仿真器

  自制AVR仿真器用JtagICE仿真Mega16芯片进行开发,开发成功后,才移植到M8/48/88/168上。只要开发时留意一下,移植并不会有困难。

  使用贴面IC的效果图:

  但使用贴面IC一个不好的地方是,芯片无法拆下来(如果我们要重新烧录芯片的ROM,能拆下来就方便多了)。所以,这个活动,我们推荐使用DIP40封装的Mega16. 以下是实物图:

  网上关于自制Jtag的线路有许多种。根据搜集到的资料,设计出本文介绍的最简易、制作最容易的 JTAG。RS232接口是用分立件制作,就地取材,简单可靠.

  本线路的J1双排十针座,既可以做Jtag,又可以做ISP(通过跳针JP1控制)。JP1跳针短路时,J1用作ISP下载,方便更新本Jtag的ROM。J1 跳针开路时, 用作JTAG.

  如果你有232芯片,可以按以下线路代替上面的分立件RS232部分:

  烧录文件:

  按以上的硬件制作好PCB后,检查焊接无误,就可以进行烧录了。

  烧录的方法有很多,我(armok)推荐的一个方法是:将M16芯片从JTAG板上拆下来,放到普通的带ISP口的实验板,使用SL-ISP1.32 软件,将本文附录所带的将AVR Studio 4.10 Rom 烧录文件中的flash.rom 及 epprom.rom 直接烧入到Jtag ATmega16 就可以了。



评论


技术专区

关闭