当前位置: 首页 > 工具软件 > CC > 使用案例 >

一、CC2530简介

朱通
2023-12-01

寄存器快速操作

其实可以直接赋值,相对好理解,但是熟练之后还是这个方法比较快。

一、只将寄存器中的某些位置1而不影响其它位

使用或操作 “|” 。

任何值与0相或,保持原值。

任何值与1相或,结果为1.

例如:寄存器TMP的当前值为0X62,要将第2、3、6位置1。C语言表达式:TMP|=0X4C

0X62:0110 0010

0X4C:0100 1100

TMP= 0110 1110

那么这个0X4C的值如何快速得到的?

先假设寄存器所有位的值都是0,如TMP=0000 0000。再将要操作的位置全部改为1,即0100 1100,也就快速得到了这个值 :0X4C。

二、将寄存器中某些位清0而不影响其它位

使用与操作“&+非

任何值与1相与,保持原值;

任何值与0相与,结果为0。

例如:寄存器TMP的当前值为0X62,要将2、3、6位清0,用C语言表达:TMP&=~0X4C

0X62:0110 0010

0X4C:0100 1100

~0X4C:1011 0011

程序设计中快速操作的方法:

操作步骤同上:先假设寄存器所有位的值都是0,如TMP=0000 0000。要操作的位置1。

得到0100 1100,即0X4C,再取反 1011 0011。如此达到想要的操作。

总结:实际开发时,先假设寄存器所有位都是0,确定想要操作的位之后,将其置1,得到一个数。

若想将这些位置1,则用操作编写赋值语句。若想将其清零,则用与+取反操作编写赋值语句。

可延伸至更多位。

CC2530的通用I/O及相关寄存器

通用I/O,也叫GPIO。

引脚

CC2530采用QFN40封装,有40个引脚。

有21个数字I/O端口,其中P0和P1是8位端口,P2仅有5位可以使用。

P2虽然有5个引脚,但是实际能用的只有P2_0。P2_1、P2_2在开发时接仿真器的通信引脚,P2_3、P2_4接外部晶振引脚。

所以实际开发可用I/O端口只有17个。所以通常要对I/O口进行功能复用。
通过对寄存器的配置选择引脚的的功能。可配置为通用I/O端口,或外部设备I/O口。
每个I/O端口都可以配置成外部中断源的输入引脚,而51单片机就只能固定在INT0和INT1两个引脚。
P1_0和P1_1具没有上拉/下拉能力,若一定要使用这两个引脚,则需要外接上拉电阻。P1_0和P1_1具备20mA高驱动输出,其余I/O引脚是4mA的驱动能力。

与I/O端口相关的寄存器

  • 在单片机内部,有一些特殊功能的存储单元,这些单元用来存放控制单片机内部器件的命令、数据或运行过程中的一些状态信息,这些寄存器统称为“特殊功能寄存器(SFR) ”。

  • 操作单片机的本质,就是对这些特殊功能寄存器进行读写操作,并且某些特殊功能寄存器可以位寻址。

  • 为了便于使用,每个特殊功能寄存器都会起一个名字,在程序设计时,引入头文件“ioCC2530.h”,才能直接使用里面寄存器的名称。

  • 与通用I/O端口相关的常用寄存器有下面4个:

    (P即port 。X是序号0,1或者2)

    1.PxSEL:端口功能选择(设置端口是通用I/O还是外设功能端口)。(SEL即select,选择)。

    位名称复位值操作描述
    7:0SELPx[7:0]0X00R/W设置Px_7到Px_0端口的功能 。
    0:对应端口被设为通用I/O功能。 1:对应端口被设置为外设功能

    应用举例:P0SEL|=0X45 //将P0_6、P0_2和P0_0设置成外设功能。

    P1SEL&=~0X13 //将P1_4 、P1_1和 P1_0设置成通用I/O功能。

    PxDIR:作为通用I/O时,(用来设置数据的传输方向,到底是用来作为输入还是输出)(DIR即direction,方向)

    位名称复位值操作描述
    7:0DIRPx[7:0]0X00R/W设置Px_7到Px_0端口的传输方向。
    0:输入。 1:输出。

    应用举例:P0DIR&=~0X14 //将P0_4和P0_2设置为输入方向

    P1DIR|=0X26 //将P1_5、P1_2和P1_1设置为输出方向

    PxINP:当I/O被用作通用输入端口时用来选择输入模式(上拉、下拉还是三态)

    P0INP输入配置寄存器

    位名称复位值操作描述
    7:0MDP0[7:0]0X00R/W设置P0_7到P0_0端口的输入模式。
    0:上拉/下拉(需要结合P2INP联合配置)。 1:三态。

    P1INP输入配置寄存器

    位名称复位值操作描述
    7:2MDP1[7:0]0X00R/W设置P1_7到P1_2端口的输入模式。
    0:上拉/下拉(需要结合P2INP联合配置)。 1:输出。
    1:0-----------00R0不使用

    P2INP输入配置寄存器 (用于设置到底是上拉还是下拉)

    位名称复位值操作描述
    7PDUP20R/W为P2端口所有引脚选择上拉还是下拉
    0:上拉 1:下拉
    6PDUP10R/W为P1端口所有引脚选择上拉还是下拉
    0:上拉 1:下拉
    5PDUP00R/W为P0端口所有引脚选择上拉还是下拉
    0:上拉 1:下拉
    4:0MDP2_[4:0]0X00R/W设置P2_4到P2_0端口的输入模式
    0:上拉/下拉 1:三态

    应用举例:将P0_1和P0_3端口设置为上拉模式

    P0INP&=~0X0A //先将P0_3和P0_1端口设置为上拉/下拉

    P2INP&=~0X20 //再将P0端口内所有引脚设置为上拉模式

    应用举例:将P0_1和P0_3端口设置为上拉模式

    P0INP&=~0X0A //先将P0_3和P0_1端口设置为上拉/下拉

    P2INP&=~0X20 //再将P0端口内所有引脚设置为上拉模式

    4.Px:数据端口,用来控制端口的输出或获取端口的输入。

 类似资料: