单片机发送数据到mysql_单片机的串口接收和发送数据的程序编写

#include "config.h"

/******************************串口1的波特率********************************/

//T1作波特率发生器

//在波特率加倍情况下

#define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254 FF

#define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 254 FE

#define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 253 FD

#define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 252 FC

#define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 250 FA

#define SYS_Fosc 11059200L //晶振频率

uint32_t COMM_BAUD_RATE=9600 ; //串口波特率

#define OSC_FREQ 11059200 //11059200

static INT8U Send_buf[10] = {0} ;

static INT8U Recv_buf[10] = {0} ;

static INT8U SendDataLen = 0 ;

static INT8U ResendDataLen = 0 ;

/************************************************************************

函 数 名: 串口初始化

功能描述: STC10L08XE 单片机串口初始化函数

返回函数: none

其他说明: none

**************************************************************************/

void UartIni(void)

{

TMOD = 0x20; // 设置 T1 为波特率发生器

SCON = 0x50; // 0101,0000 8位数据位, 无奇偶校验

PCON = 0x00; //PCON=0;

TH1=256-(SYS_Fosc/COMM_BAUD_RATE/32/12);//设置为9600波特率

TL1=256-(SYS_Fosc/COMM_BAUD_RATE/32/12);

TR1 = 1; //定时器1打开

REN = 1; //串口1接收使能

ES = 1; //串口1中断使能

EA = 1;

}

//串口接受函数初始化1

void UartIni1(void)

{

SCON = 0x50; //8-bit variable UART

TMOD = 0x20; //Set Timer1 as 8-bit auto reload mode

TH1 = TL1 = -(SYS_Fosc/12/32/COMM_BAUD_RATE); //Set auto-reload vaule

TR1 = 1; //Timer1 start run

ES = 1; //Enable UART interrupt

EA = 1; //Open master interrupt switch

}

/***********************************************************

* 名 称:

* 功 能:

* 入口参数: 无

* 出口参数:无

* 说 明:

**********************************************************/

void Uart_Isr() interrupt 4 using 1

{

if(RI)

{

}

}

/************************************************************************

功能描述: 串口发送一字节数据 sbuf=data

接受 data=sbuf

入口参数:DAT:带发送的数据

返 回 值: none

其他说明:none

**************************************************************************/

void Uart_PutByte(uint8_t DAT)

{

ES = 0;

TI=0;

DAT=SBUF ;

while(TI==0);

TI=0;

ES = 1;

}

///*****************************************************************************************************

// - 功能描述: 串口接受一帧数据

// - 隶属模块: 内部

// - 参数说明:

// - 返回说明:

// - 注:无

//*****************************************************************************************************/

void SendCmd(INT8U len )

{

INT8U i = 0 ;

for(i=0; i

{

Uart_PutByte(Send_buf[i]) ;

}

}

///********************************************************************************************

// - 功能描述:求和校验

// - 隶属模块:

// - 参数说明:

// - 返回说明:

// - 注: 和校验的思路如下

// 发送的指令,去掉起始和结束。将中间的6个字节进行累加,最后取反码

// 接收端就将接收到的一帧数据,去掉起始和结束。将中间的数据累加,再加上接收到的校验

// 字节。刚好为0.这样就代表接收到的数据完全正确。

//********************************************************************************************/

void DoSum( INT8U *Str, INT8U len)

{

INT16U xorsum = 0;

INT8U i;

for(i=0; i

{

xorsum = xorsum + Str[i];

}

xorsum = 0 -xorsum;

*(Str+i) = (INT8U)(xorsum >>8);

*(Str+i+1) = (INT8U)(xorsum & 0x00ff);

}

///********************************************************************************************

// - 功能描述: 串口向外发送命令[包括控制和查询]

// - 隶属模块: 外部

// - 参数说明: CMD:表示控制指令,请查阅指令表,还包括查询的相关指令

// feedback:是否需要应答[0:不需要应答,1:需要应答]

// data:传送的参数

// - 返回说明:

// - 注:

//********************************************************************************************/

void Uart_SendCMD(INT8U CMD ,INT8U feedback , INT16U dat)

{

Send_buf[0] = 0xff; //保留字节

Send_buf[1] = 0x06; //长度

Send_buf[2] = CMD; //控制指令

Send_buf[3] = feedback;//是否需要反馈

Send_buf[4] = (INT8U)(dat >> 8);//datah

Send_buf[5] = (INT8U)(dat); //datal

DoSum(&Send_buf[0],6); //校验

SendCmd(8); //发送此帧数据

}

/************************************************************************

功能描述: 串口发送字符串数据

入口参数: *DAT:字符串指针

返 回 值: none

其他说明: API 供外部使用,直观!

**************************************************************************/

void PrintCom(uint8_t *DAT)

{

while(*DAT)

{

Uart_PutByte(*DAT++);

}

}

/************************************************************************

功能描述: 串口发送字符串数据 直接发送 hex 文件 0x0f

等价于 0f

入口参数: *DAT:字符串指针

返 回 值: none

其他说明: API 供外部使用,直观!

**************************************************************************/

void PrintCom1(uint8_t *DAT)

{

int i;

for(i=0;i<12;i++)

{

Uart_PutByte(*DAT++); //Uart_PutByte 串口发送一字节数据 sbuf=data

}

}

你可能感兴趣的:(单片机发送数据到mysql)