CC2530单片机入门学习

实训周学习的CC2530单片机
单片机P1.0、P1.1口接共阴发光二极管(即P1.0 P1.1赋1灯亮,赋0灯灭),P1.2口接开关(根据电路判断开关按下P1.2为0)。
#include"ioCC2530.h"    
#define SW(P1.2)                    //声明按钮P1.2的常量
#define LED0(P1.0) LED1(P1.1)       //声明LED灯的常量
int i,j;
P1SEL &=~0XFF;                     //设置P1.1-P1.7为通用I/O口
P1DIR |=0x03;                       //设置P1.1 P1.0 为输出端口
P1DIR &=~0x04;                     //设置P1.2为输入端口
LED1=1;                             //LED1初始为亮
LED0=1;                             //LED1初始为亮
while(1){                           //初始化完毕后无限循环
    if(SW==0){                     //判断按钮是否按下
            while(SW==0);           //判断按钮是否抬起
            LED1=~LED1;             //LED灯状态每次按下之后取反
            LED2=~LED2;
    }
}

这是我弄查了手册之后编的第一个带按钮的程序,不带按钮的太简单就不贴了。

P1SEL &=~0xFF; 这里是设置P1端口的功能为通用IO或外设功能,赋值0为通用IO,1为外设功能。目前只知道通用IO,所以全部赋值0。
P1DIR |=0x03; P1DIR &=~0x04; 这里是设置P1端口如果为IO口,是输入还是输出。赋值0为输入,1为输出。因为P1.0 P1.1接到LED登上所以设置为输出,P1.2接到按钮上,设置为输入。

&= |= 这样写是为了在不变更其他位的参数的情况下改变指定参数,这个我刚开始一直是直接 P1DIR=0x03;这样赋值,后来听老师说了之后才改的。

然后是外部中断

#include"ioCC2530.h"
#define SW P1_2
#define LED0 P1_0
#define LED1 P1_1
int flag=0;
int i=0,j=0;

#pragma vector=0x7B
__interrupt void myInter(void){
  flag=~flag;
  P1IFG &=~0x04;
  P1IF =0;
}

void init(){
  P1SEL &=~0XFF;
  P1DIR |=0x03;
  P1INP &=~0x04;
  P2INP |=0x40;
  IEN2 |=0x10;
  P1IEN |=0x04;
  PICTL |= 0x02;
  EA=1;
  P1_0=0;
  P1_1=0;
}
void main(){
  init();
  while(1){
    while(flag){
    P1_0=0;
    P1_1=0;
    if(flag==0) break;
    }
    while(flag==0){
    P1_0=1;
    P1_1=1;
    if(flag) break;
    }
  }
}

然后是定时器中断

#include"ioCC2530.h"
#define SW P1_2
#define LED0 P1_0
#define LED1 P1_1
int flag=0;
int i=0,j=0;

#pragma vector=0x4B  //与外部中断不同
__interrupt void myInter(void){
   T1STAT &=~0x20;
   flag=~flag;
}

void init(){
  P1SEL &=~0XFF;
  P1DIR |=0x03;
  P1INP &=~0x04;
  P2INP |=0x40;

  T1CTL |=0x0f;//128分频,正记数倒记数模式

  T1CC0H=0xf4;//0.5秒初值高位
  T1CC0L=0x24;//0.5秒初值低位


  IEN1 |=0x02;// 或T1IE=1;
  T1OVFIM=1;// TIMIF第六位 
  EA=1;//总中断使能
}

void main(){
  init();
  while(1){
    while(flag){
    P1_0=0;
    P1_1=1;
    if(flag==0) break;
    }
    while(flag==0){
    P1_0=1;
    P1_1=0;
    if(flag) break;
    }
  }
}


等我去机房拷了CC2530的数据手册回来查一下再补充。

第一篇博客。

你可能感兴趣的:(其他编程)