專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

STC12單片機串口2的應用

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年04月10日   【字體:

心得:串口2只能使用“獨立波特率發(fā)生器”作為波特率發(fā)生器;
     串口1可以用定時器1做波特率發(fā)生器,也可以選擇“獨立波特率發(fā)生器”作為波特率發(fā)生器。           

stc12c5a.h stc12的頭文件從:http://www.torrancerestoration.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]; 這樣寫上位寫什么 下位機接收什么,大大增加了靈活性
//********************延時函數(shù)
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,允許獨立波特率發(fā)生器運行
 BRT=0XFD;  //獨特波特率發(fā)生器定時器
 EA=1;
 IE2=0x01;   //開串口2中斷
}
//*******************發(fā)送一個字符
void Send_Char(uchar a)
{
 IE2=0x00;
 S2BUF=a;
 delay(200);
 while(!(S2CON&0x02)); //while(!S2TI) 等待S2TI變?yōu)?
 S2CON&=0xFD;   //S2TI清0
 IE2=0x01;
}
//*******************發(fā)送一個字符串
void Send_String(uchar *tab)
{
 IE2=0x00;
 while(*tab!='\0')
  {
   Send_Char(*tab++);
  }
 IE2=0x01;
}
//********************主函數(shù)
void main()
{
 while(1)
 {
  Serial_Iint();
  delay(1000);
  Send_String(Rec_Buf);
  delay(1000);
 }
}
//********************串口2中斷函數(shù)
void Serial_2Int() interrupt 8
{
 IE2=0x00;         //關串口中斷,防止中斷的嵌套
 if(S2CON&0x02)      //如果是串口2發(fā)送中斷(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;         //開啟串口中斷
}

關閉窗口