微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC16C84单片机介绍

PIC16C84单片机介绍

时间:02-22 来源:互联网 点击:

中断,否则禁止。

GIE是所有中断的允许与禁止。设置为1时,允许所有不可屏蔽中断,为0禁止。

四、PCL和PCLATH

程序计数器(PC)是13位。低字节PCL是可读,可写的寄存器。PC的高字节(PCH)不是直接可读,可写的。PCLATH(PC latch high) 是作为PC<12:8>的保持寄存器,这几位的内容被传送到程序计数器 的高位。当程序计数器在执行CALL,GOTO或写PCL等指令时,即向PC装入新的值。PC的高位由PCLATH装入。

具有8个13位宽度的硬件堆栈。堆栈空间它既不是程序存储器的一部分,也不是数据存储器的一个部分,堆栈的指针是不可读/写的。当执行CALL指令或中断被响应时,整个13位的PC被压入堆栈。在执行RETURN,RETLW,RETFIE等指令时,堆栈被弹出。PUSH(压入)和POP(弹出)不影响PCLATH。

堆栈是作为循环缓冲器。当堆栈被压入38次后,第9次压入将占据第一次压入的位置,第十次压入将占据第二次压入的位置,等等。同样当堆栈弹出第9次时,与第一次弹出是一样的。注意,没有状态位来 指明堆栈上溢式下溢的条件。没有PUSH,POP指令助记符,但CALL,R ETURN,RETLW,RETFIE等指令的执行或中断发生,将实际发生压栈退栈。

4-2程序存储器的页

PIC16C84具有1K的程序存储器,CALL,GOTO指令只有11位的地址范围,这11位的地址范围允许分支在2K程序存储器页大小的范围。

为将来PIC16C8X程序存储器的扩展,必须由另外两位来说明程序 存储器的页。这些页位来自于PCLATH<4:3>。当执行CALL、GOTO指令时,用户必须确保这些页位的编程等指向要求的程序存储器的页。

如果执行CALL指令,整个13位被压入堆栈。所以对于返回指令不要求 对PCLATH<4:3>位的管理。因为PC的值将会由退栈而获得。注意:PIC16C84忽略了PCLATH<4:3>位,这些位用于程序存储页1,2,3(0800H-1FFFH),不可以把PIC16C84的PCLATH<4:3>位用作通用读/写位,这会影响将来产品的向上兼容。

4-3间接寻址,INDF和FSR的作用

INDF寄存器不是物理寄存器,只是被用来与FSR寄存器连接以执行间接寻址。

使用INDF寄存器,就可以实现间接寻址。

使用INDF寄存器的任何指令,实际寻址数据是由文件选择寄存器(FSR)所决定的。读INDF自身(FSR=0),将产生00H。向INDF写,结果无操作(显然可以提供状态位)。8位FSR寄存器同状态寄存器STATUS<7>(IRP)组合可以得到9位地址。

然而PIC16C84是不用IRP的。使用下面的例程序,通过间接寻址清零。2OH~2FH单位。

MOVLW 20H ;初始化RAM的指针

MOVF FSR ;到FSR

NEXT CLRF INDF ;通过间接寻址清0,由FSR的内容所指问的寄存器。

INCF FSR ;(FSR)+1→FSR

BIFSS FSR,4;当FSR的第4位为1跳过下一条指令

GOTO NEXT ;否则入。

五 I/O端口

PIC16C84具有两个I/O端口,PORTA,PORTB。某些端口的引脚用来与另外一些功能复用。

5-1 PORTA和TRISA寄存器

PIC16C84的 PORTH是5位宽度的锁存器。RA4是施密特触发器输入,一个集电极开路输出。端口A的所有其它的引脚为TTL电平输入,含CMOS输出驱动。所有引脚有数据方向位(TRISA寄存器),可通过TRI SA来配置PORTA的引脚是输入式输出。设置TRISA的某位为1,则对应的 PORTA的位为输入,若设置为0,对应的PORTA的某位为输出。

读PORTA寄存器,读入引脚的状态,向PORTA写入,则写到PORTA的锁存器。所有的写操作都是读--修改--写操作。当向端口写时,它首先读端口引脚,然后修改其位,再写入端口的数据锁存器。下面这段程序是对端口A的初始化:

CLRF PORTA;初始化端口A

BSF STATUS,RPO;选择1块

MovLW CFH ;用于初始化数据方向的值

MOVWF TRISA;设置RA<3:0>为输入;RA<5:4>为输出 ;< 7:6>总是为0(无用)

RA4是为TMRO的时钟输入复用。即如果这一位用作TMRO的时钟输入,则端口A就不能用RA4。

5-2 PROTB和TRISB寄存器

PORTB是8位宽度的双向端口。相应的数据由TRISB决定,方法用端口A。

端口B的每一个引脚都具有内部弱的上拉电阻。通过一个控制位可以打开所有上拉电阻。这可通过对OPTION<7>RBPU位的置1,清0来控制。当端口引脚配置成输出时,内部弱上拉电阻被自动关闭。上位是 端口需要的。PORTB的4个引脚RBT~RB4具有信号改变中断的功能,只要将这几个引脚配置为输入,就可能引起中断的发生。在输入方式下,引脚的位与最后一次读PORTB的值进行比较,这四个引脚中有任何一个或多个不相同,产生RBIF中端(置INTCON<0>)。这个中断可能将 器件由SLEEP状态下唤醒。用户在中断服务程序中可以用这样的两个方法之一来清除中断。①通过清0RBIE(INT CON<3>位

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top