串口1独立.c
//******************************(STC12串口1独立波特率发生器的应用)*****************************************
// 马梓熔
//***************************************************************************************
#include "STC12C5A.h"
#define uchar unsigned char
#define uint unsigned int
#define Buf_Max 40
uchar i;
uchar Rec_Buf[]={"hello! mazirong\n"};
//********************延时函数
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
//********************串口1初始化
void Serial_Iint()
{
SCON=0x50; //[bit6:5]SM1 SM2 = 1 0;[bit4]REN=1
AUXR=0x11; //[bit4]BRTR=1,允许独立波特率发生器运行;[bit0]SIBRS=1,独立波特率作为串口1的波特率发生器,此时定时器1释放
BRT=0XFD; //独特波特率发生器定时器(产生波特率9600)
EA=1;
ES=1;
}
//*******************发送一个字符
void Send_Char(uchar a)
{
ES=0;
SBUF=a;
delay(200);
while(!TI); //等待TI变为1
TI=0; //TI清0
ES=1;
}
//*******************发送一个字符串
void Send_String(uchar *tab)
{
ES=0;
while(*tab!='\0')
{
Send_Char(*tab++);
}
ES=1;
}
//********************主函数
void main()
{
while(1)
{
Serial_Iint();
delay(1000);
Send_String(Rec_Buf);
delay(1000);
}
}
//********************串口1中断函数
void Serial_Int() interrupt 4
{
ES=0; //关串口中断,防止中断的嵌套
if(TI) //如果是串口1发送中断(TI)不进行处理
{
TI=0; //TI清0
}
if(RI)
{
RI=0; //RI清0
Rec_Buf[i]=SBUF;
i++;
if(i>Buf_Max)
{
i=0;
}
}
ES=1; //开启串口中断
}
stc12c5a.h 这个头文件的下载地址:http://www.51hei.com/mcu/3282.html