Zigbee自学第二天

Zigbee学习

记录学习过程中的一些想法,硬件设备和学习资料均来自安联德(淘宝)



一、外部中断

1.代码

初始化触发函数,设置第0端口中断使能,设置中断触发类型,允许第0端口中断,初始化中断标志位,打开总中断。

void InitKey()
{
    P0IEN |= 0x2;    // P0.1 设置为中断方式 1:中断使能
    PICTL |= 0x1;    //下降沿触发   
    IEN1 |= 0x20;    //允许P0口中断; 
    P0IFG = 0x00;    //初始化中断标志位
    EA = 1;          //打开总中断
}

2.CC2530中断知识

CC2530 具有18 个中断源,每个中断源都由各自的一系列特殊功能寄存器来进行控制。可以编程设置相关特殊功能寄存器,设置18 个中断源的优先级以及使能中断申请响应等。
18种中断类型及使能:
中断类型
在这里插入图片描述
在这里插入图片描述

寄存器
在这里插入图片描述

3.中断函数

#pragma vector = P0INT_VECTOR    
__interrupt void P0_ISR(void) 
{ 
    DelayMS(10);     //延时去抖
    LED1 = ~LED1;    //改变LED1状态
    P0IFG = 0;       //清中断标志 
    P0IF = 0;        //清中断标志 
} 
  • #pragma vector = <中断向量>
  • _ _interrupt void 中断函数(void)
    中断向量常有两种方式,一种是写中断服务函数入口地址,一种是写CC2530中中断函数的宏定义
    中断函数名任意起,在中断函数中要清空中断标注位,不然中断持续执行
    if(P0IFG > 0)          //按键中断
    {
        DelayMS(10);       //延时去抖       
        if(P0IFG > 0)      //按键中断
        {
            KeyValue = 1;  //产生中断保存中断状态
        }  
    } 
    

在采用中断的方式,通过按键控制流水灯的实验中,中断函数中使用两个if语句进行延时防抖

二、定时器

定时器基本原理:对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实现定时或者计数功能的外设。

1.定时器1

定时器1是一个个独立的16 位定时器,支持典型的定时/计数功能,比如输入捕获,输出比较和PWM 功能。定时器有五个独立的捕获/比较通道。每个通道定时器使用一个I/O 引脚。定时器用于范围广泛的控制和测量应用,可用的五个通道的正计数/倒计数模式将允许诸如电机控制应用的实现。
计数器可以作为一个自由运行计数器,一个模计数器或一个正计数/倒计数器运行

  • 自由运行模式:在自由运行操作模式下,计数器从0x0000 开始,每个活动时钟边沿增加1。当计数器达到0xFFFF(溢出),计数器载入0x0000,继续递增它的值。当达到最终计数值0xFFFF,设置标志IRCON.T1IF 和T1STAT.OVFIF。如果设置了相应的中断屏蔽位TIMIF.OVFIM 以及IEN1.T1EN,将产生一个中断请求。
  • 模模式:当定时器运行在模模式,16 位计数器从0x0000 开始,每个活动时钟边沿增加1。当计数器达到T1CC0(溢出),寄存器T1CC0H:T1CC0L 保存的最终计数值,计数器将复位到0x0000,并继续递增。如果定时器开始于T1CC0 以上的一个值,当达到最终计数值(0xFFFF)时,设置标志IRCON.T1IF 和T1CTL.OVFIF。如果设置了相应的中断屏蔽位TIMIF.OVFIM 以及IEN1.T1EN,将产生一个中断请求。模模式可以用于周期不是0xFFFF的应用程序。
  • 正计数/倒计数模式:在正计数/倒计数模式,计数器反复从0x0000 开始,正计数直到达到T1CC0H:T1CC0L 保存的值。然后计数器将倒计数直到0x0000,

在这里插入图片描述

  • 对应的程序代码
void InitT1()
{
    T1CTL = 0x0d;       //128分频,自动运行 0x0000-0xFFFF 
    T1STAT= 0x21;       //通道0,中断有效   
}
  • 代码表
    在这里插入图片描述

2.定时器3

定时器3只有8位,0xFF,最大计数为255。

  • 初始化
void InitT3()
{     

    T3IE = 1;                //开总中断和T3中断
    //高4位
    T3CTL |= 0xE0;           //128分频,128/16000000*N=0.5S,N=62500
    T3CTL |= 0x10;           //启动
    //低4位
    T3CTL &= ~0x03;          //自动重装 00->0xff  62500/255=245(次)
    T3CTL |= 0x08 ;          //开溢出中断     
    EA = 1;                  //开总中断

}
  • 代码表
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值