/*
串口控制继电器
发送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);
}