/********************************************************************
制 作 人:林景福
*********************************************************************/
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar receive=0;
uchar send=0xff;
sbit out1=P2^0; //继电器1
sbit out2=P2^1; //继电器2
sbit out3=P2^2; //继电器3
sbit out4=P2^3; //继电器4
sbit out5=P2^4; //继电器5
sbit out6=P2^6; //继电器6
sbit out7=P2^5; //继电器7
sbit out8=P2^7; //继电器8
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
**********************************************************************/
void Delay_1ms(uint i) //1ms延时
{
uchar x,j;
for(j=0;j
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
* 输入 : 无
* 输出 : 无
**********************************************************************/
void Com_Init(void)
{
TMOD = 0x20; //设置定时器工作方式2
// PCON = 0x00; //设置波特率不加倍
SCON = 0x50; //设置为工作方式1
TH1 = 0xfd; //设置波特率 9600
TL1 = 0xfd;
TR1 = 1; //启动定时器1
ES = 1; //开串口中断
EA = 1; //开总中断
}
//开关操作函数,接收到一次数据改变一次状态
void alloff()
{
P2=0xff;
}
void main()
{
Delay_1ms(100);
Com_Init();//串口初始化
while (1);
}
/********************************************************************
* 名称 : Com_Int()
* 功能 : 串口中断子函数
* 输入 : 无
* 输出 : 无
**********************************************************************/
void Com_Int(void) interrupt 4
{
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
receive = SBUF ; //接收=SBUF
RI = 0; //令接收中断标志位为0(软件清零)
switch (receive)
{
case 0x00:alloff();break; //关闭所有
case 0x01: P2=0xfe;break;
case 0x20: out2=1;break;
case 0x21: out2=0;break;
case 0x30: out3=1;break;
case 0x31: out3=0;break;
case 0x40: out4=1;break; //关
case 0x41: out4=0;break; //开
case 0x50: out5=1;break;
case 0x51: out5=0;break;
case 0x60: out6=1;break;
case 0x61: out6=0;break;
case 0x70: out7=1;break;
case 0x71: out7=0;break;
case 0x80: out8=1;break;
case 0x81: out8=0;break;
// case常量表达式x:语句x;break;
default:P2=0xff;break;
}
}
EA = 1;
}