資源簡(jiǎn)介
本程序經(jīng)過高手大哥調(diào)試正確可用 下載就可直接使用 精度準(zhǔn)確

代碼片段和文件信息
#include?“reg51.h“
#include?“intrins.h“
typedef?unsigned?char?BYTE;
typedef?unsigned?int?WORD;
#define?UART_IDLE ???0
#define?UART_SND_BUSY??1
#define?UART_RCV_BUSY??1
#define?FOSC?11059200L
//緩沖區(qū)大小
#define?RECV_BUFFER_SIZE?5
//sbit?bit9?=?P2^2;
bit?busy;
//接收緩沖數(shù)據(jù)結(jié)構(gòu)
struct?RecvBuffer
{
BYTE?buffer[RECV_BUFFER_SIZE];//使用數(shù)組定義緩存大小
long?out;
long?in;
long?rbufCount;//緩存大小計(jì)數(shù)
};
struct?RecvBuffer?rbuf;
//--------------------------------------------------------
//發(fā)送程序
//--------------------------------------------------------
void?SendData(BYTE?dat)
{
while(busy?!=?UART_IDLE);
busy?=?UART_SND_BUSY;//清標(biāo)志位
SBUF?=?dat;
}
?//--------------------------------------------------------
?//初始化發(fā)送的數(shù)據(jù)
?//--------------------------------------------------------
//發(fā)送字符串
void?SendString(char?*s)
{
while(*s)
{
SendData(*s++);
}
}
//---------------------------------------------------------
//接收緩存區(qū)定義
//--------------------------------------------------------- ??
//uart接收數(shù)據(jù)緩沖區(qū)
void?rbuf_init(struct?RecvBuffer?*?rbuf);
long?rbuf_conten_size(struct?RecvBuffer?*?rbuf);
void?rbuf_clear(struct?RecvBuffer?*?rbuf);
void?delay(long?count);
//-----------------------------------------------------
//-----------------------------------------------------
//uart接收緩沖?初始化
void?rbuf_init(struct?RecvBuffer?*?rbuf)
{
rbuf_clear(rbuf);
}
//uart接收緩沖?清空緩沖
void?rbuf_clear(struct?RecvBuffer?*?rbuf)
{
rbuf->rbufCount?=?rbuf->out?=?rbuf->in?=?0;
}
//清空串口數(shù)據(jù)
void?uartFlash()
{
rbuf_clear(&rbuf);
}
//--------------------------------------------------------
//--------------------------------------------------------
//uart接收緩沖?獲取數(shù)據(jù)大小
long?rbuf_conten_size(struct?RecvBuffer?*?rbuf)
{
return?rbuf->rbufCount;
}
//----------------------------------------------------------------
//uart接收緩沖?從緩沖讀取
//----------------------------------------------------------------
long?rbuf_write_to_buf(struct?RecvBuffer?*?rbufBYTE?*?bufferlong?count)
{
//計(jì)算COPY的大小
long?i;
long?rbufCount?=?rbuf_conten_size(rbuf);//-----?
long?cpyCount;
?//rbuf沒有數(shù)據(jù)
?if(rbufCount?==?0)
?{
? return?0;
?}
?//不拷貝數(shù)據(jù)
?if(count?==?0)//count沒有賦初值?
?{
? return?0;
?}
//保證要拷貝的大小,不超過緩沖區(qū)
cpyCount?=?rbufCount?>?count??count?:?rbufCount;
for(i?=?0?;?i? {
//COPY?串口數(shù)據(jù)更新rbuf
buffer[i]?=?rbuf->buffer[rbuf->out];
? ++rbuf->out;
rbuf->out?=?rbuf->out?%??RECV_BUFFER_SIZE;
}
//
while(busy?==?UART_RCV_BUSY);
ES?=?0;
rbuf->rbufCount?-=?cpyCount;
ES?=?1;
return?cpyCount;
}
//---------------------------------------------------------
//串口初始化
//---------------------------------------------------------
void?uartInit(long?baud)
{
TMOD=?0x20;//定時(shí)器工作方式選擇
SCON=0x50;//串口工作方式選擇
TH1=?TL1?=?-(FOSC/12/32/baud);//裝載計(jì)數(shù)初值
TR1?=?1;//開啟定時(shí)器1
ES?=?1;
EA?=?1;
rbuf_init(&rbuf);
}
//----------------------------------------------------------
//接收
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4231??2012-11-24?19:02??光電編碼\51uart.c
?????文件????????604??2012-11-26?13:16??光電編碼\51uart.h
?????文件???????8878??2012-11-28?21:15??光電編碼\51uart.LST
?????文件??????10270??2012-11-28?21:15??光電編碼\51uart.OBJ
????.......?????50521??2012-11-24?17:10??光電編碼\guangdian.uvopt
????.......?????????0??2012-11-24?17:09??光電編碼\guangdian_uvproj.bak
?????文件???????3954??2012-11-28?21:15??光電編碼\HXA.c
?????文件??????16253??2012-11-28?21:15??光電編碼\光電編碼
?????文件???????3253??2012-11-28?20:56??光電編碼\光電編碼.c
?????文件???????5970??2012-11-28?21:15??光電編碼\光電編碼.hex
?????文件?????????48??2012-11-28?21:15??光電編碼\光電編碼.lnp
?????文件??????10417??2012-11-28?21:15??光電編碼\光電編碼.LST
?????文件??????20408??2012-11-28?21:15??光電編碼\光電編碼.M51
?????文件???????7674??2012-11-28?21:15??光電編碼\光電編碼.OBJ
?????文件????????169??2012-11-28?21:16??光電編碼\光電編碼.plg
????.......?????57310??2012-11-28?21:16??光電編碼\光電編碼.uvopt
????.......?????13413??2012-11-24?19:08??光電編碼\光電編碼.uvproj
????.......?????57306??2012-11-28?21:15??光電編碼\光電編碼_uvopt.bak
????.......?????13247??2012-11-24?17:09??光電編碼\光電編碼_uvproj.bak
?????目錄??????????0??2012-11-28?21:16??光電編碼
-----------?---------??----------?-----??----
???????????????283926????????????????????20
評(píng)論
共有 條評(píng)論