STC15系列4个串口的使用库函数 – 单片机/MCU论坛 – 中国电子技术论坛

新近生长任何人课题,想用STC15一套作为把持削成,它的主要功用是全部地充足的。,异乎寻常地,有四的串口资源。,8位单片机,曾经发现时T中只储备物质了两个串口库。,政府储备物质的藏书功用的运用是绝对复杂的。,我读了口令,有些人隐患。。

与最热的阿杜诺相形,51一套单片机的认知易用性,鸿景的当首领要成就生长认知易用性。。

这是给生长人员储备物质哲人呼叫功用的最好办法。,现时运用串行接口,确实,这些决定因素大体上是通过作弊预先安排好结果的的。。

盛行协定是8个档案位。,1终止态度置,无检验位,两个通常的波特率十足了。,任何人是9600,任何人是115200。

本运用的最出恭思索,我用绝对复杂的说闲话写了任何人藏书,供每件东西涉及。

本文击中要害函数库是同时存在的的。,任何时候都是可得到送出才记起;读取是异步和异步的,免得不注意档案,回转到1。;

好了,生长人员最好的说闲话是密码。,上面是密码

率先是提供免费入场券,STC公务的藏书的涉及文献,提供免费入场券的满意的如次

//STC15WxxxxS4 一套4串口运用函数库
//生长者,北京的旧称创星铁甲情痴终结者技术,星李
本顺序遵照GPL协定,请保存正文和开始
//2016.1.5
#ifndef __XYUSART_H
#define __XYUSART_H  

#include “”
#define BAUD9600   0  波特率9600
#define BAUD115200 1  波特率115200
要不是任何人铅字8位档案位,1位终止态度,无同等,要不是9600和115200的使调动速率。,使容易必要方的运用,引脚运用默许引脚
void S1_init(u8 波特) 串行接口1的设定初值P3.0~> RXD P3.1->TXD
void S2_init(u8 波特) 串行接口2的设定初值P1.0~> RXD2 P1.1->TXD2
void S3_init(u8 波特) 串行接口3的设定初值P0.0~> RXD3 P0.1->TXD3
void S4_init(u8 波特) 串行接口4的设定初值P0.2-> RXD4 P0.3->TXD4

void S1_send(u8 c); 串口1发送八位位组
void S2_send(u8 c); 串口2发送八位位组
void S3_send(u8 c); 串口3发送八位位组
void S4_send(u8 c); 串口4发送八位位组

short  S1_read();  //串口1,读取八位位组 ,回转到0以象征档案已成读取,回转到1以象征不注意读取档案,档案定位球在C中
short  S2_read();  //串口2,读取八位位组 ,回转到0以象征档案已成读取,回转到1以象征不注意读取档案,档案定位球在C中
short  S3_read();  //串口3,读取八位位组 ,回转到0以象征档案已成读取,回转到1以象征不注意读取档案,档案定位球在C中
short  S4_read();  //串口4,读取八位位组 ,回转到0以象征档案已成读取,回转到1以象征不注意读取档案,档案定位球在C中
#endif

提供免费入场券击中要害正文曾经很确切的地写明了用法。,比如,S1xInIT(BUD9600)表现序列的设定初值。,8档案位,1终止态度置,无检验位,波特率9600;

以后提供免费入场券


//STC15WxxxxS4 一套4串口运用函数库
//生长者,北京的旧称创星铁甲情痴终结者技术,星李
本顺序遵照GPL协定,请保存正文和开始
//2016.1.5

#include “”
#define S3RI  0x01              //S3CON.0
#define S3TI  0x02              //S3CON.1
#define S2RI  0x01              //S2CON.0
#define S2TI  0x02              //S2CON.1
#define S4RI  0x01              //S4CON.0
#define S4TI  0x02              //S4CON.1

void S1_init(u8 波特) 串行接口1的设定初值P3.0~> RXD P3.1->TXD
    u32 baudrate;
if (波特)
  baudrate=115200;
else
  baudrate=9600;

    SCON = 0x50;               
    AUXR |= 0x40;               
    AUXR &= ~0x01;
TMOD = 0x00;               

    TL1 = (65536 – (MAIN_Fosc/4/baudrate));   
    TH1 = (65536 – (MAIN_Fosc/4/baudrate))>>8;
    TR1 = 1;                    
    ES = 1;                    
    EA = 1;

}

void S2_init(u8 波特) 串行接口2的设定初值P1.0~> RXD2 P1.1->TXD2
    u32 baudrate;
if (波特)
  baudrate=115200;
else
  baudrate=9600;
    S2CON = 0x50;           //8-bit variable UART
T2L = (65536 – (MAIN_Fosc/4/baudrate));   
    T2H = (65536 – (MAIN_Fosc/4/baudrate))>>8;
AUXR &= ~(1<<3);
AUXR |=  (1<<2);
AUXR |=  (1<<4);
   // AUXR |= 0x14;            
    IE2 |= 0x01;                 
    EA = 1;
}

void S3_init(u8 波特) 串行接口3的设定初值P0.0~> RXD3 P0.1->TXD3
    u32 baudrate;
if (波特)
  baudrate=115200;
else
  baudrate=9600;
    S3CON = 0x50;           
    T3L = (65536 – (MAIN_Fosc/4/baudrate));  
    T3H = (65536 – (MAIN_Fosc/4/baudrate))>>8;
    T4T3M |= 0x02;           
    T4T3M |= 0x08;           
    IE2 |= 0x08;                 
    EA = 1;

}

void S4_init(u8 波特) 串行接口4的设定初值P0.2-> RXD4 P0.3->TXD4

    u32 baudrate;
if (波特)
  baudrate=115200;
else
  baudrate=9600;

    S4CON = 0x50;         
    T4L = (65536 – (MAIN_Fosc/4/baudrate));
    T4H = (65536 – (MAIN_Fosc/4/baudrate))>>8;
    T4T3M |= 0x20;            
    T4T3M |= 0x80;              
    IE2 |= 0x10;               
    EA = 1;

}

void S1_send(u8 c){串口1发送八位位组
  SBUF = c;
  while (!钛)
  TI = 0;
  return ;

}

void S2_send(u8 c){ 串口2发送八位位组

   S2BUF = c;            
   while (!(S2CON & S2TI));
   S2CON &= ~S2TI;     
   return ;
}

void S3_send(u8 c){ 串口3发送八位位组
   S3BUF = c;            
   while (!(S3CON & S3TI));
   S3CON &= ~S3TI;     
   return ;
}
void S4_send(u8 c){ 串口4发送八位位组
   S4BUF = c;           
   while (!(S4CON & S4TI));
   S4CON &= ~S4TI;     
   return ;
}

short  S1_read(){  //串口1,读取八位位组 ,回转到0以象征档案已成读取,回转到1以象征不注意读取档案,档案定位球在C中
  short c;
  if (RI)
  {   
      c=SBUF;
      RI=0;
  }
  else
    c=-1;
  回转C
}

short  S2_read(){  //串口2,读取八位位组 ,回转到0以象征档案已成读取,回转到1以象征不注意读取档案,档案定位球在C中
  short c;
  if (S2CON & S2RI)
  {
     c = S2BUF;
     S2CON &= ~S2RI;     
  }
  else
     c = -1;
  return c;
}
short  S3_read(){  //串口3,读取八位位组 ,回转到0以象征档案已成读取,回转到1以象征不注意读取档案,档案定位球在C中
  short c;
  if (S3CON & S3RI)
  {
     c = S3BUF;
     S3CON &= ~S3RI;     
  }
  else
     c = -1;
  return c ;
  
}
short  S4_read(){  //串口4,读取八位位组 ,回转到0以象征档案已成读取,回转到1以象征不注意读取档案,档案定位球在C中
  short c;
  if (S4CON & S4RI)
  {
     c = S4BUF;
     S4CON &= ~S4RI;     
  }
  else
     c = -1;
  return c ;
}

运用案件:

#include “”

#incoude ////因为STC15集合函数

void main()

{

   short c;

   unsigned char d;

    S1_init(BAUD9600);

    (1)

        c=S1_read(); 读取串行接口1

        if (c>=0){ 将读取八位位组回转到串行接口1

             d= c & 0xff;

             S1_send(d);

         }

     }

}

同样集合函数是读取和同时存在的查询的方法。,不敷使完善,有空的话,把它使完善成一种停止的方法,任何人具有读写把缓冲液加入的库。


This entry was posted in sunbet官网. Bookmark the <a href="https://www.518343.com/sunbetgw/954.html" title="Permalink to STC15系列4个串口的使用库函数 – 单片机/MCU论坛 – 中国电子技术论坛" rel="bookmark">permalink</a>.

发表评论

电子邮件地址不会被公开。 必填项已用*标注