立即注册 登录
返回首页

uid:372505的个人空间

日志

STC双串口程序

已有 1605 次阅读2018-7-16 14:22

引脚定义:串行口1    发送————TxD/P3.1 接收————RxD/P3.0

      串行口2 发送————TxD2/P1.3;接收————RxD2/P1.2

功能描述:STC12双串口通信(中断方式)

          当串行口1接收数据后,将此数据由串行口2发送出去

          当串行口2接收数据后,将此数据由串行口1发送出去

***********************************************************************/

#include<STC12C5A.h>

#include<intrins.h>

#define S2RI 0x01   //串口2接收中断请求标志位

#define S2TI 0x02   //串口2发送中断请求标志位

unsigned char flag1,flag2,temp1,temp2;

/****************串行口初始化函数****************/

void InitUART(void)

{

    TMOD = 0x20;    //定时器1工作在方式2  8位自动重装

    SCON = 0x50;    //串口1工作在方式1  10位异步收发 REN=1允许接收

    TH1 = 0xFA;        //定时器1初值

    TL1 = TH1;

    TR1 = 1;        //定时器1开始计数

    EA =1;  //开总中断

    ES =1;  //开串口1中断

 

    S2CON = 0x50;   //串口2工作在方式1  10位异步收发 S2REN=1允许接收

    BRT = 0xFA;        //独立波特率发生器初值

    AUXR = 0x10;    //BRTR=1 独立波特率发生器开始计数

    IE2 =0x01;  //开串口2中断  ES2=1

}

/****************串行口1发送****************/

void UART_1SendOneByte(unsigned char c)

{

    SBUF = c;

    while(!TI);      //TI=0,在此等待

    TI = 0;

}

 

/*void UART_1sendstr(unsigned char *s)

{

     while(*s!='\o')   // \0表示字符串结束标志,通过检测字符串末尾

      {

       UART_1SendOneByte(*s);

       s++;

      }

}*/

/****************串行口2发送****************/

void UART_2SendOneByte(unsigned char c)

{

    S2BUF = c;

    while(!(S2CON&S2TI));  //S2CON=50,在此等待 ;S2CON=52,发送中断信号,执行下一

    S2CON&=~S2TI;       //S2TI=0

}

 

/*void UART_2Sendstr(unsigned char *s)

{

     while(*s!='\o')   // \0表示字符串结束标志,通过检测字符串末尾

      {

       UART_2SendOneByte(*s);

       s++;

      }

}*/

/*****************主函数******************/

void main(void)

{

        InitUART();  //串行口初始化

while(1)

{

//如果串口1接收到数据,将此数据由串口2发送

if(flag1==1)

{

flag1=0;

UART_2SendOneByte(temp1);

}

//如果串口2接收到数据,将此数据由串口1发送

if(flag2==1)

{

flag2=0;

UART_1SendOneByte(temp2);

}

}

}

/************串行口1中断处理函数*************/

void UART_1Interrupt(void) interrupt 4

{

if(RI==1)

{

RI=0;

flag1=1;

temp1=SBUF;

}

}

/************串行口2中断处理函数*************/

void UART_2Interrupt(void) interrupt 8

{

if(S2CON&S2RI)

{

S2CON&=~S2RI;

flag2=1;

temp2=S2BUF;

}

}


路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部