| /*-------------------------------------- 芯片    :STC12C5A60S2
 晶振    :11.0592MHZ
 开发平台:KEIL
 功能    :串口一或者串口二都可以通过上位机控制30路继电器
 波特率  :9600BPS
 日期    :11.5.19
 注意    :下载完程序后请复位系统!!(切记!)
 --------------------------------------*/
 
 #include "Hfile\\STC12C5A60S2.h"
 #include"Hfile\\PublicV.H"
 #define  uchar unsigned char
 #define  uint  unsigned int
 uchar dat;
 
 void init ()
 {
 //串口2波特率
 TMOD = 0x20;                                  //定时器1产生波特率
 SCON = 0x50;                                 //方式1,8位数据,波特率可变
 TH1=  0xfd;
 TL1 = 0xfd;                             //波特率 9600
 //串口1波特率
 S2CON = 0x50;                     //方式1,八位数据,可变波特率
 BRT=0XFD;                                  //设置波特率9600
 TR1=1;                                          //启动定时器产生串口2波特率
 AUXR=0x10;                                 //启动串口1波特率发生器
 IP=0x00;                                 //优先级默认
 EA=1;                                      //开总中断
 ES=1;                                         //开串口1中断
 IE2=0x01;                                 //开串口2中断
 
 }
 
 /*--------------------------------------
 延时函数
 --------------------------------------*/
 void delay ( uint t )
 {
 uint i,j;
 for( i=0; i<t; i++)
 for( j=0; j<250; j++);
 }
 
 /*--------------------------------------
 主函数
 --------------------------------------*/
 void main()
 {
 uchar k=10;
 P4SW|=0x20;                   //配置P4.5为IO口
 P4M0|=0x10;                   //配置P4.4为IO口
 P4M1|=0x10;
 P0=P1=P2=P3=0xff;
 P4|=0x30;
 init();             // 定时器初始化
 add=0X00;
 while(1)
 {
 if(receive==1&&bite[1]==add)
 {
 /*0=握手 1=地址 2=继电器开关 3=继电器1-8路 4=继电器9-16路 5=继电器17=24路
 *6=继电器25-30路*/
 receive=0;
 if(bite[2]==0x11)           //打开
 open_X1(bite[3],0);
 if(bite[2]==0x01)           //关闭
 open_X1(bite[3],1);
 
 if(bite[4]==0x12)           //打开
 open_X2(bite[5],0);
 if(bite[4]==0x02)           //关闭
 open_X2(bite[5],1);
 
 
 //  IapEraseSector(0);
 //  IapProgramByte(1,bite[3]);
 // IapProgramByte(2,bite[5]);
 // IapProgramByte(3,bite[7]);
 // IapProgramByte(4,bite[9]);
 
 
 }
 }
 
 }
 /*--------------------------------------
 串口一 发送接收中断函数
 --------------------------------------*/
 
 void uart_isr()  interrupt 4 using 2
 {
 
 ES=0;
 if( RI )
 {
 RI=0;
 bite[r] = SBUF;
 if(bite[0]==0XAA || bite[0]==0XAB || bite[0]==0XAC || bite[0]==0XAD)
 r++;
 if(r>=6)
 {
 receive=1;
 r=0;
 }
 }
 ES=1;
 
 }
 
 void uart2_isr()  interrupt 8 using 1
 {
 if( S2CON & 0x01 )
 {
 S2CON &= ~0x01;
 bite[r] = S2BUF;
 if(bite[0]==0XAA || bite[0]==0XAB || bite[0]==0XAC || bite[0]==0XAD)
 r++;
 if(r>=6)
 {
 receive=1;
 r=0;
 }
 }
 
 if( S2CON & 0x02 )
 {
 S2CON &= ~0x02;
 }
 
 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |