【胜达ZigBee深入浅出】zigbee从入门到砸开发板之CC2530(一)

zigbee从入门到砸开发板之CC2530(一)

1. 初识zigbee

最小系统

VCC+VDD(CC2530背面)+去耦电容+偏置电阻

一般系统

最小系统+时钟电路+复位电路+精准时钟源+天线电路

仿真器条件

VCC+VDD+RESET+P2_1+P2_2

hello world

//点亮一个LED
#include <ioCC2530.h>
void main()
{
  P1DIR = P1DIR|0x01;//设置输出模式
  P1_0 = 0;
  while(1);
  
}

2. IO口

一共有21个通用IO口,其中这21个分为3组P0\P1\P2(P0.0-P0.7 P1.0-P1.7 P2.0-P2.4)

两种工作状态:通用IO、片上外设控制

IO管理寄存器:

一组、共三个字节(默认为0)

0表示通用IO口,1表示片上外设,默认为0
P0SEL
P1SEL
P2SEL

注意:(P2.1 P2.2 用于程序写入,不作考虑)

P2SEL76543210
对应IO-----P2_4P2_3P2_0

通用IO口的输出模式控制寄存器:

(默认为0)

0表示输入,1表示输出
P0DIR
P1DIR
P2DIR

注意:

P2DIR76543210
对应IO---P2_4P2_3P2_2P2_1P2_0

通用IO口的输入模式控制寄存器:

(默认为0)

0表示上下拉,1表示高阻态
P0INP
P1INP
P2INP

对于P2INP高三位:控制P012的上下拉:0上拉 1下拉

注意:

P2INP76543210
对应IOP2组P1组P0组P2_4P2_3P2_2P2_1P2_0

随心所欲控制IO的输入输出

  1. PxSEL配置IO功能(0:通用IO;1:外设IO),选择通用IO
  2. PxDIR配置IO方向(0:输入;1:输出)
    • 输出
      1. Px_y = 0 、Px_y = 1
    • 输入
      1. PxINP配置输入方式(0:上下拉、1:高阻态、P2INP高三位:0-上拉 1-下拉)
      2. if(Px_y == ?)

3. 通用IO中断(外部中断)

概述

通用IO中断寄存器:

  • 中断使能寄存器
    • IENx
    • PxIEN
  • 中断状态标志寄存器
    • PxIFG
  • 中断控制寄存器
    • PxCTL

中断使能寄存器

IEN07-------
作用EA-------
  • EA = 1 :CPU开总中断
IEN176543210
作用--P0IE-----
  • P0IE = 1 :P0 全部使能
IEN276543210
作用---P1IE--P2IE-
  • P1IE = 1 :P1 全部使能
  • P2IE = 1 :P2 全部使能
PxIEN(x=0/1)76543210
作用(对应控制每一个IO引脚)76543210
P2IEN76543210
作用---43210

中断状态标志寄存器

PxIFG(x=0/1)76543210
作用(对应标志每一个IO引脚)76543210
P2IFG76543210
作用---43210

也可以用这种方式清空标志位(P0IF 、P1IF 共8位 P2IF共5位)

P0-P0IF

P1-P1IF

P2-P2IF

中断控制寄存器

PICTL76543210
作用----P2ICONP1ICONHP1ICONLP0ICON

0:上升沿引起中断

1:下降沿引起中断

P2ICON:P2_0~P2_4

P1ICONH:P1高四位

P1ICONL: P1低四位

P0ICON: P0

随心所欲控制IO中断

  1. 配置IO状态

    通用IO+输入+上拉

  2. 开总中断

    EA=1

  3. 开组中断

    IENx

  4. 开指定引脚中断

    PxIEN

  5. 设置中断触发方式

    PICTL

  6. 设计中断服务程序

    声明中断向量入口

    设计子程序

    清空标志位

实例

#include <ioCC2530.h>
//通过按键S5(P05),切换LED灯的状态(P10)
void delay()
{
  int i,j;
  for(i=0;i<1000;i++)
    for(j=0;j<30;j++);
}

void main()
{
  P0SEL &= 0xdf; //1101 1111 //设置通用IO
  P0DIR &= 0xdf; //设置为输入
  P0INP &= 0xdf; //设置为上下拉
  P2INP &= 0xdf; //设置为上拉
  
  EA = 1;//开总中断
  P0IE = 1;//开P0中断//P2IE 不能位寻址
  P0IEN |= 0x20;//0010 0000 //开P0_5中断

  PICTL |= 0x01; //0000 0001 //设置P0触发方式为下降沿
  
  P1SEL &= 0xfe; //1101 1111 //设置P1通用IO
  P1DIR |= 0x01;//0000 0001 //设置P1为输出
  while(1);
}

#pragma vector=P0INT_VECTOR//声明中断向量为P0INT
__interrupt void function()
{
  //判断是否是P0中的5引脚触发的中断
  if(P0IFG &= 0x20)//0010 0000
  {
    //P0_5触发中断
    delay();
    if(P0_5 == 0){
      P1_0 ^= 1;
    }
  }
  P0IFG = 0;
  P0IF = 0;//清零中断标志位
}
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值