晚上刚刚看到内蒙古工业大学李老师发的邮件,写得非常认真仔细,字里行间能让人感受到李老师的热心,在此向李老师表示衷心的感谢。
我不想对邮件做出修饰,直接将邮件发出来。呵呵,这可没先请示李老师,希望不要见怪。
————————————————————————————————————————
刚刚拜读了你的大作,时间关系读得不够仔细,但看得出你在单片机开发方面见识较广,有不少宝贵的体会和经验,你的写作也是用了心的。我支持你的写作,并相信你会越写越好。
为此,说出我的几点看法供你参考:
1、"2.15. 键盘扫描"一节,没能让我看明白你为什么要这样设计。在我看来,那6个接地电阻是可以去掉的。就让Pm悬空,依次向Pm.0-Pm.5发出低电位,读Pn口的5bit,按键按下的将读到0,没按下的会读到1,同时就会得到5个按键的状态。(为了叙述方便,是以你的原图解说。实际上应该PmPn互换,5次扫描即可得出30个按键的状态)。我猜想,你们当初这样设计时或许是在为了避免悬空,其实这种顾虑也是个普遍存在的理解误区。
对于一位长期从事硬件开发的技术人员,可能只是一直没顾上细想,只要一想就会明白。
--->对于输入口,如果内部没有上下拉电阻选择,产品设计最好另外加上拉或下拉电阻,这样做事为了防止你已经提到的问题(悬空),IO口如果是输入悬空,没有上下拉电阻就会处于高阻浮动状态,这样一是读回的状态不确定,有可能高也有可能低,就有可能做出按键误判,当然这种情况发生的几率非常小,另外是不能很好的抗外界干扰信号,这些辐射干扰电流驱动能力都很小,有了上下拉电阻就可以消除其影响,否则有可能无法通过电磁兼容测试。
补充说明:刚才有人找我出去了一下,对你的回复有点仓促,你的做法是反向输出进行扫描判别,先前的回复我没看清楚这一点。这样做因为Pn口有上拉电阻不用担心读到的状态不稳,从而不会出现误判的情况,但要留意此时你将Pm口设置成了输出口,没有二极管保护的矩阵同一时间只能有一条IO为输出,其它IO都要设置成输入,假如现在扫描Pm.0,Pm.1~Pm.5就要设为输入口,所以它们还是存在抗干扰能力不够的问题。还忘了提示一点,键盘扫描这部分内容主要是为了强调要防止多个键同时按下形成的状态冲突。
2、"2.13. 寄存器也可当RAM"一节,用特殊功能寄存器来当RAM用,或可作为某些特殊情况的的权宜措施,但不建议作为经验推广,更应强调除非万不得已尽量不要这样做。因为这不仅会破坏程序的可读性,还会影响以后的代码移植复用。我认为很多时候利用形参空间的办法比这更有效更合理。
--->你的说法非常正确,我应该强调这一点,避免读者误会成空间足够也可以这么做,我会加上注释解释“权宜之计”。另外你提到会影响到程序可读性的问题,不用过多担心,不管特殊功能寄存器还是通用寄存器,一般都是程序预先定义好的地址,如果需要使用特殊功能寄存器,是不会用已经定义好的特殊功能寄存器名称,需要另外定义一个新的变量名,但需要在定义的时候加上注释,程序中使用新定义的变量名进行访问。至于形参空间的方法,肯定是节约RAM空间一个行之有效的方法,文中所说方法是假定一切有效的方法都已经使用,空间还是不够,在没有办法的情况可以这样做,我的目的也不是把这个当做经验直接推广,而是想启发大家在好像没有路的时候能跳出常规思维寻找新的解决方法。
3、第94页:“这个问题同样可以用高速公路的例子来理解,汽车的速度可以继续提高,收费站也可以撤掉,但实际生活中高速公路不可能设计成笔直宽阔的大道,所以还是不能满足汽车速度的需求”。这段比喻不太妥当。实际上高速公路上的弯道很多是有意为之的,几公里就得稍弯一下,目的是避免长时间直道行驶对驾驶员产生的反应松怠。
--->你的说法是对的,其实我是实在想不到一个更好的例子来做比喻,这个例子我自己都修改过几次,现在不说高速公路不能修成直路原因,就是收费站的比喻都有点问题,接下来我会想想看能不能用一个更恰当的例子进行说明。
我知道给人指出不足不是件受欢迎的事,但我真心希望你好,所以还是说出了我的真实感受。仅供参考,
--->非常欢迎你指出这些问题,非常感谢你如此认真热情,非常感谢
用户1277994 2013-8-19 14:43
用户1549192 2011-5-12 11:29
daishangju_162733976 2010-3-19 16:58
用户1277994 2010-3-18 11:41