查看: 1191|回复: 0
打印 上一主题 下一主题

GP0,GP1.

[复制链接]
跳转到指定楼层
沙发
发表于 2015-10-15 08:04:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原来编辑帖子是有时间限制的阿。也好,俺学乖了,先在记事本上编辑,在复制粘帖。
欢迎各位捧场,在此不敢以讲课回答问题的姿态出现,不过各位的问题我尽力而为。

       上边我们已经把8条腿消化掉了,其实我们要弄明白的也就3只腿,我们再简单一些,先整明白两条腿,即GP0,GP1.这两条腿低级一点的用法,可以控制继电器,LED灯,高级一些的用法可以进行I2C总线,RS232总线的通信,作为扩展输入可以模拟出来A/D转换器(6--7bit),可以测量一个电阻的粗略值。作为输出也可以直接推动扬声器奏出音乐。这是后话暂且不提。

现在要控制使用这两只腿,我这个三脚猫功夫的说书的不得不讲一下软件了,要想讲明白软件又不得不涉及到单片机的内部结构。那位说啦,你可别提这软件和结构了,以前俺就是让它们打败的,现在听到这个心里就打鼓。嘿嘿,不要紧,果真如你所说,那你就不妨跟着我再失败一次, 反正吗多一次失败又不纳税,嘿嘿。不过你也要有思想准备,彻底弄明白是个渐进的过程。

       要说这程序和单片机内部结构,还真是老大难,不过蟹黄蟹肉都可都在里面。我现在要是给你说PIC单片机是哈佛结构的,51系列是冯-诺伊曼结构的,恐怕你要立马扎走人了。所以我得用点心思不让你溜号。

       好在PIC系列的制造商(microchip 微芯公司 美国)理解我等苦衷,全部只有35条指令,而且有一些指令我们一般很少使用,常用的也就十几句,用的时候查手册,无需记忆。就算我们两天学习一句,也就两三个月时间,总比到老了还怕它们强啊。废话少说先看下面的两个例语:

my_name006:           movlw  02h       '常数2进入w
                              movwf  GPIO     'W 的数进入 寄存器GPIO

这就是我们编的程序里的两个句子,也叫源程序。有以下特点

每行只能写一句话
每句话由四部分组成:

标号:  操作指令   操作数        '程序注释

下面我结合例子把这四部分解释一下。

第一部分 my_name006: 叫做标号,它是由字母或数字组成,由冒号结束。标号可有可无,比如第二句就没有标号。
第二部分movlw 叫做操作指令。它是必须有的,不能省略。PIC 系列的单片机共有 35 条指令。
第三部分02h   叫做操作数。有的指令没有操作数或者操作数是默认的,也不用写。
第四部分是程序注释,必须以单引号开头,主要作用是提醒和备忘。注释也是可有可无。

第二个例句中,省略了标号,当然注释也可以省略。他的指令是movwf, 操作数是GPIO。操作数不一定是数字,也可能是一个由字母组成的字符串。

      知道了语句格式以后,我们下面就学习一些常用语句。我们先把这两个例句弄清楚。

      这两句话的作用是把 2 这个常数写入到 GPIO 这个寄存器里。
      单片机里有一些部件需要我们使用和操作,都是通过读写寄存器来实现的。每个部件都对应有操控它的寄存器,例如我们要控制使用的管脚GP0,GP1 这两个管脚对应的寄存器就叫做GPIO。对GPIO寄存器读操作,实际等效察看管脚电平的高低;对GPIO寄存器相应的位写1操作,实际等校让管脚输出高电平。写0,输出低电平。

每个寄存器可以储存一个八位的二进制数。这八个位的每个位都有名称,从左向右的名称是:
                                            左端第首位名称叫D7,
                                            左端第二位名称叫D6,
                                            左端第三位名称叫D5,
                                            左端第四位名称叫D4,
                                            左端第五位名称叫D3,
                                            左端第六位名称叫D2,
                                            左端第七位名称叫D1,
                                                 最后一位叫D0,

而每一个位对应一个管脚的电平,例如当GPIO寄存器的D0位等于1时表示管脚GP0 的电平是高电平。D0位等于0时表示管脚GP0 的电平是低电平。常数2的八位二进制表示是“00000010”  所以,GPIO寄存器存放的8位2进制数的每个位的值以及管脚电平是:
                                D7对 应于内部总线管脚的电平      D7=0  内部总线管脚输出低电平            
                                D6对应于内部总线管脚的电平       D6=0  内部总线管脚输出低电平
                                D5对应于GP5 管脚的电平            D5=0   GP5 管脚输出低电平
                                D4对应于GP4 管脚的电平            D4=0   GP4 管脚输出低电平
                                D3对应于GP3 管脚的电平            D3=0   GP3 管脚输出低电平
                                D2对应于GP2 管脚的电平            D2=0   GP2 管脚输出低电平
                                D1对应于GP1 管脚的电平            D1=1   GP1 管脚输出低电平     
                                D0对应于GP0 管脚的电平            D0=0   GP0 管脚输出低电平
GP0---GP5管脚我们可以从上一讲的图1硬件中查出所对应的管脚。d7 d6 对应的内部时钟和数据总线我们现在暂且不要管它。以后本事大了在调_教它们。在我们的例句中,向GPIO寄存器写入了2,常数2的八位二进制表示是“00000010”  因此如果此时GP0, Gp1等都已经被定义成输出的话,那么GP1输出高电平(接LED灯亮),GP0 输出低电平(所接led灯熄) 。

       截止到现在,你已经学会如何控制管脚的电平高低了。尽管还有一些疑问,比如怎样定义管脚为输出脚(以后会说),我得说如果事先gp1,gp0这两个管脚处于输入状态,这两个例句无效,是控制不了电平的。

      无论如何,这一会儿,你就学会了两个指令,35条我看也没啥难的。  

'------------------------------------------------------------------------------

再加深一下对寄存器的认识:

要把一个常数存储到,或者说写到一个寄存器中,仅用一条指令是办不到的,必须通过一个特殊的寄存器W,把数据倒过去. 这就应该使用到两个语句。

movlw   02H    指令的意思是把一个常数存入特殊寄存器W, 这个常数是3,后面的H是表示十六进制
movwf   GPIO   指令的意思是把特殊寄存器W的数值存入寄存器. 这个寄存器的名称是 GPIO

这里涉及到两个概念,常数和寄存器.
常数好说,比如说十进制数 35,  26 但要注意,在单片机系统里我们一般不用十进制,而使用十六进制. 有关数制转换方面的知识,是计算机的基础,必须会熟练地在二进制、十六进制、十进制之间转换,我就不罗索了.
寄存器也叫单片机的内存。
一个寄存器可以存储的数值范围是0--255,用十六进制表示就是 0---FFH.用二进制表示就是00000000----11111111.
以后要养成习惯用十六进制表示数.

那么,一个单片机里有多少个这样的寄存器哩,pic12ce512里面有1024个这样的寄存器可以供你使用,为了使用方便生产商已经给它们编上了号码,第一号码是000H,往下依照次序为 001H,002H........3FFH.(怎么样,开始用十六进制说事了吧,如果你不熟悉熟制转换赶紧补课来得及)

有了编号就像我们居住的房间有了房间号码,使用就方便的多了.房间号码在邮政行业叫地址,因此我们称这些号码叫做寄存器地址,或称地址数  例如 名称为 GPIO 的寄存器,他的地址,或地址数是  06H 。所以我们的两个例句完全等同于:

my_name006:           movlw  02h      '常数2进入w
                              movwf  06H      'W 的数进入 寄存器GPIO
'-----------------------------------------
有两个寄存器比较特殊,它们没有地址,一个名字叫做 W,  另一个叫做 TRIS. 所以他们两个在存储数据的时候比较快,一个指令就可以解决问题,例如:    movlw   03H    一条指令就把常数3写入到W寄存器了。关于TRIS寄存器,我们以后用到它再说.
除了他们两个以外的其他所有寄存器,在写入数据时一般都要用两条指令进行。

今天就扯到这里,虽然只有两个指令,但主要目的是要同学们接触一下指令,建立寄存器的概念以及他们同硬件部件的联系。增强学习的信心。能有这些体会,这一节就算过关了。
           随着以后的深入,你会发现小小单片机里面是一个大世界,兴趣也由此而生。转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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