firmerliu
驱动牛犊
驱动牛犊
  • 注册日期2003-02-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望206点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:3219回复: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
冰冻三尺非一日之寒
游客

返回顶部