CC2530单片机入门学习

来源:互联网 发布:怪物猎人捏脸数据公主 编辑:程序博客网 时间:2024/05/02 17:19
实训周学习的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_1int 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_1int 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的数据手册回来查一下再补充。第一篇博客。
1 0
原创粉丝点击