/*******************************************************
一般程序规则:
1.命名规则
函数以功能的英文全称命名,全部小写,不同单词之间用下画线边接,如: read_data();
自定义的常量用能表达清楚的英文简写,全部字母大写. 如:#define PI 3.14
全局变量用一个完整单词,首字母大写,其余小写如:Time
局部变量用小写字母如:temp
**********************************************************/
/*********************************************************
说明: 程序设计了几个与上位机接口函数,可以实现接收,发字符和字符串功能,
程序使用时,要在这个文件中设定bond,
此程序可以采用中断,也直接扫描.基本上不要进行改动
程序是参考网上一大侠的,在这特别感谢原创作者
留给上面程度的接口函数有:
1.串口初始化 uart_int()
//实现串口初始化功能,设置波特,串口工作方式,直接调用
2.发送一个字符函数 sent_char(unsigned char char1)
//将char字符送出
3.发送一串字符串函数 sent_string(unsigned char *string)
//将字符数组中的数据发送出去
4.接收字符函数 unsigned char receive_char()
//接收数据,并返回接收到的字符
5.串口路数处理程序 uart_interrupt()
//对串口接收操作进行处理,发送处理不放在中断中进行.
****************************************************************/
/***********************************************************
函数名称:uart_int()
函数功能:初始化串口,设置波特率\开中断\串口工作模式
入口参数:无
出口参数:无
***********************************************************/
void uart_int(void)
{
TMOD = 0x20;// 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xF3;// 波特率2400 公式:波特率=(1/n)*(振荡器频率/12*[256-TH1])
TL1 = 0xf3;
SCON = 0x50;// 设定串行口工作1方式;SCON的格式 |m0|m1|m2|REN|TB8|RB8|TI|RI
PCON&= 0xef;// 波特率不倍增最高位0/1 <=> 倍频带
ES = 1;//开串口中断描方式进行
EA = 1;//开总中断
//TB8=1;//设置发送的第9位
}
/***********************************************************
函数名称:send_char()
函数功能:从串口发送一个字符
入口参数:char
出口参数:无
***********************************************************/
void send_char(unsigned char char1)
{
SBUF = char1;
while(!TI);// 等特数据传送
TI = 0;// 清除数据传送标志
}
/***********************************************************
函数名称:send_string()
函数功能:从串口发送字符串
入口参数:无
出口参数:无
***********************************************************/
void send_string(unsigned char *string)
{
unsigned char i = 0;
while(string[i] != '\0')
{
SBUF = string[i];
while(!TI);// 等特数据传送
TI = 0;// 清除数据传送标志
i++;// 下一个字符
}
}
/***********************************************************
函数名称:receive_char()
函数功能:接收一个字符
入口参数:无
出口参数:无
***********************************************************/
unsigned char receive_char(void)
{
RI = 0;
return (SBUF);// 暂存接收到的数据
}
/***********************************************************
函数名称:uart_interrupt()
函数功能:中断处理函数
入口参数:无
出口参数:无
***********************************************************/
uart_interrupt()interrupt 4 using 0//串口中断处理程序
{
if(RI)//接引起的中断处理程序
{
send_char(receive_char());// 回传接收到的数据
RI=0;
}//发送完引起的中断不进行处理
}