课堂截图
去ti.com网站上查找cc2530数据手册
- 网址:ti.com
- 查询cc2530数据手册的网址(参数):https://www.ti.com/sitesearch/en-us/docs/universalsearch.tsp?langPref=en-US&searchTerm=cc2530&nr=8383#q=cc2530&sort=relevancy&numberOfResults=25
- cc2530数据手册网址:https://www.ti.com/lit/ds/symlink/cc2530.pdf?ts=1711468939199&ref_url=https%253A%252F%252Fwww.ti.com%252Fcompare-products%252Fzh-tw%252F%253Fid%253D2043%2526type%253DGPT%2526mode%253Dalternate-gpn%2526partList%253DCC2530%252CCC2651R3%2526sticky%253Dtrue
端口方向寄存器介绍与基本配置
#include "ioCC2530.h"
#define D4 P1_1
void Delay(unsigned int t)
{
while(t--);
}
void Init_Port()
{
P1SEL &= ~0x02; //
P1DIR |= 0x02;
// IO口是输入还是输出?使用方向寄存器来配置。
// 端口方向寄存器:DIR -> P1端口寄存器就是P1DIR、P2端口寄存器就是P2DIR
// 0表示输入,1表示输出 , 对应的DIR有8位,P1和P2端口都有8个IO。
// 可以通过配置DIR的相对应得位数上的数据为0或为1即可配置输入还是输出模式。
// 0 0 0 0 0 0 0 0 ()
// ^ ^
// | |
// P1_7 P1_0
// 然后将8位二进制转换为16进制。(8421转换)
// 下面是实操例子:
// 这里要设置P1_3,P1_4两个IO:P1DIR = 0x18;
// 这里要设置P1_0,P1_2两个IO:P1DIR = 0x05;
// 这里设置P1_0,P1_1,P1_3,P1_4四个IO:P1DIR = 0x1b;
// (0001 1011)(1 b)
// (b = 8+2+1 = 11 = 9+2 = a+1 = b)
// 2进制转16进制
// 1011 0110 -》 0xb6
// 1101 1011 -》 0xdb
// 为什么P1DIR 要|=不是直接写=
// 使用 |= 操作可以确保除了我们想要改变的那一位之外,其他位的值保持不变。
// 它清楚地表明了我们的意图是修改一个特定的位,而不是整个寄存器。
// 例如:P1DIR |= 0x02;
// P1DIR 寄存器中的第二位(从0开始计数)设置为1,而不改变其他位的值。
// 如果使用 P1DIR = 0x02;,则会将 P1DIR 的所有位都设置为0,
// 然后再将第二位设置为1,这样就覆盖了原来寄存器中的其他位的值
}
void main(){
Init_Port();
while(1)
{
D4 = 1;
Delay(60000);
D4 = 0;
Delay(60000);
}
}
cc2530各端口常用寄存器
学习网址:
P1的LED点亮
4个LED灯点亮
#include "ioCC2530.h"
#define D4 P1_1
#define D3 P1_0
#define D6 P1_4
#define D5 P1_3
void Delay(unsigned int t)
{
while(t--);
}
void delay_inp(unsigned int t){
while(t--)Delay(65535);
}
void Init_Port()
{
P1SEL &= ~0xff; // PxSEL:端口功能选择,设置端口是通用I/O还是外设功能。0xff设置P1全部为通用IO口
P1DIR |= 0xff; // PxDIR:端口方向寄存器。 0xff设置全部端口输出。
}
void main(){
Init_Port();
while(1)
{
D4 = ~D4; // 取反
D3 = ~D3;
D6 = ~D6;
D5 = ~D5;
delay_inp(1);
// Delay(60000);
// asm("NOP"); // -> 添加到程序中直接死循环在这。(NOP为占位符)
}
}
IAR的注释快捷键
注释多行:Ctrl+K
取消注释多行:Ctrl+Shift+K
在C语言里嵌入汇编代码
NOP:NO Operation(无操作)
asm("NOP");
asm("NOP");
是一条汇编指令,表示无操作(No Operation)。在程序中插入这条指令通常是为了占位或者作为调试的辅助手段。详细解释:
asm
是一个关键字,用于指示编译器将紧随其后的字符串视为汇编代码。"NOP"
是一条汇编指令,表示不执行任何操作。它通常用于占位或作为调试的辅助手段。举例说明:
- 占位符:在某些情况下,程序员可能需要在代码中插入一个占位符,以便后续添加实际的指令。使用
asm("NOP");
可以作为占位符,确保代码结构的正确性,而不会执行任何实际操作。- 调试辅助:在调试过程中,程序员可能会使用
asm("NOP");
来标记特定的代码位置,以便观察程序的执行流程和状态。通过插入asm("NOP");
,可以在调试器中看到该位置的执行情况,而不会对程序逻辑产生影响。- 性能优化:在某些情况下,程序员可能希望在代码中插入一些空操作,以调整指令流水线或提高缓存利用率。使用
asm("NOP");
可以实现这种目的,因为它不会对寄存器或内存产生任何影响,但仍然占用一定的空间。需要注意的是,
asm("NOP");
是一种低级语言特性,通常在嵌入式系统、底层驱动程序或需要精确控制硬件行为的场合中使用。对于大多数应用程序开发,使用高级编程语言和库函数更为常见和方便。