串口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.zg4o1577.cn/mcu/3282.html