在PIC系列单片机入门并不难(2)中讲的是两个指令如何控制管脚电平的高低。前提是所有管脚已经被定义成输出了(OUT)如果被定义成了输入,则上次的指令虽然也能运行,但运行后丝毫不能改变管脚电平高低,因为此时管脚是输入状态,电平取决于外部输入,指令无法改变。
在PIC单片机系列中,改变I/O口的输入输出依靠写入寄存器TRIS的值,相应位写0,表示对应管脚被定义成了输出,写1,就是输入。
现在假如预把GP1、GP2管脚定义成输出,其他脚全是输入。那就应该向TRIS寄存器写入二进制数 11111001,换算成十六进制就是F9H.
依照以前我们学到的知识,在PIC系列单片机里,本来应该用下列的语句来完成我们的设定:
movlw 0F9H '常数进W,以字母开头的常数前面必须加0
movwf TRISA '把W内的数复制到TRIS
实际上PIC系列的单片机也都是这么写的,后面加的A,表示第一个8位的口(有的单片机不仅一个口,还有好几个8位的I/O口如TRISB、TRISC、TRISD等等).
但是,记住了,PIC12系列的单片机必须改写成为:
movlw 0F9H '常数进W,以字母开头的常数前面必须加0
tris GPIO '把W内的数复制到TRIS,以后凡见到这个指令一律理解成 movwf TRISA
写法不同,意思是一样的.这样你就又学了一个指令TRIS,不过这个指令的实质还是你曾经学过的movwf 只是写法不同罢了.在PIC12系列里TRIS作为指令, 在其他系列(PIC16\17\18)里把TRIS作为普通寄存器看待.因为我们现在讲的就是PIC12CE519,所以我们暂时用tris GPIO 这个格式,等以后进入PIC16C877 我们再写成 movwf TRISA,至于理解按照后者进行.
如果我们要控制GP1、GP2管脚的输出电平, 其他管脚作为输入.并且让GP1输出低电平,GP2输出高电平.完整的程序如下:
movlw 0F9H '常数进W
tris GPIO '把W内的数复制到TRIS ,GP1 GP2为输出,其他为输入
'此行无命令,起到的作用是容易读懂程序
movlw 04H '常数4的二进制是 00000100 ,GP1=0 GP2=1
movwf GPIO 'W内的数进GPIO输出生效,原来定义成输入的脚的电平,不会受该句影响