|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
寄存器快速操作
其实可以直接赋值,相对好理解,但是熟练之后还是这个方法比较快。
一、只将寄存器中的某些位置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:0 SELPx[7:0] 0X00 R/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:0 DIRPx[7:0] 0X00 R/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:0 MDP0[7:0] 0X00 R/W 设置P0_7到P0_0端口的输入模式。
0:上拉/下拉(需要结合P2INP联合配置)。 1:三态。
P1INP输入配置寄存器
位 位名称 复位值 操作 描述
7:2 MDP1[7:0] 0X00 R/W 设置P1_7到P1_2端口的输入模式。
0:上拉/下拉(需要结合P2INP联合配置)。 1:输出。
1:0 ----------- 00 R0 不使用
P2INP输入配置寄存器 (用于设置到底是上拉还是下拉)
位 位名称 复位值 操作 描述
7 PDUP2 0 R/W 为P2端口所有引脚选择上拉还是下拉
0:上拉 1:下拉
6 PDUP1 0 R/W 为P1端口所有引脚选择上拉还是下拉
0:上拉 1:下拉
5 PDUP0 0 R/W 为P0端口所有引脚选择上拉还是下拉
0:上拉 1:下拉
4:0 MDP2_[4:0] 0X00 R/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:数据端口,用来控制端口的输出或获取端口的输入。
|
|