CC2530实现流水灯

#include <ioCC2530.h>//引用CC2530头文件
#define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4//为了方便使用,可以在这里将端口进行宏定义
void Init_Port()
{
  P1SEL &= ~0X1B;//设置端口为普通IO
  P1DIR |= 0X1B;//将端口方向设置为输出
  P1 &= ~0X1B;//将端口置为低电平
}
void delay(int time)
{
  int i,j;
  for(i=0;i<time;i++)
    for(j=0;j<300;j++)
    {
      asm("NOP");
      asm("NOP");
      asm("NOP");
    }
}
void main()
{
  Init_Port();//引用端口初始化函数
  while(1)
  {
    D5 = 0;
    D4 = 1; 
    delay(500);
    D4 = 0;
    D3 = 1;
    delay(500);
    D3 = 0;
    D6 = 1;
    delay(500);
    D6 = 0;
    D5 = 1;
    delay(500);
  }
}

介绍一下代码中的asm("NOP");

asm(“nop”)是内嵌汇编做空指令延时用的,其中asm()的作用是指函数内部的参数翻译为汇编指令,其作用是在C语言环境下直接使用汇编指令执行。nop是一个空等待汇编指令,这个指令执行时,单片机是什么也不做,仅仅起一个时间延时作用
CC2530属于8051系列单片机,asm(“nop”)执行的是一条空指令(单周期指令),占用时间是一个机器周期,晶振为32Mhz
于是,机器周期=12*1/32=0.375us。即一句asm(“nop”)延时了0.375us。

CC2530单片机在没有进行时钟设置时,初始时钟是16M,也就是 机器周期=12*1/16=0.75us即在16M状态下一句asm(“nop”)延时了0.7us

代码中delay(500),相当于500*300*机器周期(12*1/16=0.75us)= 105000us

也就是大概100ms,0.1s。

想要了解机器周期,指令周期,总线周期,时钟周期可以点击该链接机器周期_百度百科

猜你喜欢

转载自blog.csdn.net/Eliauk1234/article/details/121100338
今日推荐