/*-------------------------------------- 
芯片    :STC12C5A60S2 
晶振    :11.0592MHZ 
开发平台:KEIL 
功能    :串口一或者串口二都可以通过上位机控制30路继电器 
波特率  :9600BPS 
日期    :11.5.19 
注意    :下载完程序后请复位系统!!(切记!) 
--------------------------------------*/ 
 
#include "STC12C5A60S2.h" 
#include"jdq30.h" 
#define  uchar unsigned char  
#define  uint  unsigned int  
 
uchar dat; 
 
 
void init () 
{ 
   //串口2波特率 
        TMOD = 0x20;                                  //定时器1产生波特率 
 
        SCON = 0x50;                                 //方式1,8位数据,波特率可变 
 
        TH1=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  uart1_txd(uchar x) 
{ 
        SBUF = x; 
} 
 
//     串口二   发送一个字符 
void  uart2_txd(uchar x) 
{ 
        S2BUF = x; 
} 
*/ 
 
 
/*-------------------------------------- 
          延时函数 
--------------------------------------*/ 
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();//串口初始化 
 
   while(1) 
   { 
                               
         
        /******************************************************************** 
                                    接收数据判断函数 
        *********************************************************************/ 
        switch(dat) //接收数据判断 
        { 
         
                case 'I':  
                          P0=P2=0; 
                                  P1&=0x0c; 
                                  P3&=0x03; 
                          P4&=0xcf; 
                          delay(200); 
                                  init(); 
                              break; //  全开 
                                   
                case 'i':  
                           P3=P1=P0=P2=0XFF; 
                           P4|=0x30; 
                                   delay(k);         
                                   break; //  全关 
                 
                case 'A': OUT1=0;delay(k);break;           //  第一路开 
                case 'B': OUT2=0;delay(k);break;           //  第二路开 
                case 'C': OUT3=0;delay(k);break;           //  第三路开 
                case 'D': OUT4=0;delay(k);break;           //  第四路开 
                case 'E': OUT5=0;delay(k);break;           //  第五路开 
                case 'F': OUT6=0;delay(k);break;           //  第六路开 
                case 'G': OUT7=0;delay(k);break;           //  第七路开 
                case 'H': OUT8=0;delay(k);break;           //  第八路开 
                case 'J': OUT9=0;delay(k);break;           //  第九路开 
                case 'K': OUT10=0;delay(k);break;           //  第十路开 
                case 'L': OUT11=0;delay(k);break;           //  第十一路开 
                case 'M': OUT12=0;delay(k);break;           //  第十二路开 
                case 'N': OUT13=0;delay(k);break;           //  第十三路开 
                case 'O': OUT14=0;delay(k);break;           //  第十四路开 
                case 'P': OUT15=0;delay(k);break;           //  第十五路开 
 
                         
                case 'a': OUT1=1;delay(k);break;           //  第一路关 
                case 'b': OUT2=1;delay(k);break;           //  第二路关 
                case 'c': OUT3=1;delay(k);break;           //  第三路关 
                case 'd': OUT4=1;delay(k);break;           //  第四路关 
                case 'e': OUT5=1;delay(k);break;           //  第五路关 
                case 'f': OUT6=1;delay(k);break;           //  第六路关 
                case 'g': OUT7=1;delay(k);break;           //  第七路关 
                case 'h': OUT8=1;delay(k);break;           //  第八路关 
                case 'j': OUT9=1;delay(k);break;           //  ... 
                case 'k': OUT10=1;delay(k);break;           //  ... 
                case 'l': OUT11=1;delay(k);break;           //  ... 
                case 'm': OUT12=1;delay(k);break;           //  ... 
                case 'n': OUT13=1;delay(k);break;           //  ... 
                case 'o': OUT14=1;delay(k);break;           //  ... 
                case 'p': OUT15=1;delay(k);break;           //  ... 
 
           default:break;                                           //  跳出 
   } 
 
}         
 
} 
/*-------------------------------------- 
         串口一 发送接收中断函数 
--------------------------------------*/ 
 
void uart_isr()  interrupt 4  
{ 
        if( RI ) RI = 0; 
         
        dat = SBUF; 
         
        if( TI ) TI = 0; 
} 
 
 
/*-------------------------------------- 
      串口二    发送接收中断函数 
--------------------------------------*/ 
void uart2_isr()  interrupt 8 
{ 
   if( S2CON & 0x01 ) 
         { 
                S2CON &= ~0x01; 
                   dat= S2BUF; 
         } 
 
        if( S2CON & 0x02 ) 
        { 
                        S2CON &= ~0x02; 
        } 
 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 |