//--------------------------------------------------------------------------
// Copyright(c) 2012, Qin_Pin_Ele http://51mcu2008.taobao.com
//--------------------------------------------------------------------------
// 版权申明
// 本程序版权 属于 广西勤品电子科技 所有!
//任何个人或组织 在未经许可情况下,用于商业用途
//都将追究其法律责任!
// 勤品电子科技
// 2012年1月26日
//--------------------------------------------------------------------------
// File Name : UART.c
// Author : Qin_Pin_Ele
// Version : V0.01
// Date : 2012-1-26
// Description : 包括串行通信初始化等函数
// Changes : None
//--------------------------------------------------------------------------
#include <reg51.h>
#include "uart.h"
#include <stdio.h>
#define FOSC 11059200L
#define BAUD 9600 //Define baudrate :9600bps
#define T1_value -(FOSC/384/BAUD)
void UART_Init() //通讯有关参数初始化
{
PCON&=0x7f; //SMOD=0 波特率不加倍
TH1=T1_value; //定时器T1的初值:0XFD 波特率为:9600bps Fosc=11.0592MHz
TL1=T1_value;
TMOD=0x21; //T1:工作方式2,8位自动重装定时器
PS=1; //串行中断优先级设为高
EA=1; //开总中断
ET1=0; //关定时器1的中断,只用作波特率发生器
SM0=0;
SM1=1; //串行方式1
SM2=0; //不用多机通信,所以SM2=0
TR1=1; //启动T1
REN=1; //允许串行接收数据
RI=0; //清除串行接收标志位
TI=0; //清除串行发送标志位
ES=1; //允许串行中断
}
/*-------------------------------------------------------
函数名:send_string()
功能:用户函数,发送一个字符串
----------------------------------------------------------*/
void send_string_to_uart(char *char_point)
{
ES=0;
do
{
SBUF = *char_point++; //发送数据
while(!TI); //等待发送完成标志为1
TI =0; //标志清零
}while(*char_point); //保持循环直到字符为'\0'
SBUF ='\r'; //在发送的字符串后面加上回车和换行
while(!TI);
TI =0;
SBUF ='\n';
while(!TI);
TI =0;
ES=1;
}
/*-------------------------------------------------------
函数名:send_char_data()
功能:用户函数,把数据以字符形式发送(把数据转成字符)
----------------------------------------------------------*/
void send_data_to_uart(unsigned long int send_data)
{
static unsigned char variable_loop=0;
unsigned char xdata buf[30];
variable_loop++;
sprintf(buf,"The %3.0f byte data is:%3.0f",(float)variable_loop,(float)send_data);
send_string_to_uart(buf);
}