查看: 1431|回复: 0
打印 上一主题 下一主题

串口通信有返回值

[复制链接]
跳转到指定楼层
沙发
发表于 2015-5-13 08:59:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*--------------------------------------
芯片    :STC12C5A60S2芯片
硬件:  :15入15出继电器控制板子
晶振    :11.0592MHZ
开发平台:KEIL
功能    :串口一或者串口二都可以通过上位机控制30路继电器
波特率  :9600BPS
日期    :2012.4.19
编者    :yang
QQ     :7902449096
注意    :下载完程序后请复位系统!!(切记!)
--------------------------------------*/

#include "Hfile\\STC12C5A60S2.h"
#include"Hfile\\PublicV.H"
#define  uchar unsigned char
#define  uint  unsigned int
void sender (void);
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 sender (void)
{
unsigned char j;
         ES=0;
for(j=0;j<=5;j++)
  {  
   SBUF=bite[j];
        while(!TI);
            TI=0;

  }         
          ES=1;
}

/*--------------------------------------
          主函数
--------------------------------------*/
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);
                  sender ();

          //  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;
        }

}





















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入因仑

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表