电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

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

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

    [复制链接]
发表于 2016-4-9 06:06:58 | 显示全部楼层
jimsboy 发表于 2016-4-8 09:18
彩电那个 有些电视里边只有一个芯片,俗称“单片机”,类似的还有双片机,三片机。
那种不是我这里讲的 ...

多谢你的耐心讲解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-9 10:22:43 | 显示全部楼层
今天周末,天气不怎么好,继续讲单片机。

前面大概地说了一下单片机是个什么样的东西。单片机的功能的确非常简单。所以能做出什么东西来,就看你的脑洞了,更要的是有足够的耐心去指挥它。因为有时一个非常简单的功能,程序写起来都是一大片。

接着上次的。
上次说到,单片机只能接受两种命令。一是控制管脚输出高电平还是低电平,二是告诉你某个管脚是高电平还是低电平。但就是这么简单的一句话,实际上还要分成两步才能完成。首先第一步就是告诉单片机,这个管脚是用来输出还是用来读取(输入)。完成这一步才能进行下一步操作。具体地说,如果你让它是输出,那么你可以再下一个命令,告诉它输出是高电平还是低电平。同样,如果你让它是输入,还需要再下一个读取命令才能知道这个某脚上的电平状态是高还是低。

下面就要说一说,怎么给单片机下命令,也就是指令长什么模样?指令其实就是一排数字,不同的数值代表不同的指令。具体什么数值代表什么指令,每种单片机都不一样。因此就会有什么51单片机,AVR单片机,PIC单片机等等。所以你想玩哪种单片机,就得找对应的书去看它的指令。然后你把这一堆指令一条一条地写出来,找个编程器把它写入单片机,单片机就可以运行了。
那我们先来对指令有个感性的认识。
这里我们用指令最为简单的PIC举例。
PIC指令.JPG

先不看具体内容,看见有一个写着12位操作码的那一列了吗?那就是指令。就是一串长度为12位的数,不过这里的每位只允许取0或者1.(这实际就是二进制,具体是怎么个东西后面讲)

你这时可能会有意见了,你不是说单片机只有两种命令的吗?这里怎么冒出来了这么多?
因为前面说了,如果让你去指挥,只需要两条就行了,问题我可能把你塞进单片机啊。比如单片机读到了管脚的电平状态,总得汇报给谁吧?不可能等你人来处理啊。这就是单片机必须能代替你,你只需要把事情事先交待好了,比如,当发生什么什么时,就做什么,否则就做什么什么。所以你见到的这么多指令,就要就是用来描述这些内容的。

这下好了,这种指令已经有二三十条了,理论上,你完全可以用这些12位的数据完成对单片机的编程。如果这样玩的话,估计不会有几个人会对单片机感兴趣了。因此你可以使用图上的“助记符”,然后由电脑将助记符一一对应地转成12位的指令。这里的助记符就实际就是汇编指令。

当然,我们今天讨论的重点不是在于让你会用它,而是让你感觉到,程序是如何来让单片机发挥作用的。到这里就基本就可以知道了,单片机已经规定好了一串串的数值作为指令,你按它的规定就可以写出一串串的数值来控制它。当然,我们写的时候可以使用“助记符”来写,也就是汇编指令来写。写着这些助记符之后,电脑会将它一一对应地转化为数值,这就是可以写到单片机里的程序了。

下面,我简单地说明一下,我该怎么写前面说的跑马灯。
这个过程只是用PIC来举例,让你感受到在这个过程中,人和电脑分别做了什么事。


未完,待续




回复 支持 反对

使用道具 举报

发表于 2016-4-12 20:21:47 来自手机 | 显示全部楼层
还有什么用途呢还有什么用途呢,我不懂
回复 支持 反对

使用道具 举报

发表于 2016-4-13 15:35:48 来自手机 | 显示全部楼层
数字万用表中的黑圆圆的覆膜一电路和语音存储电路的控制电路是单片机吗?还有电动车控制器的核心集成电路是吗?
回复 支持 反对

使用道具 举报

发表于 2016-4-13 15:44:34 | 显示全部楼层
        说的太好了     通俗易懂   还望 多发些更深更一步的贴    给我们这些还不太懂单片机的人们一个指导   谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-13 20:39:58 | 显示全部楼层
继续开讲

刚开始就说了,如果让你去控制单片机,让它实现跑马灯,你应该不停地按下面的顺序给单片机下命令。
1.1号输出高电平,其他输出低
2.等0.5秒
3,1号输出低电平,2号输出高
4.等0.5秒
5.2号输出低,3号输出高
6.等0.5秒
7. 3号输出低,4号输出高
8. 等0.5秒
9.重复1-8

那我们按这个思路,将它转化为单片机的指令。但是指令总共有那么30多条。你得在里边找出合适的指令,来完成你的命令.
下面这段内容,由于涉及到单片机的具体操作,所以新手可能点无从下手,我写了“看手册可以知道“的,你就当作是已知内容。因为你目前对单片机不了解,所以这些“已知内容”还是有点陌生。学习某种单片机,实际上就是了解这些内容的过程。由于你以后不一定就用这个型号的单片机,所以这些具体的内容就没必要深究它在文档的哪一页。这个内容等后面再讲

先看第一条
将1号管脚设为高电平,其他设为低电平
那我们该怎么给它下命令呢? 第一,我必须将1 2 3 4号管脚全设为输出,你就在里边找将管脚设为输出的命令是什么,看手册我们可以知道,这条命令叫TRIS ,将哪个管脚设为输出呢?我们看看单片机有哪些管脚?看了手册你就知道,12F508有GP0-5 共6个管脚可以被我们控制,但是手册里又说了。GP3是不能用于输出的。那我们就选 GP0 GP1 GP2 GP4管脚,分别对应于前面的1 2 3 4

那好,我们要将0 1 2 4管脚设为输出,手册上说 0表示输出,1表示输入,所以我们要将4,2,1,0管脚设为输出的命令就是 TRIS 101000
为什么是这样 因为它有6个可控制的管脚,分别为GP5 4 3 2 1 0,我们需要将 4 2 1 0设为输出,3只能作为输入,GP5呢?GP5没有用到,随便你。我给它安排的是1(输入)。所以它们就是入出入出出出 (高的在前),也就是101000,当然如果你想把GP5也设为输出,那就是001000

所以,第一条命令就是 TRIS 101000

然后还要将1号脚(也就是GP0)设为高。 在数字电路里边,1就表示高,0表示低。那么GP5,4 3 2 1 0就应该 表示为000001.注意,GP5 和3是输入,但是位置你还得给它留着,否则就对歪了,当然,它作为输入时,对应的位置上是1还是0是无所谓的。我习惯用0.

怎么改变管脚的状态呢?在命令里找了一圈,没有发现这条命令。那怎么办?读手册可以知道,想改变管脚的电平状态,只要将这组数据保存到一定特定的位置就行了。这怎么理解呢?就像我们上论坛,要输入用户名和密码。这实际就是给电脑发指令。但电脑不需要给输用户名配一个键盘,给密码再配一个键盘。而是由位置决定。你把光标停在用户名这一栏,那么你输入的内容就是用户名,停在密码,输入的内容就表示密码,停在验证码的框里,就表示输入的内容是验证码。
所以单片机里有很多这种地方可以让你输入内容,因为这些内容直接就会引起某个功能,所以我们不叫它为输入,而是称为设置。这些给你设置内容的地方称为特殊寄存器 一个单片机里有很多这种寄存器。只要修改它们的值,就可以实现一定的功能。为了方便描述,它们都有一个编号,每个的编号都不一样。
好了,我们看看怎么设置管脚的电平状态吧。
根据手册,这个单片机的第6号寄存器就是用来控制管脚电平状态的。当管脚为输出时,1就表示高,0就表示低。你改变它里边的值,管脚上的电压状态就会改变。
所以只需要向第6号寄存器里输入000001就达到目的了。
查了一下指令表,里边没有这指令可以将一个数保存到某个寄存器里。但是可以用两个命令来实现这一功能。第一个指令为MOVLW 这个指令的功能是将一个数据放到一个叫名子叫W的空间里。另一个指令是将W里的数据转移到你指定的编号里去。嗯,就用这两条命令就可以达到目的。
因此 第2,3条指令就是
MOVLW  000001
MOVWF  6

回过头来读一下,第一步,将000001存到W这个空间里去。第二步将W空间的数据转移到第6号寄存器里去。很明显,通过这两步,我们就将000001放到了第6号寄存器里了。一旦数据放进去,单片机管脚的电平状态立即跟着就改变了。现在GP5 4 3 2 1都是0,也就是低。而GP0是1,也就是高。

到这里,我们完成了1号管脚输出高电平的过程。

接着要等0.5秒,也就是什么事也不做。什么事不做也有一条指令,叫NOP。执行一条这个指令需要一个周期,一个周期是多少?根据手册,这个单片机的振荡器的频率为4M,每4个周期为1个指令周期。也就是说1秒可以执行1M个指令。那么我需要0.5秒,得连写50万个NOP。这简直没法活了。这时我们就得想想其他办法了。方法一定是有的。它的方法是让单片机在那里做一个很简单的计算,做什么事呢?让单片机将一个寄存器里放50万,然后让它减1,减到0了,那就是执行了50万次了。向寄存器里放一个数我们刚讲过,减1也有专门的指令叫DECF 让它减到0就结束该怎么做呢?我们找到了一条新指令叫DEFSZ 它是什么意思,当减到0时就跳过下一条指令,直接执行下下条指令。
那么好了,方法出来了
  MOVLW 500000
  MOVWF 20
  DEFSZ 20
  GOTO 上一句
  ...接下来的事.....

回过头来看看,先将50万放到W里边,然后将数据转移到20号空间,20号空间没有什么功能,就是给你临时放放数据的。
然后对20号空间(20号寄存器)里的数据减1,如果是0就跳过下一条,执行接下来的事。否则就回到上一句,继续减1,很显然,它要被执行50万次再能执行接下来的事。
  这段程序实际上还有错误,那只是单片机自身的原因引起的,为了不影响我们的主要目标,我们就先不管具体错在哪里了,我们只管思维逻辑上是对的。

接下来又是改变输出的值,前面已经指定了GP 4 2 1 0为输出了,因为我们没修改过,这就不需要再次指定了。直接修改管脚的电平状态就行了
MOVLW  000010
MOVWF  6

接下来又是等0.5秒,不要我说了吧,把上面的再抄一遍。
接下来
MOVLW  000100
MOVWF  6
再等0.5秒
接下来
MOVLW  010000
MOVWF  6
等0.5秒之后,
GOTO (第一句)

这里不能写中文写第一句,同样,前面有个GOTO 上一句也是不行的。这个问题很简单,你在对应的位置设一个标志。就改成这样

  MOVLW 500000
  MOVWF 20
AAC:
  DEFSZ 20
  GOTO AAC

这样就可以了。同样goto 第一句 我们在在 TRIS 101000之前也弄一个标志,标志就写个START00

START00:
TRIS 101000
....
....
GOTO START00
这样就行了。标志别重复就行。

好了,这样一个程序就写完了。这种指令叫汇编指令,所以这种程序叫汇编程序。
下面的事交给电脑了,你用记事本写完这些内容。然后用厂家提供的软件,它就会将指令翻译成12位的数据。然后保存为一个文件,后缀名叫.bin
这就是编译好的程序了,你用烧片器把它写到PIC12F508的单片机里,然后在GP4 2 1 0上接上LED,通电后你就可以看到灯在那里跑了。

到这里,你也应该大概地知道,编程是怎么回事,以及为什么要写程序了。
但是你写什么样的程序,就得得发挥你的想像力了。

由于到现在才讲到了非常简单的一个功能,所以大家的想像空间还很有限。这时可能你还是觉得这东西没什么大用。
但是等我讲完它的其他部分,你会发现,可以发挥的余地其实很大。





回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-13 20:44:28 | 显示全部楼层
shunchen 发表于 2016-4-12 20:21
还有什么用途呢还有什么用途呢,我不懂

单片机的用途是你来定的。
比如我要路灯晚上6点亮,到夜里12点灭。

你只需要让它在那里数数。1秒它能数100万。你算好了,让它数到多少就将一个管脚设为高电平,用它驱动一个固态继电器将路灯点亮,再数多少次后,再将管脚设为低电平关闭路灯。这就是一个简单的定时器。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-13 20:54:19 | 显示全部楼层
有凤来仪 发表于 2016-4-13 15:35
数字万用表中的黑圆圆的覆膜一电路和语音存储电路的控制电路是单片机吗?还有电动车控制器的核心集成电路是 ...

万用表里的是专用芯片。它里边的主要功能是AD。模数转换,就是将一个电压值用数字来表示。
语音存储也是专用芯片,声音实际上可以用一个交变的电压驱动喇叭来产生。反之,用话筒也能将声音转成电信号。芯片里边的AD将电信号变成数值,然后存起来,每秒要存几千次。播放时就是将数据转成电压(DA),然后驱动喇叭。这个过程也可以用单片机,但是这就要求单片机上有AD和DA,同时有很大的存储空间用来存声音。这种单片机会非常贵甚至根本买不到。

电动车控制器用单片机的还是比较多。
它的主要功能是产生PWM,很多单片机都有PWM功能。你拧油门把手,实际上是改变了一个电阻。电阻的改变引起电压的改变。单片机里有AD,就可以知道当前的电压,然后根据一定的要求产生PWM来驱动电机,从而改变电机输出的力最。无刷的会更复杂。
回复 支持 反对

使用道具 举报

发表于 2016-4-13 21:35:40 | 显示全部楼层
在论坛上看见有人说数字万用表里有ic是软封装,我想是不是他本身也是一种单片机,另外像计时器这种东西实际不会用单片机实现吧./有点大材小用
回复 支持 反对

使用道具 举报

发表于 2016-4-14 00:40:47 来自手机 | 显示全部楼层
老师把你qq留下,方便请教
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

手机版|APP|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2024-3-29 18:37 , Processed in 0.119015 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表