第八节:PIC系列单片机I/O口结构
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所示:
注:本图显示了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互补推挽输出电路 。因此与其他这类电路一样,当某个PICI/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控制寄存器 。
【第八节:PIC系列单片机I/O口结构】
推荐阅读
- 小卫浴间面积翻倍 你只需4步_图
- 拆解世界上第一颗FPGA芯片!
- 正式进军机器人赛道!阿里巴巴发布第一款机器人“小蛮驴”
- PIC12C508单片机控制灯光源程序
- pic单片机控制HT1621 LCD程序
- 联发科二季度手机芯片销量紧追高通:华为海思反超三星,跃居第三
- 大佬讲解机械制图基础知识_44,机械制图基础知识之配合+第三角投影
- PIC单片机音乐播放程序
- PIC单片机系列介绍
- 5G数字新时代,CloudLi第五代云锂应运而生