firmerliu
驱动牛犊
驱动牛犊
  • 注册日期2003-02-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望206点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:3216回复:4

初学单片机者,注意以下几点

楼主#
更多 发布于:2004-03-27 17:03
本人几年前开始自学单片机,深深体会到初学者会碰到很多意想不到的问题。在调试过程中经常发现与自已想象的完全不相同,如无人指点的话,会走很多弯路,有时还会怀疑是不是自己的仿真系统有问题。本人将自己的一些心得写几点,欢迎大家一起来讨论,希望对初学者能有所帮助。

1。注意子程式的调用
一般单片机只能调用4,5级左右的子程式,因此当子程式嵌套调用多级时,一定要仔细看IC说明书。象合泰的IC如HT48R50,只能调用4级,义隆的IC如EM78P451可调用5级。如果子程式级数超出,就不能正确的返回,程式就乱了。经验是少用Call,多用JMP。

2。注意看门狗
大部分IC都有看门狗,要记得定时清除看门狗。经常碰到的状况是,单步执行是对的,自动运行不对,这种状况一般是看门狗引起的。经验是有时程式里有死循环,或延时程式,这些地方一般要考虑看门狗。

3。注意中断
中断往往不知什么时候发生,因此初学者有时很难撑握。经验是在RAM中用几个地址用作调试,在不同的地方赋不同的值,另可用一个地址来计算中断的次数,可根据计数的次,让其跳到某些地方,在这些方设置断点,这样根据调试用的寄存器就能初步判断在哪些地方会产生中断。

4。RAM的定义
初学者在定义RAM时,一般比较随便。如果编写较复杂的程式时,RAM定义不好的话经常会出错。经验是要让名字与其作用相关,如接收数据的RAM地址定为"Receive_data EQU 0x22",不要定义为"R22 EQU 0x22"。另外RAM要学会分区域,同一功能模块用的的RAM定义到一起,中断服务子程式的RAM要单独定义出来。

5。查表
很多程式都会用到查表,因此在ROM中怎样放置数据报表也很重要。象一般的单片机用的数据报表是不能超过256个,一般256个地址为一页,如果数据超过256个,就要分成两个表来放。注意一个表要放在同一页里。初学者有时会碰到单步执行时能查到表,自动运行时,查表会错,这时可能是你的表超过一页,或者没有超过256,但放在了两个页相连处。经验是每个表的起始定义起始地址,结束时定义结束地址。还有一点,象合泰HT48R50其ROM为4Kx15,这就是说每个地址最高位是不能用的,因此这里最大的数据就是0x7FFF。
另外有时查表不一定是查数据,可能是一条跳转指令,这时要注意每个指令所占的地址是多少。象Cypress的IC,其JMP指令占两个地址,这样在查表前要注意累加器A中的内容每次的间隔要定为2。

6。页码
有很单片机IC的ROM,RAM是分页的,这样使用起来就要很小心了。经验是当碰到子程式调用不到,或JMP总是错误时,看看是不是需要更换ROM页码;另外RAM的内容发生意想不到的变化时,查查RAM页码对不对,本来是改此页的说不定改了另外一页。

7。注释
初学者一般不习惯写注释,这点要改掉。简单的程式关系不大,复杂的程式没有注释的话,有时自己会弄错,时间一长就更不清楚了。

8。Sleep
现在很多IC都支持Sleep,如果你要做遥控方面或者是要求省电方面的产品,一定会考虑Sleep。经验是IC中能够唤醒Sleep的I/O口在Sleep前要保持为高电平,如果此口要用做唤醒,就要设为Input状态,但一定要有Pull Hi,一般IC内部有Pull Hi 的功能,如果内部没有,外部就要加Pull Hi。另外既然要Sleep,那么IC的外围电路在IC Sleep后是不能有通电回路的,否则就不能省电了,Sleep就失去意义了。


以上只是大概提了几点,只供初学者参考。其实很关键的一点是要多做,多思考,碰到解决不了的问题时不要气馁,要相信总有解决的办法。

最新喜欢:

wwqfmwwqfm
冰冻三尺非一日之寒
wwqfm
驱动牛犊
驱动牛犊
  • 注册日期2004-06-01
  • 最后登录2004-06-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-04 16:39
很好,谢谢!
向学习大家!
jec017
驱动太牛
驱动太牛
  • 注册日期2002-08-22
  • 最后登录2008-01-09
  • 粉丝0
  • 关注0
  • 积分91分
  • 威望10点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-10 14:32
很好,谢谢!
woxuebj
驱动牛犊
驱动牛犊
  • 注册日期2004-12-18
  • 最后登录2008-08-27
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-26 19:32
给大家推荐一个不错的硬件开发、软件编程多媒体教学网站: www.onestudy.net ,软件、电子爱好者常去的地方,从最基础的讲起,整个教学过程全部配有真人发音或配套动画的详细讲解。有软件学习(名校计算机系的主干课视频教程、VC++编程、Java、PhotoShop教学等等),硬件开发做板子(电子电路设计、单片机多媒体教程、PROTEL DXP制图软件教学等),教学资料很丰富。这个网站叫“一学网”,意为“一学就会”。网站配有资深技术教师耐心答疑,手把手教您快速跨入单片机王国大门。网站还给大家提供海量有用的数据免费下载。
buaawr
驱动牛犊
驱动牛犊
  • 注册日期2004-05-11
  • 最后登录2008-10-16
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望30点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-09-26 15:22
re!
游客

返回顶部