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

通过串口1或2与上位机通讯

[复制链接]
跳转到指定楼层
沙发
发表于 2015-5-18 16:31:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*--------------------------------------
芯片    :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 'Q': OUT16=0;delay(k);break;           //  第十六路开
                case 'R': OUT17=0;delay(k);break;           //          ...
                case 'S': OUT18=0;delay(k);break;           //          ...
                case 'T': OUT19=0;delay(k);break;           //          ...
                case 'U': OUT20=0;delay(k);break;           //          ...
                case 'V': OUT21=0;delay(k);break;           //          ...
                case 'W': OUT22=0;delay(k);break;           //          ...
                case 'X': OUT23=0;delay(k);break;           //          ...
                case 'Y': OUT24=0;delay(k);break;           //          ...
                case 'Z': OUT25=0;delay(k);break;           //          ...
                case '1': OUT26=0;delay(k);break;           //          ...
                case '2': OUT27=0;delay(k);break;           //          ...
                case '3': OUT28=0;delay(k);break;           //          ...
                case '4': OUT29=0;delay(k);break;           //          ...
                case '5': OUT30=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;           //  ...
                case 'q': OUT16=1;delay(k);break;           //  ...
                case 'r': OUT17=1;delay(k);break;           //  ...
                case 's': OUT18=1;delay(k);break;           //  ...
                case 't': OUT19=1;delay(k);break;           //  ...
                case 'u': OUT20=1;delay(k);break;           //  ...
                case 'v': OUT21=1;delay(k);break;           //  ...
                case 'w': OUT22=1;delay(k);break;           //  ...
                case 'x': OUT23=1;delay(k);break;           //  ...
                case 'y': OUT24=1;delay(k);break;           //  ...
                case 'z': OUT25=1;delay(k);break;           //  ...
                case '6': OUT26=1;delay(k);break;           //  ...
                case '7': OUT27=1;delay(k);break;           //  ...
                case '8': OUT28=1;delay(k);break;           //  ...
                case '9': OUT29=1;delay(k);break;           //  ...
            case '0': OUT30=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;
        }

}






















本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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