主页 > 资讯 >

STC15系列4个串口的使用库函数 - sinat

时间:2017-09-10 11:20

来源:网络整理作者:admin点击:

最亲近的打开了东西突出,想用STC15串联作为把持晶片?,其功用次要运用还比力充足的,尤其地,有四个一组之物串口资源,在8位微把持器被以为是少见的,不过,打开人员发展,官气十足库只供应两个串行。,政府供应的集合作用的用法比力复杂,我发现了行为准则,并发展了大约缺陷。。

相形更通知的Arduino现时,51串联单片机的知觉易用性,东西好的胶料,宏碁管理必不可少的事物在打开轻易运用的某方面下功夫。

最好给打开人员供应东西像理由作用同样地的二百五。,现时运用的串口,说起来,这些决定因素大部分地是主力队员的。。

公共在议定书中拟定是8个标明位。,1个终止位,无检验位,通常的波特率对两分类人事广告版来说十足了。,东西是9600,东西是115200。

由于最实用的的思索,我写了东西库,理由比力简略,供当权者顾及。

在定冠词中写道,在同一时刻浇铸下的书斋,每回你可使用它发送领先,你恢复它;发现必要异步,条件缺勤恢复标明,则恢复1。;

好了,打开人员最好的术语是行为准则。,上面是行为准则

率先是寄给报社,顾及STC官气十足库寄给报社,该寄给报社如次所示

//STC15WxxxxS4 串联4串口运用作用库
//打开者,现在称Beijing创世遥控装置技术,星斗李
此追逐依照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

寄给报社达到目标正文运用法极端地明确的。,拿 ... 来说,s1_init(baud9600)代表串口的设定初值,8标明位,1个终止位,无检验位,波特率9600;

那么是寄给报社

//STC15WxxxxS4 串联4串口运用作用库

//打开者,现在称Beijing创世遥控装置技术,星斗李

此追逐依照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;         
细菌 = (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)
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;
return  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); 

         }

     }

}

这次写的集合作用是查询读和同一时刻写的方法,不敷圆满的,条件你有时期,把它腐烂成东西暂时失去知觉,具有读写起缓冲作用的人的库。

【责任编辑:admin】
上一篇:2016款宾利飞驰V8S 豪华轿跑典范268万 下一篇:没有了
热图 更多>>
热门文章 更多>>