前段时间,小弟闲逛,偶发现一论坛,一前辈讲pic系列,讲得那个通俗啊!估计识字的都能看的懂,好东西不敢独享,拿出来与大家分享,未经作者同意擅自转载,请作者谅解,不过既然前辈那能这么无私,我这样也不为过吧,呵呵!
闲话少说,上菜了!
单片机入门不难------谈PIC系列(转自矿石收音机论坛---崂山)
坛子里的老兄小弟,如果你已经多次想进单片机之门而未入,如果你有很多空闲时间想打发,如果你玩收音机感到疲劳想换个口味,如果。。。
那就听小弟我白话白话,反正我们这些老大难也没有什么重要的事情做。。。。
闲言少许,话说人间事物的学习,不外两类:一类入门易,精通难比如矿石机,再比如练书法谁都会写两下,可写好却不是一朝一夕的事儿。另一类则入门难精通易,比如超外差收音机,学会需要各种放大、振荡、反馈、混频、中频、统调等等,但是一旦你学会,做出一个高质量的收音机,确也不是难事。单片机属于后者,所以无论如何,你得用些时间,学习一些新名词并理解,甚至还得花一些小钱。但是,一旦你掌握,其乐趣也像收音机一样,很有吸引力的。本故事说给一点也不懂计算机,甚至数字电路的引引道。一般入门应该有保障。
改为: 本故事说给懂电工、电子、逻辑电路的老家伙和半老家伙,如果对电子一窍不通人讲那我劝你也别瞎子点灯了,要是边讲基础边讲pic这书就不知唱到何年何月啦。
单片机不同于收音机,收音机的任务最终就是听好声音一个,单片机可以做很多事情,要你来安排它的工作。安排它就先的认识它,熟悉它
请看图1
这个8条腿的小螃蟹就是我们的第一顿饭,只要把它吃下去,以后的大餐就好办了。
第1、8条腿接电源 +5V 和 地线。头两条腿是螃蟹钳子,好吃的很。 现在剩下了 6 条腿
第2、3条腿 使用时外接一个晶振的东西 我们接一个 4 MHz的。
第4条腿是复位脚,是一个信号输入脚。单片机正常运行时接高电平。当有一个低电平脉冲输入到这个脚时单片机就复位。所谓复位就是单片机内部所有的工作部件统统回到规定的状态,程序也复位到头一句上开始逐条运行。例如,你设计的一个报警锁定的 LED红灯亮后,当需要解除报警时,用一个按钮给这个脚瞬时接地一下,相当于给它一个夫脉冲,系统就复位了,led灯就熄灭了,程序从头开始。
以上5个脚,几乎所有单片机都有,包括世界上最复杂的,和世界比较简单的单片机-----PIC12CE519
轮到底几条腿啦?奥是第5条腿,这条叫单片机的 I/O 脚。就是输入输出脚。你可通过程序动态地控制它作为输入或输出,作为输出时可以程序控制它的输出电平为高1或低0。所以,他的工作状态有四种:输入0,输入1,输出0,输出1
剩下的两条腿和第5脚功能一个样。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
下面介绍单片机汇编语言里的一个概念 “子程序”
下面我介绍 “子程序”
我先打个比方,如果你做一顿饭,要做汤,炒菜,炖鱼,汆丸子, 奥,忘了还有炒小螃蟹(大螃蟹现在都叫人吃的逮不着了:))期间有一个动作在我看来不断的重复,这个动作就是放盐 放盐的过程描述是这样的:
放盐: 用一把小勺子深入盐罐
舀出氯化钠适量 。
把小勺子里的氯化钠
均匀洒在锅里。
完毕
如果我们把做饭定义为主任务 那么放盐这个动作就叫做 子任务。
这样定义的一个好处就是描述主任务的时候比较方便,当你用语言文字描述主任务的时候,无论哪一道菜,到了该加盐的时候不必细说用一把小勺子深入盐罐...... 因为很多菜都有同样的这个过程,所以,你用 “放盐” 两个字就可以了。但是在你使用 放盐 这个词之前或者之后,你应该解释一下放盐 这个词的具体过程是什么。
我们单片机的程序也是一样的,如果你设计一个电视机的自动搜索频道的程序,程序要求电视机每搜索成功一个频道,它面板上的发光二极管就眨一次眼睛,也就说,先熄灭一段时间然后再点亮。这样就会遇到很多这样的眨眼动作,为了简化主程序我们可以把眨眼这样一个过程定义为一段子程序,以后每次遇到需要眨眼的时候就调用一次子程序就可以了。
子程序的定义是这样的
Zhayan: bcf GPIO,GP1 '管脚GP1输出低电平关闭LED灯 做为子程序标号是必须有的 标号
' 就是子程序的名字
nop
nop
nop
nop
nop
... .
bsf GPIO,GP1 '管脚GP1输出高电平点亮LED灯
nop
nop
nop
nop
...
return '这个命令表示子程序的结束 是必需的 否则这个子程序没有结束
这样,子程序就定义完了 如果想在程序的某个位置需要led灯熄灭以下(眨眼一次),只需在那个程序位置调用一下子程序就可以了。
调用的方法是用 call 命令。
主程序:
.... '这些点点表示主程序里的语句
....
......
...... '这个位置搜所成功一个台 需要“眨眼”一次
call Zhayan
...... '继续搜索下一个台的命令行
......
......
......
...... '这个位置搜所成功一个台 需要“眨眼”一次
call Zhayan
...... '继续搜索下一个台的命令行
......
......
...... '这个位置搜所成功一个台 需要“眨眼”一次
call Zhayan
...... '继续搜索下一个台的命令行
......
疑问1 我在一个主程序里固然可以调用另一个子程序,而我在一个子程序里能不能调用另一个子程序?
答 可以的,这叫子程序嵌套,甚至还可以在另一个子程序中再继续调用别的子程序。
疑问2 嗯,那继续往下调用下去,有限制么?
答 有,这叫允许嵌套的层数 每个品牌 型号的单片机允许的嵌套层数都是有规定的 例如pic16f74 允许8层
pic12e519 允许两层 也就是说pic12e519的主程序里可以调用子程序,子程序里海可以再调用子程序,到此为止不要再往下调用 了,否则程序报错或者超出你预计的结果。
疑问3 在同一层程序空间里,例如在我的某个子程序之中,调用另一个子程序的次数有限制么?
回答 没有限制,只要你的程序寄存器装得下你的程序。
疑问4 我听说单片机在调用子程序以前,好像需要程序“堆栈”访问什么的,要进行一些程序计数器的保存保护,以保证子程序返回来得时候,程序能够正确回到原来位置和环境。是这样的么?
答 pic单片机不用管这些问题,它是硬件自动完成这些堆栈的事情,我们的指令里不用关心这些。尽管如此,中档pic单片机的例如 pic16等系列,它们的程序存储器地址是分页的,尽量调用本页的子程序,如果子程序不在本页,而是在另一个页面里存放,你还是要告诉单片机你的子程序所在的页面数据的,具体操作指令可以查相关指令说明。我们的pic12c519的程序存储器,没有分页,不用关心这事。
本帖最后由 崂山 于 2008-1-5 02:23 编辑 ]
我们学习到这里,就已经初窥门庭了,下一步还有一个重要的关口-------中断
单片机的中断,概念并不难以理解。只是要真正理解运用编程处理一些实际中断的例子,却也不是很容易,甚至是单片机学习、入门的拦路虎。要想学会实际的中断处理编程,也还需要清楚一些程序存储器,程序结构,程序计数器,硬件堆栈,现场保护等这些个另杂碎概念。
因此,我们在学习中断以前,以后和学习中断过程中,都有必要介绍回顾复习一些有关上述关键词的概念和知识,否则,尽管你学了中断,用起来可还是不能得心应手,以至于茫然。
我还是用比喻的方法介绍一下中断的概念:
你的主程序任务是做一桌可口的饭菜,期间可能要多次调用子程序“撒盐”。
尽管子程序下边还有更小的子任务,比如“计算食盐的量”等过程,尽管这些子过程很复杂,但他们的出场时间和顺序是可以预料的,是可以预先安排的。也就说你肯定知道在什么时候放盐。
有一类子程序,他的出场时间是不确定的,突然的,处理他们的时间刻不容缓,必须赶紧的。我们称这一类子程序为 中断子程序。 也就是我们所说的 中断
你正在做菜的过程中,隔壁邻居小孩突然敲门说 他的二大爷在他房间里摔倒了 请你帮忙把二大爷扶起来。这是急迫的,必须处理的事务。
你肯定关掉炉子一溜烟跑出去帮忙,等回来以后再点着炉子继续做菜。
这个事件的特点就是发生的时间你无法预先知道,而这个任务必须得停下当前工作去处理,并且是刻不容缓。
从开始关炉子到回来点着炉子的这段时间里以及你的救人行为,就叫做 “中断子程序”。
在中断子程序过程中,你关炉子的动作,叫做“中断现场保护” 点着炉子叫做“中断现场恢复”中间走出去扶起隔壁二大爷到回来 叫做“中断任务处理”
小孩子敲门就叫做“中断请求”
这就是中断的基本概念。
在单片机里,中断的例子也是很多的。我举一个你手里的手机的例子,你的GSM手机正工作在赋闲,屏幕上也就显示个时间日期中国电信什么的,表面看没有什么。其实它内部的cpu高速运行忙碌地工作在诸如联络无线网络,查询是否有短消息发来,计算当前信号强度,时间等任务中。
你突然按下数字键“8”,此时内部cpu必须停下它正在干的工作来应付你,也就是清屏,显示你按下的数字8,然后再回到它原来的任务接着运行。(当然,这个例子不一恰当,现在有操作系统Windows-ce windows-mobile的手机的工作机制远没有如此的简单)
下面我们要接触和复习一些另杂碎,学习中断必须要弄明白单片机这些另杂碎,所以你还得忍耐他们一阵子。
(太晚了,待续)
[ 本帖最后由 崂山 于 2008-2-15 01:54 编辑 ]
一周热门 更多>