亿万先生论坛

 找回密码
 快速注册
QQ登录 只需一步,快速开始
搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
楼主: jimsboy
打印 上一主题 下一主题

讲讲单片机吧,给想了解它的人作为启蒙吧

    [复制链接]
21#
 楼主| 发表于 2016-4-14 10:26:50 | 只看该作者
有凤来仪 发表于 2016-4-13 21:35
在论坛上看见有人说数字万用表里有ic是软封装,我想是不是他本身也是一种单片机,另外像计时器这种东西实际不 ...

单片机有点像万金油,什么都会一点,但又不精。
那常用的软封装的万用表IC,那不属于单片机。因为你无法对它进行编程。它的功能已经固化。算是专用芯片。
高档的万用表,一般都是单片机加AD,虽然很多单片机自带AD,但是性能不行。这种高精度的应用场景还是专门配一个AD芯片。
计时器实际也不会用单片机,一般用时钟IC就行了。
回复 支持 反对 使用道具 举报
22#
发表于 2016-4-15 05:41:06 | 只看该作者
不错 ,期待继续更新  如果有讲C语言的就更好了
回复 使用道具 举报
23#
发表于 2016-4-20 07:03:05 来自手机 | 只看该作者
楼主辛苦了。赞赞
回复 使用道具 举报
24#
发表于 2016-4-20 07:41:39 来自手机 | 只看该作者
楼主。我一个字不落的看完了。期待后续
回复 使用道具 举报
25#
 楼主| 发表于 2016-4-21 17:49:45 | 只看该作者
今天讲一下输入功能。
前面就说了,单片机的管脚可以设置为输出,也可以设置为输入。前面讲了输出,但大部分小电子产品都应该可输入的,否则应用场景不大。就像前面的跑马灯,通电之后,它就依次亮下去,刚开始看看还觉得有点好玩,看一会儿就腻了。

那加一个按键做什么呢?我也没想好。那就做个简单的。你按一下开关,灯就亮,再按一下,灯就灭。呵呵,这么弱智的电路,一个双稳就搞定了,但我们现在杀鸡用牛刀,用单片机来做。目的只是为了让大家了解一下,单片机是怎么来实现这一功能的。其实单片机用得好与不好,主要就是看你软件思路(算法)好不好,基于会汇编语言还是会C语言,这是基本功。就像写作文,会拿钢笔还是会拿毛笔,但你好歹得会一种,你会写字了,不代表你能写出一篇好的文章来。所以,文采就相当于软件的算法,而会某种编程语言则是像用哪种笔。可以知道了吧,算法才是最终的目标。这和作文一样,再伟大的作家,也一定能将别人教成大作家。所谓师傅领进门,修行看个人。

好了,不说大道理,看一下怎么实现这一功能。首先还是要有硬件的,硬件怎么连?1号管脚连一个灯,2号脚连一个按键,按键就是按下去就接通,松开就断开的。按键怎么接?通常是拿一下电阻,一头接在2号脚上,另一头接电源,开关一头接2号脚,另一头接地。这样不按开关时,管脚电压为高,按下去之后变为低。

好了,看软件算法
1.将1号设为输出
2.将2号设为输入
3.读2号的电压,为高则回到3.
4.从0开始计数
5.读2号脚的电压,为高则回3
6.计数加1
7.如果没有数到10000,则回5
8.如果1号脚是高电平,则改为低电平(熄灯)
  否则,则将1号脚改为高电平(亮灯)
9.如果按键为低,则回到9
10.回到3

嗯,写完了,看看它是怎么工作的,1和2是初始化,就是将对应的管脚设置一下,这个没好说的。
从3开始,如果为高则回到3,为低呢?前面说过,程序是无法停得住的,它会以每秒百万次的速度去不停地执行,如果为高,它又回到3,再次判断。平时按键是没有按下的,所以它在拼命地执行第3句。这样程序就被“卡”在了这一句上。
当有按键按下,管脚变为低,不满足第3句的条件了,它就会执行下一句,也就是第4句。从0开始计数。这是要什么?没有说,程序会继续执行下一句。
读2的电压,为高则回3.---这是怎么回事,如果按键没有按下,它应该卡在第3句,既然已经跑到了第5句,那说明按键已经按下,为什么还要再判断一次?
这是我们今天要讲的一个重要内容,这就是按键的抖动,平时我们认为,按下开关,它就通了,松开,它就断了。实际上,在按键按下的瞬间,按键里边的动触点就会跳动,当它撞上定静触点,它会回弹(断开),然后在弹力的作下再次接触,有可能再次弹开...反复几次之后它才老老实实地和静触点接触。就像你把一个弹珠丢到水泥地上的感觉,它会跳几次才肯停在地面上。这个过程很短,一般只有千分之几秒(即几毫秒),这对人来说是感觉不到的,前面说了程序速度很快,它就能感觉检测得到,当开关按下去之后,电路是通-断-通-断-通-断-通---- 这样一个过程。
会在5-7之间跑至少1万次,所以这需要10毫秒的时间,这样就把这个跳动的时间给躲过去了。这称为去抖,是按键处理里边最常用的一种手段。

继续看大体的流程。按键被按下去之后10ms,软件这时可以保证是按键被按下去了。程序继续下向,如果原来灯是亮的,则改成灭。否则改成亮。
执行完之后,还有第9步,它会在这里等键键松开。一旦松开就回到第3步,松开的时候就没有加去抖,虽然松开时也可能会抖动,但是它最多会执行5-7,最终再次卡在第3步,等待下一次按键的动作。

好了,这就是一个完整的流程。如果有问题欢迎提问。

另外,我们在这个过程中提到了计数。可能有人喜欢搞明白,它怎么能计数?在单片机里边,除了有前面提到的特殊寄存器,这种寄存器里边的值不同,就会直接改变单片机的某一项功能。还有很多通用寄存器。通用寄存器,也就是“内存”和电脑的内存是同一个概念。我们现在的电脑内存基本都是2G打底了。1G=1024M=1048576KB。单片机有多少内存?一般只有一两KB,简直小得可怜。还有更可怜的,标准的51单片机里边只有百来个字节。前面举例用的PIC12F508只有25个字节。所以在选单片机时,需要根据你需要数据的大小选择合适的单片机,如果选的单片机的内存不足,那你的程序就无法运行。
一个字节有8个位,所以它的值可以是0-255(2^8-1),想存更大的数据怎么办?用两个,一个表示高位,一个表示低位。这样两个就能表示0-65535(2^16-1)了。两个字节就能存得下10000了。所以计数就这样,在内存里边找两个字节,将它的值改为0.这就是第4步的内容。将其中的一个作为低位,另一个就是高位了。计数就是拿低位的加1(加1是所有单片机都有的一条指令,你不要担心它不会加1怎么办),当加到255,你继续加1 ,它会自变成0,同时还会告诉你发生进位了,当检测到进位之后,你对高位再加1,这们就完成了计数。


好了,这个按一下亮再按一下灭的开关好像有点简单,我们能不能给它扩展一下用途?
我就先抛几块砖吧,引玉的活你们自己去想
1.多加一个按键,功能还是一样,只是无论按哪个都等同,那么就可以用于楼梯上了。
2.加10个按键,按指定的顺序按下按键,则控制一个电磁铁吸合。这就变成了密码锁。
3.多加几个灯,再多加几个开关,第一个按开关的灯被点亮。这就变成了抢答器。
4.两个灯,当高电平时,1号灯亮,低电平时2号灯亮,这就是逻辑笔。
呵呵,想要更多功能,发挥你的想象吧。









回复 支持 反对 使用道具 举报
26#
发表于 2016-5-3 21:14:24 | 只看该作者
从来没见到这么好的讲解。读完了,虽然没弄懂,但好歹囫囵吞了一遍。我一点基础也没有,需要一遍又一遍地读才行。谢谢楼主,辛苦了。
回复 使用道具 举报
27#
 楼主| 发表于 2016-5-4 12:04:59 | 只看该作者
大葱战将 发表于 2016-5-3 21:14
从来没见到这么好的讲解。读完了,虽然没弄懂,但好歹囫囵吞了一遍。我一点基础也没有,需要一遍又一遍地读 ...

有问题欢迎提问。
我以前觉得这东西能干什么?现在发现用它真的方便,唯一不爽的是写程序需要时间。写程序很无聊
回复 支持 反对 使用道具 举报
28#
发表于 2016-5-4 21:36:06 | 只看该作者
jimsboy 发表于 2016-5-4 12:04
有问题欢迎提问。
我以前觉得这东西能干什么?现在发现用它真的方便,唯一不爽的是写程序需要时间。写程 ...

谢谢楼主回复。具体想问什么一时还真觉得无从下嘴我会继续关注您的帖子。有疑惑的时候会请教您的
回复 支持 反对 使用道具 举报
29#
 楼主| 发表于 2016-5-5 17:35:25 | 只看该作者
前面讲了单片机的基本功能。它的管脚是既可以作为输入,还可以作为输出的。至于输入还是输出完全由软件控制的。讲到这里,你用单片机做一点简单的事情应该已经可以了。根据你的设计意图,将对应的管脚设为输入或输出,然后通过程序来控制它,当输入管脚为什么情况时输出什么内容,然后配合上电路完成你想实现的功能。

下面就要讲讲单片机的其他功能了,其他功能只是让你的程序可以变得更加灵活。总体来说,它们的加入可以简化你的硬件电路或者降低软件的难度。这里说的难度对初学者可能是“增加”难度,有了它们,单片机可以用较少的代码完成更多的事情。对初学者来说,感觉又增加了复杂度。

先讲第一个附加功能,也是最最重要的,那就是中断。
中断可以打断程序的正常运行而“插播”一段程序。就像一些紧急新闻可能打断原来的播放内容一样。比如你正在收看电视剧,这时忽然插播了一条紧急新闻,一只老虎从动物园跑出来了,大家赶紧关好门窗以防不测。对于你观众而言,这条新闻的出现是出乎你的意料的,但是它的出现并没有对电视剧的内容造成影响。只是额外让你知道了一个事情的发生,你可以立即关好门窗然后继续看你的电视。现在我们用一个简单的单片机例程来和这件事对应,让大家了解一下单片机的中断是个怎么回事。这个单片机例程就是电动自行车的控制器。电动自行车估计大家都骑过,打开电源,一拧油门(应该叫电门),车就开始跑,你扭得越多,控制器给电机的电能就越多,车就跑得越快。但是当捏下刹车时,不管油门拧多大,必须立即停止对电机的供电,否则影响刹车效果。当刹车松开之后,控制器又需要给电机供电让车子继续跑。

那我们来看看两者的相似之处,对于电视,今天放什么节目什么广告,都是预先定好的,这也可以认为是一种程序。对于电动车控制器来说,你加多大的油门我给电机供多少电这也是预先定好的,这也是一个程序。本来大家都按着事先定好的程序进行着,一切都很自然。这时关老虎从笼子门自己开了,老虎从里跑出来了,这是一个紧急事件发生了。对于电动车来说,本来在路上跑得好好的,突然有个小孩冲到了路中间并挡住了去路,开车的必须立即刹车,这也是一个紧急事件发生了。这种不知道什么时候会出现的事情打断了原来的平静,这就被称为中断事件。所以中断发生的时间你是不确定的,但可能发生这事件你却是事件能预见到的,否则车就不需要安装刹车了。发生了中断事件之后,你必须立即进行应急处理,对于老虎事件,应急处理就是立即中断当前的广播电视节目,插播这一紧急新闻。而对于电动车来说,则是立即刹车,同时切断电机的供电。这个过程称为中断响应。很显然,捏下刹车后切断对电机的供电这段程序是也是事先写好的,平时它不会被执行,只有发生了事情之后才被执行。所以写程序必须有“经验”否则你就可能写不出这样的程序。同样,应急处理也必须事件演练,各种消防演习就是让你学会处理紧急事件,给你增加“经验”。当要处理的事情完后之后,电视又继续播放正常的内容,而自行车则继续给电机供电继续向前跑。

好了,单片机的中断实际上你可以认为是一代应急代码。你必须事件想发这件事情发生后该做什么,并把它写成代码。主程序里边只需要写正常情况要执行的事。当发生了对应的事件之后,单片机自动地跳过去执行那段代码,执行完了之后它就会继续执行原来的程序部分。

如果不用中断,那事情就不一样了,对于电动车而言,你可以不停地检查有没有刹车动作,有的话就切断电机的供电。这个看上去也说得过去,这是因为这个事情相对来说比较简单,你可以不停地检查有没有发生某个事(这称为轮询)。但是如果需要关注的事件非常多,那么你都一项一项地检查,那就会浪费大量的CPU时间,前面说过,单片机的CPU每秒执行的命令数量虽然看上去很多,但毕竟是有限的,如果需要查询的内容非常多,那么CPU用于处理正常程序的时间就会变少,这就影响了CPU性能的发挥。如果换作电视台,那么就很可笑了。你的记者每天都往动物园跑几百次,如果发现老虎跑出来了就赶紧写稿子叫电视台播放,那问题来了,如果你不一天跑几百次,万一你刚走老虎跑出来了怎么办?另外,除了动物园,还有工厂也可能发生火灾或有毒气体泄漏,你也得一天跑几百次,一年365天还得不分昼夜,记者不累死才怪。有中断,则事情就简单多了,记者可以关心它关心的内容,一旦发生了事情,人家一个电话给记者,记者听到电话后立即放下手头的活赶往现场。这样工作才会更有效率。

一个单片机可以允许多个中断,每个中断都对应一种情况,你只需要将可能发生的情况出现后要怎么处理写好,一旦发生了这个问题,程序就能自动跑过去执行这段内容,执行完之后它又能自动地接着刚才的正常程序继续工作。
嗯,中断好像就是这么回事。你有没有能理解?有问题欢迎提问。











回复 支持 反对 使用道具 举报
30#
发表于 2016-5-6 11:38:09 | 只看该作者
赞一个,学习啦!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 快速注册
本版积分规则
手机版|APP|亿万先生技术论坛 ( 鄂ICP备 09003585号-1 )   GMT+8, 2018-1-18 20:05 , Processed in 0.321675 second(s), 9 queries , Gzip On, Memcache On.
Powered by Discuz! X3.2 © 2001-2013 Comsenz Inc.
CopyRight © 亿万先生论坛
电子邮箱:admin@jdwx.info | 联系 QQ:3081868839 | 官方网址:www.jdwx.info
Qiji. All Rights Reserved
服务条款 | 隐私声明
Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有
鄂ICP备09003585号-1鄂公网安备42010602000420号
快速回复 返回顶部 返回列表
亿万先生官网欢迎您