Zigbee
文章目录
- CC2530-I/O相关寄存器
- 寄存器PxSEL
- 寄存器PxDIR
- 寄存器PxINP(本文并不使用,默认值就可以)
- LED闪烁实验
- 蜂鸣器实验
CC2530-I/O相关寄存器
这里只是简单介绍本次实验用到的I/O寄存器。
寄存器PxSEL
PxSEL 介绍:控制I/O口引脚为通用引脚或外设。
PxSEL中x为端口的标号0~2,用来设置端口的每个引脚为通用I/O或者是外部设备I/O。默认时,当复位之后所有的数字都输入输出引脚都设置为通用输入引脚。
P0SEL寄存器
位 | 名称 | 复位 | R/W | 描述 |
---|---|---|---|---|
7:0 | SELP0_[7:0] | 0X00 | R/W | P0_7到P0_0功能选择;0:通用I/O;1:外设功能 |
寄存器PxDIR
PxDIR介绍:用来设置每个端口引脚为输入或输出。
知道设置PxDIR中指定位为1,其对应的引脚就会被设置为输出了。
P0DIR寄存器
位 | 名称 | 复位 | R/W | 描述 |
---|---|---|---|---|
7:0 | DIRP0-[7:0] | 0X00 | R/W | P0_7到P0_0的I/O方向;0:输入;1:输出 |
寄存器PxINP(本文并不使用,默认值就可以)
PxINP介绍:用来在通用I/O端口用作输入时将其设置为上拉、下拉和三态操作模式。
复位后,所对应的端口均设置为带上拉的输入。要取消输入的上拉或下拉功能,就要将PxINP中的对应位设置为1。I/O端口引脚P1_0和P1_1即使外设功能是输入,也没由上拉/下拉功能。
注意:
(1)配置位外设I/O信号的引脚没有上拉/下拉功能。
(2)在电源模式PM1、PM2和PM3下I/O引脚保留当进入PM1\PM2\PM3时设置为I/O模式和输出值。
位 | 名称 | 复位 | R/W | 描述 |
---|---|---|---|---|
7:0 | MDP0-[7:0] | 0X00 | R/W | P0_7到P0_0的I/O功能选择;0:上拉/下拉;1:三态 |
LED闪烁实验
原理图:
实验要求:
LED灯自动闪烁实验。
实验分析:
通过原理图可以看到,两个LED灯是共阳极,分别连接CC2530的P0.0和P2.0引脚上的。这里只需要让P0.0、P2.0输出低电平,就会使LED电路导通。
代码流程:
1、设置I/O的是通用I/O还是外设。
通过PxSEL寄存器设置P0.0、P2.0为通用IO口
通过PxDIR寄存器设置P0.0、P2.0为输出模式
这里不需要设置PxINP寄存器,因为此寄存器默认为上拉/下拉模式
2、控制LED灯的亮灭
设置完P0.0、P2.0后,只需给P0.0、P2.0引脚输入低电平即可点亮LED
LED闪烁代码:
#include<iocc2530.h>
/*
@名称:delay()
@参数:无
@介绍:延时函数
*/
void delay(){
int i,j;
for(i=0;i<1200;i++)
for(j=0;j<500;j++)
}
int main(){
/*设置为通用IO口*/
P0SEL &= 0XFE;
P2SEL &= 0XFE;
/*设置P0.0、P2.0位为输出模式*/
P0DIR |= 0X01;
P2DIR |= 0X01;
P0.0 = 1;
P2.0 = 1;while(1){
P0.0=~P0.0;
P2.0=~P2.0;
delay();
}
}
蜂鸣器实验
原理图:
实验要求:
根据原理图,实现每隔一段时间LED灯闪烁,蜂鸣器鸣叫。
要求分析:
从原理图中看到,蜂鸣器连接在三极管上,三极管的基极连接在CC2530的P0.5引脚上。这就说明我们只需给P0.5引脚为高电平就可以使蜂鸣器发声。
LED灯的控制上一个实验已经说明过了。
代码实现:
#include<iocc2530.h>
/*
@名称:delay()
@参数:无
@介绍:延时函数
*/
void delay(){
int i,j;
for(i=0;i<1200;i++)
for(j=0;j<500;j++)
}
int main(){
/*设置为通用IO口*/
P0SEL &= 0XDE; //这里我们让P0.0和P0.5同时设置
P2SEL &= 0XFE;
/*设置P0.0、P2.0位为输出模式*/
P0DIR |= 0X21; //这里我们让P0.0和P0.5同时设置
P2DIR |= 0X01;
/*默认状态下灯是熄灭的,蜂鸣器不发声*/
P0.0 = 1;
P2.0 = 1;
P0.5 = 0;while(1){
P0.5=~P0.5;
P0.0=~P0.0;
P2.0=~P2.0;
delay();
}
}
如编译错误,或其它报错,请留言我将尽快改正。goodbye!
END!