大家好,我是皮皮猫吖!
每文一言:如果你觉得现在走的路比较辛苦,那就证明你在走上坡路!
本篇文章:
主要是Zigbee控制GPIO端口为输入模式或输出模式。
正文如下:
一、Zigbee无线模块基本工作电路
CC2530总共有21个引脚,分为三组:
P0组 | 8个引脚 |
---|---|
P1组 | 8个引脚 |
P2组 | 5个引脚 |
二、学会控制CC2530开发板上所有端口为输入或输出模式
1)如何配置该端口为普通输出端口?
① 管理Zigbee所有IO口处于普通IO还是片上外设:由P0SEL、P1SEL、P2SEL三个寄存器决定的
- P0SEL和P1SEL都是控制的8个引脚,这16个引脚即可以作为普通io口,也可以作为片上外设
- P2SEL只能控制P2_0, P2_3, P2_4这三个引脚,因为P2_1, P2_2一般是作为下载程序的,不作为普通IO口
注意: 上述里面当PXSEL对应的某位上是0的时候,表示该引脚为普通io模式,如果当前位为1的时候,表示该引脚为片上外设模式
寄存器 | P0SEL | P1SEL | P2SEL |
---|---|---|---|
普通I/O | 0 | 0 | 0 |
片上外设 | 1 | 1 | 1 |
② 管理所有IO口(不包括P2_1, P2_2)是处于输入状态还是输出状态的:由P0DIR、P1DIR、P2DIR三个寄存器控制
- 当P0DIR、P1DIR、P2DIR寄存器的某一位为“0”时,表示该端口为输入状态
- 当P0DIR、P1DIR、P2DIR寄存中的某一位为“1”时,表示该端口为输出状态
寄存器 | P0DIR | P1DIR | P2DIR |
---|---|---|---|
输入 | 0 | 0 | 0 |
输出 | 1 | 1 | 1 |
2)如何配置该端口为普通输入端口?
① 输入怎么配置【设置P0_6为普通io输入模式】:
- 让P0_6处于普通IO口(非片上外设模式),设置P0SEL的第6位为0
- 让P0_6处于输入状态(非输出状态),设置P0DIR的第6位为0
- 还需要让P0_6处于上拉、下拉或者三态中的一种状态
② 管理该端口为输入模式中的上拉、下拉、三态的寄存器是:P0INP、P1INP、P2INP三个寄存器
寄存器 | P0INP | P1INP | P2INP(0-4引脚) | P2INP(5引脚) | P2INP(6引脚) | P2INP(7引脚) |
---|---|---|---|---|---|---|
上下拉 | 0 | 0 | 0 | |||
三态 | 1 | 1 | 1 | |||
0(P0INP的"0"表示上拉) | 0(P1INP的"0"表示上拉) | 0(P2INP的"0"表示为上拉) | ||||
1(P0INP的"0"表示下拉) | 1(P1INP的"0"表示下拉) | 1(P2INP的"0"表示下拉) |
三、练习:读取针帽是否盖上,led灯亮灭
#include <iocc2530.h>
void main(){
/*
//注意:刚通上电的时候,P0SEL、P1SEL、P2SEL等所有寄存器各位都是 0,
//默认io口都是上拉电阻,普通io口
//设置P1_0为普通io口,非片上外设口:设置P1SEL的第一位为0
//设置某一位为0:采用与运算(一个为0,即为0)
P1SEL &= 0xfe;//1111 1110
//设置某一位为1:采用或运算(一个为1,即为1)
//设置P1_0为输出口
P1DIR |= 0x01;//0000 0001
P1_0 = 0;
while(1);
*/
//设置P0_4为普通io输出模式
P0SEL &=0xef; //1110 1111 第四个引脚为普通io口
P0DIR |=0x10; //0001 0000 第四个引脚为输出口
//测试P0_6输入状态
P0SEL &= 0xbf; //1011 1111 第六位普通io
P0DIR &= 0xbf; //1011 1111 第六位输入
P0INP &= 0xbf; //1011 1111 第六位,上拉、下拉模式
P2INP &= 0xdf; //1101 1111 让P0_6处于上电阻拉模式
while(1){
if(P0_6==1){//检测到高电平
P0_4 = 0;
}else{//检测到低电平
P0_4 = 1;
}
}
}
希望本篇文章对大家有所帮助,后续会继续分享Zigbee相关学习知识…
如果文章内容有错误的地方,请在留言处留下你的见解,方便大家共同学习。谢谢!
如有侵权或其他任何问题请联系:QQ1370922071,本文主要用于学习交流,转载请声明!
作者:皮皮猫吖