tag 标签: 入门到精通

相关博文
  • 热度 24
    2010-3-27 18:17
    1972 次阅读|
    4 个评论
         《删繁就简-单片机入门到精通》一书内容自2月下旬在网上发布后,得到了不少朋友的认可,这让我深感欣慰,说明我过去的付出还是有一定意义。我自己觉得很幸运,此书在网络发布后,能得到北航出版社胡晓柏主任及其同事的青睐,给了我一个可以将书出版成实体书的机会。真的要感谢北航出版社负责单片机类书籍的编辑们,是你们的敬业让一个普通人将梦想变为现实。         现在北航出版社与我之间的合作已经基本敲定,如果不出意外,8月份将会出版,到时候有兴趣的朋友就可以看到到传统的纸质实体书。书的出版对我来说无疑是一件好事,不过出版社需要对出版发行付出相应劳动并承担一定风险,所以我必须要保证出版社的权益,所以在短期内肯定无法免费发布完整版给大家,只能是当前发布的节选版,请大家谅解。         请大家放心,我会和出版社沟通,争取早日发布一个比现在版本内容更为丰富的版本给大家,当然内容最全的肯定只能是出版社发行的实体书。谢谢大家的任何与支持,希望接下来大家能多提建议,你的建议就是对我最大的帮助。 提示: 出版社方面目前预计在8月份会完成出版。
  • 热度 17
    2010-3-24 21:14
    2271 次阅读|
    2 个评论
    终于结束了晦涩枯燥的第三章,我自己也长吁了一口气,现在我真的是非常同情那些教专业基础课或者工程数学的老师,这里真诚的说一声:“辛苦你们了”。 这一章要轻松不少,相信就算是刚走出校门的雏鸟,多少都有一定的C语言基础,大学好象都要过一个计算机等级考试,所以C语言自然是逃不了。你不要指望我给你讲述C语言原理和指令这类基础知识,我更不会给你讲述C++那些面对对象编程的高级编程方法,这一章讲述的内容都是C语言在单片机上应用会遇到的一些有意思的现象,让你知道C在单片机上是怎么工作的。 当然也会告诉你一些C的经验技巧,这些对提升你的单片机程序能力还是有一定作用的。 4.1. 单片机C语言 早期单片机编程是没有C语言支持的,都是汇编甚至是二进制的机器码,随着电脑技术的突飞猛进,单片机编程不再安于汇编的一亩三分地,也向着C语言的方向进发。理论上讲单片机实现C语言编程不存在丝毫问题,毕竟和电脑是同根生,于是一批专业或非专业、有着利益目的或无利益目的的工程师开始了这方面的努力。 和电脑最大的不同是单片机种类繁多,不象电脑只有那么几种芯片,而且电脑CPU的发展遵循着一定的规则,不同CPU要求做到指令兼容,单片机做这样的要求显然不现实,厂商不可能接受都遵循制定标准设定MCU的要求。虽然单片机种类繁多,但大部分单片机还是会采用通用构架进行设计,毕竟遵循一定标准可以不用厂商自己去完成指令系统、编译工具等繁琐工作,所以市面上流行的单片机内核其实并不多,不少八位的单片机都采用51内核,高端的MCU内核更是集中在ARM/MIPS…这几种当中。 详细内容请点此下载链接下载阅读: https://static.mianbaoban-assets.eet-china.com/forum-images/EECOL/EEF/IMAGES/SITE/attachments/blog/mcu_training_chap4.pdf
  • 热度 19
    2010-3-17 00:46
    2445 次阅读|
    3 个评论
    晚上刚刚看到内蒙古工业大学李老师发的邮件,写得非常认真仔细,字里行间能让人感受到李老师的热心,在此向李老师表示衷心的感谢。 我不想对邮件做出修饰,直接将邮件发出来。呵呵,这可没先请示李老师,希望不要见怪。 ————————————————————————————————————————   刚刚拜读了你的大作,时间关系读得不够仔细,但看得出你在单片机开发方面见识较广,有不少宝贵的体会和经验,你的写作也是用了心的。我支持你的写作,并相信你会越写越好。   为此,说出我的几点看法供你参考:   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页:“这个问题同样可以用高速公路的例子来理解,汽车的速度可以继续提高,收费站也可以撤掉,但实际生活中高速公路不可能设计成笔直宽阔的大道,所以还是不能满足汽车速度的需求”。这段比喻不太妥当。实际上高速公路上的弯道很多是有意为之的,几公里就得稍弯一下,目的是避免长时间直道行驶对驾驶员产生的反应松怠。 ---你的说法是对的,其实我是实在想不到一个更好的例子来做比喻,这个例子我自己都修改过几次,现在不说高速公路不能修成直路原因,就是收费站的比喻都有点问题,接下来我会想想看能不能用一个更恰当的例子进行说明。   我知道给人指出不足不是件受欢迎的事,但我真心希望你好,所以还是说出了我的真实感受。仅供参考, ---非常欢迎你指出这些问题,非常感谢你如此认真热情,非常感谢
  • 热度 16
    2010-3-13 16:01
    2296 次阅读|
    3 个评论
    Q: 楼主书中的内容还有需要改进的地方, 1:如果将 Pn.x 口设置为开漏输出,则 Pn.x 绝对不会短路,    也就用不着将其它 Pn.x 设置为输入状态。 2:即使 Pn.x 只能设置为推挽输出,也不需要 Pn.x 输出高和低两个状态,    只需将当前 Pn.x 输出低状态就够了,其它的 Pn.x 则设置为输入,    此时 Pm.x 为低表示有按键按下,为高表示无按键。 3:加二极管来防止四点短路确实可行,但如果由于成本或硬件原因不适合加二极管,    那么还有软件的方法来对四点短路进行判断(电脑键盘就是这么做的),虽然不能避免    四点短路,但能发现四点短路,一般来说这足够了。 A: 1.你说的设置为开漏输出,我的理解是当前IO口为open drain结构,此时将IO口内部的上拉电阻关掉,不知我这样理解是不是和你的说法一致。如果相同,你的这种方法只是针对部分单片机有效,如果单片机IO是三态门结构,是没有内部上拉电阻进行选择的。另外我的主要目的是想让大家知道存在这样的风险,在实际应用中需要引起注意,我给出参考解决方法不代表这个方法是唯一可行之道,无论将其它IO口改成输入还是将内部上拉电阻关掉,都是通过设置避免不同IO在连通时出现一个输出高另外一个输出低的情况。 2.呵呵,是不是觉得我在文中要求输出高和低没有必要,好像是多此一举?这样做是有一定好处的,我在文中特意没有做相关说明,就是希望有你这样看过之后进行认真思考,并能提出自己的意见,这样才能加深技能技巧的印象。你这个问题质疑得好,为什么需要输出高和低两种状态,是为了避免其它错误,比如输入的IO口与地或者电源之间短路,只输出一种状态就可能做出错误的判断,假定Pm.0与地短路,是不是就会错误的判断成Pm.0上有键按下? 3.在文中已经说了二极管会增加成本,实际应用中可以通过软件方法判断多点按下将按键忽略 Q: 我说的开漏输出可以有上拉电阻,也可以没有上拉电阻。我认为用开漏输出扫描键盘是一种简便的方法,如果单片机有开漏输出功能的话,可以考虑采用。 输出高和低两种状态对判断Pm.x对地短路是有效果,不过我认为出货的产品一般都把硬件错误解决了。看来,用不用输出高和低两种电平,这没有绝对的答案,还是看自己的取舍了。 A: 看来我对你所说的开漏理解是相同的。在前面回复中已经明确说明,如果解决的方法有多种,不是说非要用某一种才可以,如果单片机支持你说的功能选择,一样可以解决问题。书中内容的目的是提醒大家需要注意有短路的可能,应该在程序中加以避免,实际上有的单片机的IO不支持输入输出选择,如果是这样的单片机那书中的内容就完全是错误的,对于这类细节,是需要读者自己去理解的。 这一点再多说两句,对于单片机内部的上下拉电阻,许多时候芯片资料对介绍并不清楚,这个电阻有多大,就是介绍也只是一个比较笼统的参考值,对于某些特殊电路,在外面另外加上下拉电阻的做**更稳妥,这样当出现多个电阻并联的情况时设计人员可以更精确的预估电阻值对电压的影响。我用一个极限例子来进行说明,有10条IO口都设为输入加内部下拉,这10条IO会同时读某一个信号量,但这个信号的电流驱动能力并不高,通常单片机内部下拉电阻为几十K,假设为47K,这样10条IO并联等效电阻就只有4.7K,这个电阻有可能把信号幅度拉低,比如是5V信号,4.7K电阻需要信号有1mA的驱动能力,如果其实际驱动能力值有0.5mA,会是什么样的后果? 做产品开发你所说的认为硬件把错误都解决了的想法不可取,合作是要相信别人,但绝对不能完全依赖别人,最好的做法是在条件允许的情况下,将自己的工作部分考虑更周详,更加稳定可靠。 还是你举个例子来说明你这种想法的问题所在,现在需要你写一个供别的同事实用的函数。 int data_copy(char *src,char *dec,int len) 按你的说法,只要在函数内部完成数据复制功能就可以。如果只是站在完成任务的角度,你这么做就已经可以,但绝对不能说你这样完成是高质量。 实际上如果有可能,应该在函数内部对参数做出一定保护,象int len,正常情况使用的同事会给出正确的值,但某些意外因素导致这个值被错误的设置或修改为小于0的值,你想想没有保护是什么样的后果?再比如目的地址,被意外指向系统区域,也是不允许的。
  • 热度 15
    2010-3-13 15:46
    2356 次阅读|
    0 个评论
    Q: 在做USB设备开发的时候经常遇到线太长不稳定常常断线,我怀疑是USB驱动能力不够,在你《删繁就简-单片机入门到精通》一书章节1.9.是专门讲接口驱动能力的,可是没有具体内容,是什么原因? A: 1. 首先要解释一下,没有具体内容是因为出版社对此书有出版意向,他们要求网上的免费版本在内容上要少于正式出版的版本,所以我对书中部分章节进行了删减,请各位朋友见谅,如果有问题我们可以就具体问题相互进行探讨,另外我希望最后能在网上有更完善的版本出现,如果有这个可能肯定需要等待比较长的时间。 2. 你提到的USB问题,我认为是USB驱动能力不够的可能性比较大,不过应该不是电流驱动能力不够,而是因为线过长导致无法高速传送数据。 目前使用较多的USB是1.0和2.0两个版本,其中1.0又分为1.0(low speed)和1.1(full speed)两种,支持的最大速率为1.5Mbps和12Mbps,2.0的称为high speed,支持的最大速率为480Mbps。 注意这里说的是支持的最大速率,所以通讯时并不是一定按此速率,在一定范围之内都是允许的。 USB是向下兼容,也就是2.0的口可以接1.0的设备,但1.0的口不能接只能工作在2.0状态下的设备,又要注意这里是只能工作在2.0状态下,不是说所有的2.0的设备。 其实所有的USB设备都要求支持1.0的速率,目的是为了再插上的时候能够让主机识别出设备并加载驱动,所以在USB刚插上的一段时间,实际上和主机都是用1.0速率来建立连接,如果发现双方都支持更高的速率,就会自动转到更高的速率下工作。有时候把一个2.0的优盘或移动连到一个性能不好的电脑USB口,电脑会提示一个高速设备连到了低速设备,可能会对工作状态产生影响的提示,这个时候优盘和移动硬盘还是能工作,只是传输速度要慢许多。 USB的速度非常快,接口采用的是差分驱动方式,虽然这样可以抗共模干扰,但对外部连线有一定限制,另外对干扰也比较敏感。很容易理解,不管什么通讯方式,只要线一长,就会使所支持的最大速率下降。正是这个原因,对于一些要求工作在2.0状态下的设备,当与主机之间的连线过长时,就会出现通讯不稳定、时好时坏、容易断线的问题。 其实在日常生活中也都经常遇到这样的问题,象现在电脑机箱前后都有USB插孔,你会发现后面的插孔要比前面稳定,一些只能工作在2.0状态下的设备(比如某些USB仿真器),会出现前面连接无效,后面连接工作正常的情况,这就是电脑机箱前面的USB口需要通过一条线连到主板,加上机箱里面主板产生的电磁辐射,自然而然就没有后面稳定可靠。 对于这样的问题,解决办法只能是不要让连线过长,另外要使用性能比较好的线,你可以到电脑市场买价格不同的USB延长线,会发现便宜的就会出现速度慢、2.0不能工作的问题。有时候产品为了照顾电磁兼容,会在USB线上加磁环,这种处理方法也会对USB的高速性带来负面影响。 按照协议,规定USB主机的端口必须能提供500毫安的驱动电流,实际中可能有不少地方都没有达到这个标准,如果是功耗比较大的设备,需要采用另外供电的方式,象有的移动硬盘需要外置电源或双USB口供电,就是为了保证对其供电稳定。
相关资源