双串口.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; //开启串口中断
}