实训周学习的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;
P1DIR |=0x03;
P1DIR &=~0x04;
LED1=1;
LED0=1;
while(1){
if(SW==0){
while(SW==0);
LED1=~LED1;
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;
T1CC0H=0xf4;
T1CC0L=0x24;
IEN1 |=0x02;
T1OVFIM=1;
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的数据手册回来查一下再补充。
第一篇博客。