控制/MCU
当“TRIS f”送入“1”时,Q1、Q2都截止,I/O脚成高阻状态,此时为输入态。当执行指令如MOVF 6,W,把当前I/O口的状态读入数据总线。当“TRIS f”送出“0”时,Q1、Q2的导通情况取决于数据锁存器Q(非)的状态。当写入数据为“1”时,Q(非)输出“0”,Q1导通,Q2,截止,I/O口输出高电平。当数据为“0”时,Q(非)输出“1”,Q2导通,Q1截止,I/O口输出低电平。无论I/O脚置成输入或输出,执行指令(如MOVF 6,W)都是将I/O端口的状态读入数据总线。 一些指令先读后写,如BCF、BSF指令整个端口状态读入CPU,执行位操作后再将结果写回去覆盖原来的内容,即输出结果放在I/O口的数据锁存器上,这点程序员需加以注意。特别当一个端口中一条或几条引脚一会儿作输入,一会儿又作输出而又执行BCF、BSF指令时。举例说明:BSF 6,5指令的目的是要把B口的第5位置为高电平“1”,执行这条指令时,先把整个B口当前的状态读入CPU,把第5位置成“1”后再把结果(8个位)重新输出到B口的数据锁存锁存器。如果B口的某位用作双向I/O口,且它在这时被定义为输入态,则在这条I/O脚上出现的输入信号被再写入这个I/O脚数据锁存器,从而覆盖原来的内容。如果这个I/O脚保留为输入方式,不会出现问题。但如果稍后这个I/O脚改为输出态,则数据锁存器bit1端内容可能和先前的不同了。 I/O输出电路为CMOS互补推挽电路,有很强的带负载能力,高电平输出时具有20mA的拉电流,低电平输出时允许25mA的灌电流。这种特性可直接用于驱动LED显示器,为了改变某各引脚上的电平,这个引脚有效地输出“0”或“1”时,不应该同时又受到外部设备的驱动,因为由此引起的高输出电流可能损坏芯片。 I/O操作指令周期的最后写I/O口,如果为读,数据须在指令周期开始前准备好。对于同一个口执行先写后读,必须小心。指令序列应满足要求:在下一条读I/O数据的指令执行之前,应使引脚的电平稳定,否则引脚的先前状态会被读入CPU,而不是新状态。建议最好用NOP指令或其他非I/O操作指令把读写指令隔开。 在电磁干扰环境恶劣的情况下,如键盘处于静电放电ESD(Electronic Static Discharge)的环境中,由于电磁噪声干扰,寄存器的内容将受影响。若I/O控制寄存器的内容发生改变,即使一只引脚从输入变成输出状态,程序依然继续运行。此时程序从这一引脚读取数据,结果可能是错误的。面对这种情况,我们建议在一定时间间隔内需重新定义I/O口的输入和输出状态。如果程序安排上允许,最好是每次读写数据时设置I/O控制寄存器,虽然对于大多数时候不需要这样做,只是提醒程序员注意电磁噪声干扰问题。 |
全部0条评论
快来发表一下你的评论吧 !