基于cc2530按键中断控制流水灯的实验方案

电子说

1.2w人已加入

描述

cc2530的第三次实验:按键中断控制流水灯

效果为按一次按键,流水灯亮一次

实验相关电路图:

CC2530

实验相关寄存器:

CC2530

初始化函数

//初始化LED灯
    //设置P1SEL,通用为0,外设为1 11111100
    P1SEL &=~0x03;

    //设置P0SEL,    11101111
    P0SEL &= ~0x10;

    //设置P1DIR,输出为1,输入为0  00000011
    P1DIR |= 0x03;

    //设置P0DIR     00010000
    P0DIR |= 0x10;     


//初始化按钮和中断
//初始化按钮
    //初始化P0SEL,通用为0     11111101
    P0SEL&=~0x02;
    //初始化P0DIR,输入为0     11111101
    P0DIR&=~0x02;

//初始化中断
    //设置引脚中断 1为中断使能 00000010
    P0IEN |= 0x02;
    //设置端口中断
    IEN1=1;
    //设置端口中断触发方式 1为中断使能
    IEN1|=0x20;
    //设置总中断
    EA=1;
    //清空标志位
    P0IFG=0;

中断服务函数

//中断服务函数
#pragma vector = P0INT_VECTOR        //这一行的P0INT_VECTOR是中断源的名称吗?
__interrupt void P0ISR(void)
{
  //清除端口中断标志位
  P0IFG=0;
  
  //LED灯流水亮一遍
  BLink();

  //清除端口中断标志位
  P0IF=0;


}

上面的代码一定要注意P0IFG一定要在P0IF之前清除,话说P0IF与P0IFG到底是干啥用的?他们之间什么关系,端口的标志寄存器?(记得查一下)
P0IFG是端口0中断状态标志,P0IF是cpu内中断标志寄存器,什么鬼,没弄明白啊,问一下老师吧!

全部代码

#include 

typedef unsigned int uint;
typedef unsigned char uchar;
#define LED1 P1_0
#define LED2 P1_1 
#define LED3 P0_4
#define BUTTON1 P0_1 

uint time=300;

//延迟函数
void Delay(uint time)
{
  for(uint i=0;i

这个实验的难点以及重点主要是在初始化中断这个过程,
初始化引脚的寄存器P0IEN|=0x02;
设置端口中断的寄存器IEN1|=0x20;
设置端口中断触发方式PICTL|=0x01;
设置总中断EA=1
清空标志位:P0IFG=0;
编辑:hfy

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分