专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

STC12单片机串口2的应用

作者:佚名   来源:本站原创   点击数:  更新时间:2014年04月10日   【字体:

心得:串口2只能使用“独立波特率发生器”作为波特率发生器;
     串口1可以用定时器1做波特率发生器,也可以选择“独立波特率发生器”作为波特率发生器。           

stc12c5a.h stc12的头文件从:http://www.51hei.com/mcu/3282.html 这里下载.

双串口.c
//******************************(STC12串口2应用)*****************************************
// 马梓熔
//2012-12-4
//***************************************************************************************
#include "STC12C5A.h"
#define uchar unsigned char
#define uint unsigned int
#define Buf_Max 40
uchar i;
uchar  Rec_Buf[]="hello! mazirong\n";    //uchar Rec_Buf[Buf_Max]; 这样写上位写什么 下位机接收什么,大大增加了灵活性
//********************延时函数
void delay(uint z)
{
 uint i,j;
 for(i=z;i>0;i--)
  for(j=110;j>0;j--);
}
//********************串口2初始化
void Serial_Iint()
{
 S2CON=0x50;  //S2SM0 S2SM1=0 1   S2REN=1 //串口2的工作方式1,接收位允许
 PCON=0x00;  //波特率不加倍
 AUXR=0x10;  //BRTR=1,允许独立波特率发生器运行
 BRT=0XFD;  //独特波特率发生器定时器
 EA=1;
 IE2=0x01;   //开串口2中断
}
//*******************发送一个字符
void Send_Char(uchar a)
{
 IE2=0x00;
 S2BUF=a;
 delay(200);
 while(!(S2CON&0x02)); //while(!S2TI) 等待S2TI变为1
 S2CON&=0xFD;   //S2TI清0
 IE2=0x01;
}
//*******************发送一个字符串
void Send_String(uchar *tab)
{
 IE2=0x00;
 while(*tab!='\0')
  {
   Send_Char(*tab++);
  }
 IE2=0x01;
}
//********************主函数
void main()
{
 while(1)
 {
  Serial_Iint();
  delay(1000);
  Send_String(Rec_Buf);
  delay(1000);
 }
}
//********************串口2中断函数
void Serial_2Int() interrupt 8
{
 IE2=0x00;         //关串口中断,防止中断的嵌套
 if(S2CON&0x02)      //如果是串口2发送中断(S2TI)不进行处理
  {
   S2CON&=0xFD;  //S2TI清0
  }
 if(S2CON&0x01)   
  {
   S2CON&=0xFE;  //S2RI清0
   Rec_Buf[i]=S2BUF;
   i++;
   if(i>Buf_Max)
    {
     i=0;
    }
  }
 IE2=0x01;         //开启串口中断
}

关闭窗口