?? p2p_m.c
字號:
/* p2p_m.c */
/* 雙機點對點通信的主機部分 */
#ifndef __P2P_M_C__
#define __P2P_M_C__
#include <AT89X51.H>
#include <STRING.H>
#define __MAX_LEN_ 64 // 數據最大長度
#define _MHZ_ 11 // 設置單片機使用的晶振頻率(11.0592MHz)
/* 以下為程序協議中使用的握手信號 */
#define __RDY_ 0x06 // 主機開始通信時發送的呼叫信號
#define __BUSY_ 0x15 // 從機忙應答
#define __OK_ 0x00 // 從機準備好
#define __SUCC_ 0x0f // 數據傳送成功
#define __ERR_ 0xf0 // 數據傳送錯誤
void init_serial(); // 串口初始化
void send_data(unsigned char *buf); // 發送數據
void delay10ms(unsigned int count); // 延時子程序(10ms)
void main()
{
char buf[__MAX_LEN_];
unsigned char i = 0;
unsigned char tmp = __BUSY_;
/* 為緩沖區賦初值 */
P0 = 0xff;
while(P1 != 0) // 每隔100ms從P0口讀取,若讀取到0則表明數據采集結束
{
*(buf+i) = P0;
delay10ms(10); // 延時100ms
P0 = 0xff;
i++;
}
*(buf+i) = 0; // 緩沖區最后一個字節為0表示數據結束
/* 串口初始化 */
init_serial(); // 初始化串口
EA = 0; // 關閉所有中斷
/* 發送握手信號06H */
TI = 0;
SBUF = __RDY_;
while(!TI);
TI = 0;
/* 接收應答信息,如果接收的信號為00H,表示從機允許接收 */
while(tmp != __OK_)
{
RI = 0;
while(!RI);
tmp = SBUF;
RI = 0;
}
/* 發送數據并接收校驗信息,如果接收的信號為0FH,表示從機接收成功,否則將重新發送該組數據 */
tmp = __ERR_;
while(tmp != __SUCC_)
{
send_data(buf); // 發送數據
RI = 0;
while(!RI);
tmp = SBUF;
RI = 0;
}
while(1); // 程序結束,進入死循環
}
/* 初始化串口 */
void init_serial()
{
TMOD = 0x20; //定時器T1使用工作方式2
TH1 = 250; // 設置初值
TL1 = 250;
TR1 = 1; // 開始計時
PCON = 0x80; // SMOD = 1
SCON = 0x50; //工作方式1,波特率9600bps,允許接收
}
/* 發送數據 */
void send_data(unsigned char *buf)
{
unsigned char len; // 保存數據長度
unsigned char ecc; // 保存校驗字節
len = strlen(buf); // 計算要發送數據的長度
ecc = len; // 開始進行校驗字節計算
/* 發送數據長度 */
TI = 0;
SBUF = len; // 發送長度
while(!TI);
TI = 0;
/* 發送數據 */
for(i=0; i<len; i++)
{
ecc = ecc^(*buf); // 計算校驗字節
SBUF = *buf; // 發送數據
buf++;
while(!TI);
TI = 0;
}
/* 發送校驗字節 */
SBUF = ecc; // 發送校驗字節
while(!TI);
TI = 0;
}
/* 延時10ms,精度較低,參數count為延時時間 */
void delay10ms(unsigned int count)
{
unsigned int i, k;
unsigned char j;
unsigned int tmp;
tmp = (int)((100*_MHZ_)/12);
for(i=0; i<count; i++)
for(j=0; j<100; j++)
for(k=0; k<tmp; k++);
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -