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);
}
本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可
本文链接: https://www.ahwgs.cn/cc2530jichushiyanzhijidianqishiyanshuanglian.html