为什么配置I/O口:
I/O端口寄存器复位后默认为输入(输出高阻态);为实现I/O端口功能需要先对端口进行I/O口初始化
配置I/O口需要的几种寄存器:
ANSELx(模拟选择寄存器):0 = 数字I/O口,1 = 模拟输入口
TRISx(数据方向控制寄存器):0=输出模式(Out),1=输入模式(In)
PORTx(读取器件引脚电平)
LATx(输出锁存器)
PORT与LAT寄存器区别:
rd port指令脉冲来的时候,管脚端平锁存到port中,也就是说要想获得正确的管脚状态,只有读取port寄存器,而如果去读lat寄存器,读到的输出锁存器的值,比如说你一开始设置管脚成输出,通过lat输出了一个0x55,然后你设置管脚成输出,这个时候管脚电平再外部电路的驱动下发生了变化编程了0x66,这个时候你读port才能读到0x66,而如果你去读lat则读到的是你上一次输出值,不是当前时刻管脚电平状态。这也就是lat和port的不同之所在。所以在做pic18的时候我们应该养成写则写lat,读则读port的好习惯
LAT是作为缓存使用的,PORT读的是I/O状态,所以,读I/O时用PORT,写I/O时用LAT。
总结一下:
1、I/O作为写输出时使用锁存器LAT;
2、I/O作为读输入时使用端口PORT;
***3.若定义IO口为输入,要得到IO端口的实际电平,则直接读取PORTx寄存器,若将IO口定义为输出,则通过写LATx来达到对IO口置高低电平操作。
4.当某个引脚配置成模拟IO时候,必须将其相应的TRISx配置成输入,这样才能读取到引脚上外部电压。