PIC16C5X的I/O口结构(转)

第八节:I/O口结构

www.zsMCU.com   2006-10-23    中山单片机学习网

    PIC16C5X的所有I/O端的结构都是相同的,如图1.10所示:

    所有I/O端皆可置成输入或输出态。输入无锁存,所以外部输入信号应保持到让CPU读入为止。输出锁存。
    I/O端的输入/输出状态由对应的I/O控制寄存器"TRIS f"控制,当"TRIS f"将"1"置入I/O控制器时Q1和Q2都处于截止态,所以I/O端即呈高阻态(输入态)。当执行 I/O读指令(如MOVF 6,W),把当前I/O端的状态读入数据总线。当"TRIS f"将"0"置入I/O控制器时,Q1和Q2的导通情况将要由数据锁存器Q端的状态来决定。当写入数据为"1"时,Q端为低电平0,则Q1导通,I/O输出为高电平。反之,当写入数据为"0"时,Q端为"1",则Q2导通,I/O端输出为低电平。I/O读写时序如图1.11所示:

PIC16C5X的I/O口结构(转)_第1张图片

    注:本图显示了PORTB口的一个写入→读出的连续动作。I/O脚电平的建立时间=0.25TCY-TPD,其中TCY为指令周期,所以对于高速振荡来说,连续的写入→读出可能会有问题,两者中间应有延迟。
 
I/O口使用注意事项:

a、I/O方向转置的问题

    某时候可能需要一个I/O口一会做输入,一会又做输出。这就是I/O方向的转置。

    在编写这种I/O转置程序时必须注意,有些指令如位设置指令(BSF、BCF)写I/O口时是先从I/O读入其状态,执行位操作后再将结果写回去覆盖原来的内容(输出的结果放在I/O口的数据锁存器)。举个例说:"BSF 6,5"这条指令的目的是要把B口的第6位置为高电平"1"。执行这条指令时,先把整个B口当前的状态内容读入到CPU,把第6位置成"1"后再把结果(8个位)重新输出到B口。如果B口中的有一个I/O端是需要方向转置的(比如说bit1),而这时是处于输入态,那么B口的状态值重新写入后,B口的数据锁存器1(见图1.9相对于B口bit1的锁存器)的锁存值就是当前B口Bit1的状态。这可能和先前Bit1作为输出时所锁存的值不同,所以当Bit1再转置成输出态时,出现在bit1端的状态就可能和先前的输出态不同了。

b、I/O的"线或"和"线与"

    从图1.10看出:PIC I/O端输出电路为CMOS互补推挽输出电路。 因此与其他这类电路一样,当某个PIC I/O端设置为输出状态时,不能与其他电路的输出端接成"线或"或"线与"的形式。否则可能引起输出电流过载,烧坏PIC。

    如需要与其他电路接成"线或"电路时,PIC I/O端必须置于"0"状态或输入状态并外接上拉电阻。如需要接成"线与"电路时,则PIC I/O端必须置于"1"状态或输入状态,并外接下拉电阻。电阻的阻值根据实际电路和PIC I/O端最大电流来选定。

c、I/O口的连续操作

    一条写I/O的指令,对I/O真正写操作是发生在指令的后半周期(参照图1.11)。而读I/O的指令却是在指令的周期开始就读取I/O端状态。所以当你连续对一个I/O 端写入再读出时,必须要让I/O端上的写入电平有一个稳定的时间,否则读入的可能是前一个状态,而不是最新的状态值。一般推荐在两条连续的写,读I/O口指令间至少加一条NOP指令。

 例: MOVWF 6 ; 写I/O
    NOP ; 稳定I/O电平
    MOVF 6,W ; 读I/O
 

d、噪声环境下的I/O操作

   在噪声环境下(如静电火花),I/O控制寄存器可能因受干扰而变化。比如I/O口可能会从输入态自己变成输出态,对于这种情形,WDT也是无法检测出来的。因此如果你的应用环境是较恶劣的,建议你每隔一定的间隔,都重新定义一下I/O控制寄存器。

你可能感兴趣的:(c)