标签:描述 c语言 div 应该 配置 ini 封装 方法 引脚
一、前言
其实我把zigbee后面的组网那些都看完了,现在开始写也是当复习吧。
二、原理分析
①:看过好多博客,刚开始都是直接讲配置寄存器,但我觉得需要且有必要了解一下cc2530这款单片机。zigbee就在人家上面搭载嘛
CC2530微控制器采用QFN40封装,有40 个引脚。其中,有21个数字I/O端口,其中P0和P1是8 位端口,P2仅有5位可以使用。这21个端口均可以通过编程进行配置。
实际上,在P2端口的5个引脚中,有2个需要用作仿真,有2个需要用作晶振,你在CC2530的开发中真正能够使用的只有17个引脚。
②通过特殊功能寄存器来设置cc230引脚
通过配置这些寄存器,就可控制I\0口。
③ 多将一句:#include "ioCC2530.h" 引入头文件 就可以直接使用寄存器的名称访问内存地址了。
这里加一个小插曲: 对寄存器的某些位清0 而不影响 其他位。该怎么做。(这里原博客作者为小蜜蜂老师)
例如:寄存器P1TM的当前值是0x6c,现需要将该寄存器的第1位、第3 位和第5位设置为0,同时不能影响该寄存器其他位的值,那么,在C语言中应该怎么编写代码呢?
使用“&=”将寄存器指定位清0,同时不影响其他位的值。
正确写法:P1TM &= ~0x2A;
因为:逻辑“与”操作的特点是,该位有0结果就为0,若为1则保存原来值不变。
首先将字节 0000 0000 中要操作的位设置为1,即0010 1010,在将该数值取反,即1101 0101,也就是~0x2A。再将该值与寄存器P1TM“相与”,那么有0的位,即1、3、5位将被清0,其余的位会保持原来的值不变。
所以:P1TM的当前值为0x6c,即0110 1100,
0110 1100 && 1101 0101 = 0100 0100,即1、3、5位清0,其他位不变。
<注意>:该方法只能操作多位同时清0,或者某一位清0的情况,如果要将寄存器的位既要清0又要置1,则不能采用这种写法。(其中原因自己思考一下)
在不少嵌入式应用的源码程序中,对于寄存器的第n位的清0操作也可以写成:寄存器&= ~(0x01<<(n));其道理是一样的。
<2> 对寄存器的某些位置1而不影响其他位。
例如:寄存器P1TM的当前值是0x6c,现需要将该寄存器的第1位、第4位和第5位设置为1,同时不能影响该寄存器其他位的值,那么,在C语言中应该怎么编写代码呢?
使用“|=”将寄存器指定位置1,同时不影响其他位的值。
正确写法:P1TM |= 0x32;
因为:逻辑“或”操作的特点是,该位有1结果就为1,若为0则保存原来值不变。
首先将字节 0000 0000 中要操作的位设置为1,即0011 0010,也就是0x32。 再将该值与寄存器P1TM“相或”,那个有1的位,即1、4、5位将被设置为1,其余的位会保持原来的值不变。
所以:P1TM的当前值为0x6c,即0110 1100,
0110 1100 || 0011 0010 = 0111 1110,即1、4、5位置1,其他位不变。
同样要注意:该方法只能操作多位同时置1,或者某一位置1的情况。
对于寄存器的第n位的清0操作也可以写成:寄存器 |= (0x01<<(n));
最后是编写代码:
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char #define LED1 P1_0 //定义P1_0口为LED1控制端 #define LED2 P1_1 //定义P1_1口为LED2控制端 #define LED3 P1_4 //定义P1_4口为LED3控制端 /* 函 数 名 : IO_Init 功能描述 : LED_IO初始化函数 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE */ void IO_Init(void) { P1DIR |= 0xff; //P1端口定义为输出 LED1 = 0; //点亮LED1 LED2 = 0; //点亮LED2 LED3 = 0; //点亮LED3
} /* 函 数 名 : Delayms 功能描述 : 毫秒延时 输入参数 : xms:延时时间,如 i=xms 即延时i毫秒 输出参数 : none 返 回 值 : none */ void Delayms(uint xms)
{ uint i,j; for(i=xms;i>0;i--) for(j=587;j>0;j--);
} /* 函 数 名 : main 功能描述 : LED测试(通用IO的输出使用) 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE */ void main ( void ) {
IO_Init (); //调用初始化程序 Delayms ( 2000 ); //延时2s while ( 1 )
{ LED1 = ~ LED1; LED2 = ~ LED2; LED3 = ~ LED3; Delayms ( 500 ); //延时0.5s
}
}
最后总结:
编写这个函数,主要就是配置I\O口相关的寄存器。通过延时函数实现我们等国闪烁效果。
标签:描述 c语言 div 应该 配置 ini 封装 方法 引脚
原文地址:https://www.cnblogs.com/mengnan-konghai/p/13192185.html