1. 程式人生 > >CC2530基礎實驗之繼電器實驗(雙聯)

CC2530基礎實驗之繼電器實驗(雙聯)

/*
  串列埠控制繼電器
  傳送11/10 開啟/關閉繼電器1  
  傳送21/20 開啟/關閉繼電器2
  繼電器在P2_0  和  P1_7(雙聯繼電器)

*/
#include <iocc2530.h>
#define LED1 P1_0
#define LED2 P1_1
#define JD1 P2_0
#define JD2 P1_7

#define ON 1
#define OFF 0



int counter = 0;
unsigned char dat;
int i=0;

void initGPIO()   //初始化LED
{

  P2DIR = 0x01;
  P2SEL =0x00;

  P1DIR |=0x80;  // P1_7
  P1DIR |= 0x1b;
  P1SEL |=0x00;
  JD1=0;
  JD2=0;
  P1=0;
}

void init_T1()   //初始化定時器1
{
  CLKCONCMD &= ~0X40;
  while(CLKCONSTA & 0x40);
  CLKCONCMD &= ~0X47;
}

void init_UART0()
{
  PERCFG=0X00;  //外設控制暫存器 這裡使用串列埠0位置1
  P0SEL=0X0C;   //0_2 0_3設定特殊埠
  U0CSR |=0X80;//0100 0000  0x80 串列埠通訊的語言這裡使用USART

  U0BAUD =216;  
  U0GCR=10  ;   //波特率

  U0UCR |=0x80; //流控制禁止
  U0CSR |=0x40;  //允許接受資料
  UTX0IF = 0;       //接受標誌位
  URX0IF = 0;       //傳送標誌位

  URX0IE=1;   //使能中斷
  EA=1;      //中斷總開關

}
void SendString(char *str)
{
  while(1)
  {
    if(*str=='\0')
      break;
    U0DBUF = *str++;
    while(!UTX0IF);
    UTX0IF = 0;
  }
}

#pragma vector = URX0_VECTOR
__interrupt void URX0_function()
{
  URX0IF = 0;
  dat=U0DBUF;

    if(dat==0x11)
    {
      JD1=ON;
      LED1=ON;
      SendString("繼電器1開啟\r\n");
    }
    if(dat==0x10)
    {
      JD1=OFF;
      LED1=OFF;
      SendString("繼電器1關閉\r\n");
    }
    if(dat==0x21)
    { 
      JD2=ON;
      LED2=ON;
      SendString("繼電器2開啟\r\n");
    }
    if(dat==0x20)
    {  
      JD2=OFF;
      LED2=OFF;
      SendString("繼電器2關閉\r\n");
    }

}

void main()
{
  initGPIO();
  init_T1();
  init_UART0();
  SendString("串列埠開啟成功\r\n");

  while(1);
}