M8系统开发手记(3)

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 02:52 点击:

Wayne Huang
2011年01月15日
0  写在前面的话
话说,这篇文章更新的有些晚,主要是感觉这周事情比较多的缘故吧。感觉很多时候,我们只是在忙忙碌碌,却不知道自己人生所追求的到底是什么,我们追求的是否会朽坏?很多时候我们并不会去思考这种问题,也会在这事上感到迷茫,感觉没有这种觉悟,作人就好似机器一样,每天重复着类似的事情,一个倒下了,还会有很多很多的替代。在每天的忙忙碌碌中,我们到底寻求的是什么?是这个我们终将离开的世界上的东西么?在缺失这种觉悟的情况下,人渐渐的失去了他所特有的属性,成为了庞大流水线上的一台机器,而他的荣耀就是他的生产效率~

1  M8系统中的Hello World
在上面一章中,我们已经了解到了M8最小系统的构建。接下来,我们将在上一个系统的基础上,尝试我们第一个小作品-流水灯。对于有编程基础的同学来说,"Hello World"一般都是我们写的第一个程序,而在MCU的世界里,流水灯往往也是第一个入门的经典实现。如同"Hello World"程序一样,流水灯的思想也是实现基本的输出操作。不同之处在于,流水灯的输出是动态的。所实现的效果,就如同霓虹灯的闪烁效果,根据喜好和实际的硬件,可以选择不同的效果。那么,接下来我们就分析一下流水灯的实现吧。

1.1  M8流水灯实现的介绍与分析
我们这里所要实现的流水灯,实际上就是一个个依次闪烁的灯而已。但是,既然这通常作为MCU的入门实现,自然有其道理,一方面他能让你熟悉MCU各IO口的操作,其次也让你熟悉MCU相关的一些功能。这样看来,MCU作为入门,是再好不过的实现了。话说,MCU的中文意思是"微控制器",那么作为IO口的操作,自然是一个重点,这和我们这种搞软件的CPU-"中央处理器"还是有比较大的不同的,因为CPU强调的是运算性能,而MCU强调的是控制性能。所以,你搞MCU如果连基本的IO口操作都不会,那你真的出门连招呼都不好意思和别人打了。不过,感觉现在这种本应该是"羞耻"的事情,却越来越成为"主流"文化了。比如,某些非私有单位的信息化建设负责人,往往可能连什么是信息化系统都不知道。更有甚者是除了windows就不知道其他操作系统,除了SQL Server,就不知道其他的数据库,感觉在他们的眼里,我们就成了"非主流"。言归正传,因为IO口的操作是MCU的生命,所以MCU的学习自然也要从IO口开始,就好像你写了个没有输出的理财程序,然后别人运行了很多次却没有任何提示,难道你和用户说:程序他自己知道结果的,你不用为你的投资操心?那这个程序不成了"浮云"了?

1.1.1  M8系统的IO口操作介绍
如上所述,IO口的操作是相当重要的,所以我们这里开篇就来看看这个灵魂人物-IO口。我个人觉得,衡量IO口能力的参数主要是IO口的驱动力。对于M8来说,输出输入电流是对等的,每个引脚最大不能超过40mA,但是总电流不能超过300mA。当然,针对每个特定的IO口,还是有一些更细化的限制,但是不论是输入还是输出电流,驱动发光二极管还是可以的。为什么这里我要分开说输入和输出呢?因为在51中,比如AT89S52系列,他的输入电流和输出电流是不对称的,因此在为51选择类似七段数码管的时候,会考虑到共阴公阳的问题。同时,M8与常规51比较大的特点是能够启用内置的上拉电阻。

M8控制IO口的寄存器有三个,分别是方向寄存器"DDRx"、数据寄存器"PORTx"和引脚寄存器"PINx"。"DDRx"和"PORTx"是可读写寄存器,"PINx"是只读寄存器。名字里的"x"是只具体的端口字母。而控制寄存器里的"SFIOR"里的"PUD"位是控制传说中的上拉电阻的。表1就是他们不同组合的结果。"PINx",不论是引脚作为输入还是输出,其值总为引脚上实际的电平值。


 
DDRx  PORTx  PDU  I/O  上拉  说明 
0  0  X  输入  无效  高阻 
0  1  0  输入  有效  外部引脚拉低时输出电流 
0  1  1  输入  无效  高阻 
1  0  X  输出  无效  低电平推挽输出,吸收电流 
1  1  X  输出  无效  高电平推挽输出,输出电流 
 

Table 1: IO相关寄存器定义

话说,我一般用IO口的时候,设计的驱动电流一般为5mA左右。因为虽然说手册的最大值离我使用的电流还有一大截。但是考虑到各个引脚的诸多限制,以及总电流不超过300mA的这种限制,采用平均5mA的的设计,可以避免因为一时的疏忽,比如接了8个40mA的负载,那这样虽然感觉每个引脚都没超过限定,但是总体就超额了。

1.1.2  M8系统的定时器/计数器0操作介绍
在前面我们已经介绍了IO口,接下来我们要介绍实现流水灯所必须的另一个部件-定时器。根据我们刚才的介绍,流水灯是依次的让LED闪烁。但是,即使MCU执行速度多慢,总比我们人的反应速度快,甚至是超越人的反应速度。因此,我们需要一个定时器来让我们每一次的变换可以延迟一段时间,让我们迟钝的视觉能有一个

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • cocos2d-x学习笔记(19)--label 、label atlas
      • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
      • Cocos2d-x学习(一):HelloWorld
      • cocos2dx在xcode下开发,编译到android上(2)
      • cocos2d 设置屏幕默认方向
      • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
      • Cocos2d-x 2.0 之 Actions “三板斧” 之一
      • cocos2d-x学习笔记(18)--游戏打包(windows平台)
      • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1