您现在的位置: 主页 > 嵌入式开发入门到精通 > 单片机技术进阶 > PIC16与PIC18的I/O--lat寄存器的解释 -
本文所属标签:
为本文创立个标签吧:

PIC16与PIC18的I/O--lat寄存器的解释 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-08 

[导读]用pic16的时候设计端口操作时,一般也就涉及一个trisx和portx寄存器,trisx用来设置端口方向,portx用来写数据和读取数据,开始玩pic18的时候发现端口操作的时候多了一个latx寄存器,而它偏偏又和portx这么像,刚开始

用pic16的时候设计端口操作时,一般也就涉及一个trisx和portx寄存器,trisx用来设置端口方向,portx用来写数据和读取数据,开始玩pic18的时候发现端口操作的时候多了一个latx寄存器,而它偏偏又和portx这么像,刚开始的时候确实蒙了。后来看看数据手册里面的io结构框图,慢慢才明白了lat寄存器的作用。下面先上图:16和18的io结构框图,取自数据手册

pic18:

pic16:


从上图可以看出,在16系列里面,通过一个trisx设置为输出的时候,portx的值在每次一次来wr portx指令脉冲的时候输出到io管脚。如果trisx设置为输入则上端的或门和与门关闭,管脚状态通过输入缓冲器加到下方的D触发器,每次来一个rd portx指令脉冲,管教状态锁存到portx寄存器中,所以不关输入输出,只要trisx和portx就可以搞定了,输入的时候读管脚电平就读portx。

但是在pic18中,我们发现多了一个数据锁存寄存器,就是latx,输出数据的时候,trisx设置为输出,每来一个wr lat或者wr port指令脉冲,数据总线上的数据输出到io管脚,这个时候可以看到lat和port用法是很相似的。但是,重点在读管脚数据的时候。只有读取port读到的才是真正的管脚电平,由图可以看出,rd port指令脉冲来的时候,管脚端平锁存到port中,也就是说要想获得正确的管脚状态,只有读取port寄存器,而如果去读lat寄存器,读到的输出锁存器的值,比如说你一开始设置管脚成输出,通过lat输出了一个0x55,然后你设置管脚成输出,这个时候管脚电平再外部电路的驱动下发生了变化编程了0x66,这个时候你读port才能读到0x66,而如果你去读lat则读到的是你上一次输出值,不是当前时刻管脚电平状态。这也就是lat和port的不同之所在。所以在做pic18的时候我们应该养成写则写lat,读则读port的好习惯,当然,至于microchip在pic18为什么要多设置一个这个lat肯定是有他的用意的,至于这个为什么,我暂时也还没有想通,百度一下说是什么读-修改-写操作相关之类的,讲的不是很清楚,等以后摸索明白了在写到blog里面。

本文引用地址: http://www.21ic.com/app/mcu/201807/786460.htm



              查看评论 回复



嵌入式交流网主页 > 嵌入式开发入门到精通 > 单片机技术进阶 > PIC16与PIC18的I/O--lat寄存器的解释 -
 

"PIC16与PIC18的I/O--lat寄存器的解释 -"的相关文章

网站地图

围观()