标题:
Zigbee:cc2530实现led闪烁程序
[打印本页]
作者:
1091822851
时间:
2024-4-26 11:39
标题:
Zigbee:cc2530实现led闪烁程序
(编写帖子额的时候不太熟练,倒置部分结构乱了
) 一:解决问题思路
所有单片机,想要达到led闪烁,都需要延迟函数.延迟分为硬件延迟和软件延迟两种.硬件延迟涉及到定时器的概念,是后面要讲的内容,这里采用软件延迟的方法.
1 软件延迟(两种实现方式)
1.1 用指令实现延时
CC2530的每个指令是一个时钟,而标准的8051的指令周期是12个时钟。
若选用32MHZ的时钟频率,那么时钟周期是1/32 us,一个指令也就是1/32us. 而CC2530系统上电默认是16MHZ的内部RC振荡器
ZStack中大多使用的延时函数如下:
void Delay_us(uint16 value){
while (value--)
{
asm(“NOP”); //一个指令周期占用一个时钟周期
asm(“NOP”);
asm(“NOP”);
}
}
void Delay_ms(uint16 value)
{
while(1)
Delay_us(1000);
}
复制代码
1.2 for循环实现延时 (仅做参考,主要用于讲解
void delay_us(int n)
{
while(n--)
{
unsigned char a,b;
for(a=173;a>0;a--)
for(b=143;b>0;b--) ;
}
}
复制代码
2. 配置寄存器
2.1配置寄存器顺序
1.PxSEL //端口功能选择 0为通用I/0 1为外设
2.PxDIR //端口方向选择 0为输入 1为输出 LED不需要配置 PxINP寄存器
2.2 PXSEL 和PXDIR详细配置参数 (这里没办法粘贴图片,就直接给连接可以自行跳转
2-2 CC2530的通用IO及相关寄存器 - 夏日清凉~ - 博客园 (cnblogs.com)
3.demo
我的CC2530 led1和led2 是P1_0和P1_1; 而且是低电平点亮 这个根据实际情况近些年编写</div><div><div class="blockcode">
#include <ioCC2530.h>
#define led1(x) P1_0=~x
#define led2(x) P1_1=~x
void Delay_us(uint16 value){
while (value--)
{
asm(“NOP”); //一个指令周期占用一个时钟周期
asm(“NOP”);
asm(“NOP”);
}
}
void Delay_ms(uint16 value)
{
while(1)
Delay_us(1000);
}
void main()
{
P1SEL &=~0x07;
P1DIR |= 0x03;
while(1)
{
led2(1);
led1(0);
Delay_ms(1000);
led1(1);
led2(0);
Delay_ms(1000);
}
}
复制代码
文章参考:
CC2530单片机精确延时的时间分析-CSDN博客
十二、CC2530系统时钟设置_通过配置时钟频率控制寄存器和时间频率状态寄存器实现cc2530使用外部32mhz晶-CSDN博客
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1