大约在一年前,我发表了一个帖子,里面提到了关于PxSELC寄存器的问题:
https://bbs.eeworld.com.cn/thread-313298-1-1.html
目前官方所提供的user's guide中确实还未纠正此错误,对于PxSELC寄存器未起到任何作用的原因就是手册中所描述的寄存器偏移地址不正确,导致开发工具中头文件对此寄存器的地址也不符,PxSELC的正确偏移地址应该为0x16和0x17。可能此片子还未大量应用,所以此问题未被广泛发现。
同时我也对上述帖子中的错误理解予以纠正,并对此寄存器的用法加以简单说明。
PxSELC寄存器的主要用途是同时取反PxSEL0和PxSEL1,而不是我上面帖子中所说的置位。
在选择IO引脚功能时,如果需要同时更改PxSEL0和PxSEL1,则可以通过设置PxSELC实现一步到位的效果,如果只需更改PxSEL0或者PxSEL1中的一个,那就没有必要使用PxSELC寄存器了。
如:
假设当前P1SEL0=0x00,P1SEL1=0x00;现在要配置成P1SEL0=0x01,P1SEL1=0x01;则通过一个语句P1SELC=0x01;即可实现。
假设当前P1SEL0=0x01,P1SEL1=0x00;现在要配置成P1SEL0=0x00,P1SEL1=0x01;则P1SELC=0x01;即可实现。
假设当前P1SEL0=0x00,P1SEL1=0x00;现在要配置成P1SEL0=0x00,P1SEL1=0x01;则老老实实的改变P1SEL1|=0x01;
再举一个例子,如果当前P2SEL0=0x85,P2SEL1=0x33;则执行P2SELC=0xFF语句后变为:
P2SEL0=0x7A,P2SEL1=0xCC;
PxSELC类似于一个只写寄存器,读出的内容为0,相当于写后自动清0.
此贴为本人愚见,欢迎各位网友一起讨论交流。