课堂截图

无线传感网-3-27笔记_#define

无线传感网-3-27笔记_占位符_02

无线传感网-3-27笔记_#define_03



去ti.com网站上查找cc2530数据手册

无线传感网-3-27笔记_#define_04

无线传感网-3-27笔记_寄存器_05



端口方向寄存器介绍与基本配置

#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各端口常用寄存器

学习网址:

无线传感网-3-27笔记_占位符_06

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" 是一条汇编指令,表示不执行任何操作。它通常用于占位或作为调试的辅助手段。

举例说明:

  1. 占位符:在某些情况下,程序员可能需要在代码中插入一个占位符,以便后续添加实际的指令。使用 asm("NOP"); 可以作为占位符,确保代码结构的正确性,而不会执行任何实际操作。
  2. 调试辅助:在调试过程中,程序员可能会使用 asm("NOP"); 来标记特定的代码位置,以便观察程序的执行流程和状态。通过插入 asm("NOP");,可以在调试器中看到该位置的执行情况,而不会对程序逻辑产生影响。
  3. 性能优化:在某些情况下,程序员可能希望在代码中插入一些空操作,以调整指令流水线或提高缓存利用率。使用 asm("NOP"); 可以实现这种目的,因为它不会对寄存器或内存产生任何影响,但仍然占用一定的空间。

需要注意的是,asm("NOP"); 是一种低级语言特性,通常在嵌入式系统、底层驱动程序或需要精确控制硬件行为的场合中使用。对于大多数应用程序开发,使用高级编程语言和库函数更为常见和方便。

无线传感网-3-27笔记_#define_07