二、I/O 寄存器
PIC16C52/54/56/58有二个I/O口RA、RB(F5、F6),PIC16C55/57有三个I/O口RA、RB、RC(F5、F6、F7)。与其它寄存器一样,它们皆可由指令来读写。它们是可编程双向I/O口,可由程序来编程确定每一根I/O端的输入/输出状态。
RESET后所有的I/O口都置成输入态(等于高阻态),即I/O控制寄存器(TRISA、TRISB、TRISC)都被置成“1”。
1、F5(A口)
4位I/O口寄存器。只能使用其低4位。高4位永远定义为“0”。
2、F6(B口)
8位I/O口寄存器。
3、F7(C口)
对于PIC16C55/PIC16C57,它是一个8位I/O口寄存器。
对于PIC16C54/56/58,它是一个通用寄存器。
§1.5.3 通用寄存器
PIC16C54/56:
07H~1FH
PIC16C55:
08H~1FH
PIC16C57/58:
08H-0FH:共有通用寄存器(无须体选择即可寻址)。
10H-1FH:Bank0的通用寄存器
20H-2FH:物理上等同于00H-0FH。
30H-3FH:Bank1的通用寄存器
40H-4FH:物理上等同于00H-0FH。
50H-5FH:Bank2的通用寄存器
60H-6FH:物理上等同于00H-0FH。
70H-7FH:Bank3的通用寄存器。
三、特殊功能寄存器
1、工作寄存器(W)
W用来存放两操作数指令中的第二个操作数,或用以进行内部数据传送。算术逻辑单元ALU把W和寄存器连接起来,ALU的运算结果通过总据总线可以送到W保存。
2、I/O控制寄存器(TRISA、TRISB、TRISC)
TRISA、TRISB、TRISC分别对应I/O口A、B、C。其中TRISA只有4位,和A口对应。执行“TRIS f”指令可把W的值置入I/O控制寄存器,以此来定义各I/O端的输入/输出态。当写入“1”时,将相应的I/O端置成输入态(高阻态),当写入“0”,则将相应的I/O端置成输出态。I/O控制寄存器都是只写寄存器,在RESET后自动置为全“1”,即所有I/O口都为输入态。
3、预设倍数/RTCC选择寄存器(OPTION)
OPTION可用于:
a、定义预分频器的预分频参数。
b、分配预分频器(Prescaler)给RTCC或WDT。注意预分频器只能分配给RTCC或WDT其中之一使用,不能同时分配。
c、定义RTCC的信号源。
d、定义RTCC信号源的触发沿(上升沿触发或下降沿触发)。
当预分频器分配给RTCC后,所有写RTCC寄存器的指令如CLRF 1、MOVWF 1等都会清除预分频器。同理,分配给WDT时,诸如CLRWDT和SLEEP指令将清除预分频器里已有的值使其归零。