|
我把我自己整理的串口發(fā)送的一些函數(shù)貼出來,你可以參考下
也可以復(fù)制下來直接調(diào)用里面的函數(shù),不同的波特率和晶振只需要改下UART.H里面兩個(gè)DEFINE后面的數(shù)字即可有注釋說明
//----------uart.c文件-------------------------------
//------------------------------------------------------
//-----------------------------------------------------
//****************************************************************************************
#include "uart.h"
char Uart_get_char;
void UartIsr() interrupt 4
{
RI = 0;
Uart_get_char = SBUF; //讀
}
void UartInit()
{
SCON = 0x50;
T2L = BRT; //波特率設(shè)置
T2H = BRT>>8;
AUXR = 0x15;
ES = 1;
EA = 1;
}
void UartSend(char dat) //送1個(gè)字節(jié)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void SendUint(unsigned int value) //送U16數(shù)據(jù)
{
unsigned char valueH = 0;
unsigned char valueL = 0;
valueL |= value;
valueH |= value >> 8;
UartSend(valueL);
UartSend(valueH);
}
void SendFloat(float_data* float_union) //送float數(shù)據(jù)
{
UartSend(float_union->byte[3]);
UartSend(float_union->byte[2]);
UartSend(float_union->byte[1]);
UartSend(float_union->byte[0]);
}
//***********************************************************************************************
//UART.H----------------------------------------------------------------
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
//***********************************************************************************************
#ifndef __UART_H_
#define __UART_H_
#include <stc8f.h>
#include <intrins.h>
typedef union //float公用體
{
float value;
unsigned char byte[4];
}float_data;
#define FOSC 11059200UL //晶振頻率
#define BRT (65536-FOSC/9600/4) //波特率設(shè)置
void UartInit();
void UartSend(char dat);
void SendUint(unsigned int value);
void UartSendStr(char *p);
void SendFloat(float_data* float_union);
#endif
//---------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//********************************************************************************************************
//這個(gè)是100K 3950熱敏電阻經(jīng)AD轉(zhuǎn)換發(fā)送到串口圖表軟件的程序段,運(yùn)行完全正常,你可以參考下
while(1)
{
ADC_number = Start_Adc(); //讀取AD口的電壓值
Ohms = ((float)ADC_number/(4096-(float)ADC_number))*1000; //將電壓值轉(zhuǎn)換成歐姆數(shù)
to_save_float.value = (1/(((log((float)Ohms/100000))/3950)+(1/298.15)))-273.15; //歐姆數(shù)轉(zhuǎn)攝氏度
SendFloat(&to_save_float); //串口發(fā)送溫度float變量
Delay100ms();
}
}
//**********************************************************************************************************
//STC8F.H可以用STC下載軟件里面的頭文件工具導(dǎo)出
|
|