ZigBee1 硬件相关,IO操作
练习: ZigBee1-1 练习 IO控制Led亮灭
控制所有口子的输入输出
一共有21个通用IO口,其中这21个分为3组P0\P1\P2;
这些口子都可以作为普通或对应的片上外设控制。
IO口控制相关寄存器
PxSEL、PxDIR、PxINP Px(x分别对应0、1、2,用来控制对应的IO口组)3种寄存器,复位,默认都是0。
PxSEL寄存器
PxSEL寄存器作用: 有8位,每一位对应具体的IO组中的相应的一个IO,决定它是普通IO口还是片上外设,0表示普通IO口,1表示片上外设。
P2SEL寄存器 同样也是0表示普通IO、1表示片上外设 注意:其中P2组只有5个IO口,但是P2_1 P2_2是用于下载程序用的,所以,这两个IO不需要配置,因此P2SEL的低3位分别对应P2_0 P2_3 、P2_4.
PxDIR寄存器
PxDIR寄存器作用: 有8位,每一位对应具体的IO组中的相应的一个IO,决定它是输入还是输出,0表示输入,1表示输出。
其中P2组只有5个IO口,低五位也对应
P2_0 … P2_4 后面的位不用管。
PxINP寄存器
PxINP寄存器作用: 在输入的时候,8位,每一位对应具体的IO组中的相应的一个IO,决定它是上下拉模式还是三态,0表示上下拉模式,1表示三态。
P2INP寄存器 功能也是一样。特别注意:其中后面的3位决定在配置为上下拉模式的时候,组为上拉,还是下拉,0表示上拉,1表示下拉
输出怎么配置:
eg: 需要让P1_0处于普通IO口模式,非是偏上外设的模式
P1SEL 的第0位 为0
管理所有IO处于普通IO还是偏上外设,由P0SEL P1SEL P2SEL 决定
eg:让P1_0处于输出状态,非输入状态
找到P1DIR 第0位 让它等于1
让所有IO口处于输入状态还是输出状态由P0DIR P1DIR P2DIR 决定
P1_0=1;
输入怎么配置:
eg: 让P0_6处于普通IO口,非偏上外设模式
P0SEL 的第6位为0
eg:让P0_6处于输入状态,非输出状态
P0DIR 的第6位为0
eg:让P0_6处于上拉、下拉或者三态中的一种状态
if(1==P0_6)
{//检测到的是高电平
}
else
{//检测到的P0_6外部是低电平
}
例(附解析)
P1SEL第0位清零
不改变其他位上的数字将某一位清0用 与运算**&=**
不改变其他位上的数字将某一位置1用 或运算**|=**
一般情况下P1SEL&=0xFE;可以不写
PxSEL和PxDIR在默认情况下就是0,默认为普通IO口,输入状态
#include<iocc2530.h>
void main()
{
/* P1SEL &=0xFE;// 1111 1110 让P1_0处于普通IO,非偏上外设模式
P1DIR |=0x01;//0000 0001 让P1_0处于输出状态非输入状态
P1_0=0;//LED1灯亮
*/
//以P0.4为例
P0SEL &=0xEF;// 1110 1111
P0DIR |=0x10;//0001 0000
//P0.6
P0SEL &=0xBF;// 1011 1111
P0DIR &=0xBF;
P0INP &=0xBF;//让P0_6处于上下拉模式;
P2INP &=0xDF;//1101 1111 让P0组处于上拉模式
while(1)
{
if(1==P0_6)
{//检测到的是高电平
P0_4=0;
}
else
{//检测到的P0_6外部是低电平
P0_4=1;
}
}
}