CC2530单片机入门学习

2019-04-15 16:07发布

实训周学习的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的数据手册回来查一下再补充。 第一篇博客。