資源簡介
本程序經過高手大哥調試正確可用 下載就可直接使用 精度準確

代碼片段和文件信息
#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
//緩沖區大小
#define?RECV_BUFFER_SIZE?5
//sbit?bit9?=?P2^2;
bit?busy;
//接收緩沖數據結構
struct?RecvBuffer
{
BYTE?buffer[RECV_BUFFER_SIZE];//使用數組定義緩存大小
long?out;
long?in;
long?rbufCount;//緩存大小計數
};
struct?RecvBuffer?rbuf;
//--------------------------------------------------------
//發送程序
//--------------------------------------------------------
void?SendData(BYTE?dat)
{
while(busy?!=?UART_IDLE);
busy?=?UART_SND_BUSY;//清標志位
SBUF?=?dat;
}
?//--------------------------------------------------------
?//初始化發送的數據
?//--------------------------------------------------------
//發送字符串
void?SendString(char?*s)
{
while(*s)
{
SendData(*s++);
}
}
//---------------------------------------------------------
//接收緩存區定義
//--------------------------------------------------------- ??
//uart接收數據緩沖區
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;
}
//清空串口數據
void?uartFlash()
{
rbuf_clear(&rbuf);
}
//--------------------------------------------------------
//--------------------------------------------------------
//uart接收緩沖?獲取數據大小
long?rbuf_conten_size(struct?RecvBuffer?*?rbuf)
{
return?rbuf->rbufCount;
}
//----------------------------------------------------------------
//uart接收緩沖?從緩沖讀取
//----------------------------------------------------------------
long?rbuf_write_to_buf(struct?RecvBuffer?*?rbufBYTE?*?bufferlong?count)
{
//計算COPY的大小
long?i;
long?rbufCount?=?rbuf_conten_size(rbuf);//-----?
long?cpyCount;
?//rbuf沒有數據
?if(rbufCount?==?0)
?{
? return?0;
?}
?//不拷貝數據
?if(count?==?0)//count沒有賦初值?
?{
? return?0;
?}
//保證要拷貝的大小,不超過緩沖區
cpyCount?=?rbufCount?>?count??count?:?rbufCount;
for(i?=?0?;?i? {
//COPY?串口數據更新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;//定時器工作方式選擇
SCON=0x50;//串口工作方式選擇
TH1=?TL1?=?-(FOSC/12/32/baud);//裝載計數初值
TR1?=?1;//開啟定時器1
ES?=?1;
EA?=?1;
rbuf_init(&rbuf);
}
//----------------------------------------------------------
//接收
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????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
- 上一篇:ft3i0y.rar
- 下一篇:opencv 人數統計
評論
共有 條評論