STC12C5A16S2双串口的使用

发布者:玄幻剑客最新更新时间:2016-09-22 来源: eefocus关键字:STC12C5A16S2  双串口 手机看文章 扫描二维码
随时随地手机看文章
stc双串口的使用:

MCU:STC15C5A16S2

时钟:11.0592

S2SMOD=1,BRTX12=1;

串口波特率:9600

 

#include
#define uint8 unsigned char
#define uint16 unsigned int

#define Fclk      11059200UL   /*使用22.1184M晶体*/
#define BitRate   9600UL       /*波特率定义为9600*/
#define RELOAD_COUNT   0Xb8

volatile uint8 Buf[4]={0x00,0x00,0x00,0x00};//
volatile uint8 BufBack[4]={0x00,0x00,0x00,0x00};
uint8 Num=4;


void UartInit()
{
     SCON=0X50; //8位可变波特率,无奇偶校验
  TMOD=0X21; //设置定时器1,自动重装数
  TH1=256-Fclk/(BitRate*12*16);  //计算定时器重装值
     TL1=256-Fclk/(BitRate*12*16);
  PCON|=0X80; //波特率加倍
  TR1=1;      //开定时器1
  REN=1;      //允许接收
  ES=1;   // 允许串口1中断
  EA=1;   // 开总中断
}
void UartSendByte(unsigned char i)
{
      ES=0;
   TI=0;
   SBUF=i;
   while(TI==0);
   TI=0;
   ES=1;
}


/********************************************************************
函数功能:串口中断处理。
入口参数:无。
返    回:无。
备    注:无。
********************************************************************/
void UartISR(void) interrupt 4
{
 if(RI)    //收到数据
  {
       if(Num>0)
    {
       Buf[4-Num]=SBUF;
    Num--;
  }
       RI=0;   //清中断请求
  }
}

/********************以上为串口1收发程序***********************/
/********************以下为串口2收发程序***********************/
void UartInit2()
{
     S2CON=0X50;     //8位可变波特率,无奇偶校验
  BRT=RELOAD_COUNT;//波特率发生器装载
  AUXR=0X1c;

  IE2=0X01;         //允许串口2中断
  EA=1;
}


void UartSendByte2(unsigned char i)
{
     uint8 temp=0;
  IE2=0X00;
  S2CON=S2CON&0XFD;
  S2BUF=i;
  do{
       temp=S2CON;
    temp=temp&0x02;
  }while(temp==0);
  S2CON=S2CON&0XFD;
  IE2=0X01;
}

void UartISR2(void) interrupt 8
{
      unsigned char k=0;
   k=S2CON;
   k=k&0X01;
   if(k==1)
   {
         S2CON=S2CON&0XFE;
   if(Num>0)
   {
       BufBack[4-Num]=S2BUF;//
    Num--;
    }
   }
   else
   {
         S2CON=S2CON&0XFD;
   }
}


void main()
{
    UartInit();
 UartInit2();
 //接收电脑发来的数组
 while(Num>0);
 //把接收到的数组发给从机

 UartSendByte2(Buf[0]);
 UartSendByte2(Buf[1]);
 UartSendByte2(Buf[2]);
 UartSendByte2(Buf[3]);

 //接收从机回来的数据
 Num=4;
 while(Num>0);
 //把从机回来的数据发回给电脑 
 UartSendByte(BufBack[0]);
 UartSendByte(BufBack[1]);
 UartSendByte(BufBack[2]);
 UartSendByte(BufBack[3]);
    while(1);
}

关键字:STC12C5A16S2  双串口 引用地址:STC12C5A16S2双串口的使用

上一篇:stm8s时钟源切换
下一篇:单片机C程序的优化

推荐阅读最新更新时间:2024-03-16 15:11

STC单片机串口使用设置与例程
在用STC_60s2单片机进行双串口同时收发时,要注意一些容易配置错误的地方。AUXR寄存器有很多功能。在对其中的位置位和复位时,很可能在不同的地方多次进行,应该使用AUXR |= bitx 和AUXR &=~bitx 语句进行对某一位的置位和复位。这样就不会影响其他功能位了。 附上程序: #include STC12C5A60S2.h //sfr AUXR = 0x8E; #define uchar unsigned char// #define uint unsigned int // #define BUADRATE 38400 #define FOSC 24000000 #
[单片机]
STC12C5A60S2单片机串口通信
STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同;特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器,串口1可以使用定时器1作为波特率发生器,也可以使用独立波特率发生器作为波特率发生器;而串口2只能使用独立波特率发生器作为波特率发生器。 下面是一段双串口通信的程序: /*********************************************************************** 时间:2012.11.24 芯片:STC12C5A60S2 晶振:22.1184MHz 波特率:9600bps 引脚定义:串
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved