久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 單片機學習 > 單片機教程 > 單片機如何實現短距離的無(wu)線數據傳輸

單(dan)片機(ji)如(ru)何實現短距離的無(wu)線數(shu)據(ju)傳輸 時間:2018-07-26     ; 來(lai)源(yuan):未知

單片機如(ru)何實現短距離的(de)無線(xian)數據傳輸

 單片機(ji)如何實現短(duan)距(ju)離的(de)無(wu)線(xian)(xian)數據傳(chuan)輸(shu)?在一些(xie)特殊的(de)應用(yong)中,單片機(ji)通信不能使用(yong)有線(xian)(xian)數據傳(chuan)輸(shu),但需要短(duan)距(ju)離無(wu)線(xian)(xian)數據傳(chuan)輸(shu)。短(duan)距(ju)離無(wu)線(xian)(xian)傳(chuan)輸(shu)具(ju)有抗干擾能力強(qiang)、可靠性高、安(an)全性好、受地理條件限制少、安(an)裝(zhuang)靈活等(deng)優點。它(ta)可以利用(yong)單片機(ji)和專(zhuan)用(yong)無(wu)線(xian)(xian)傳(chuan)輸(shu)芯片實現簡單的(de)短(duan)距(ju)離無(wu)線(xian)(xian)傳(chuan)輸(shu)方案。硬件部(bu)分包括MCU端和PC端,實現單片機(ji)與PC機(ji)之間的(de)數據傳(chuan)輸(shu)。

主要器件:

1、 單(dan)(dan)片(pian)(pian)機端:AT89C52單(dan)(dan)片(pian)(pian)機芯片(pian)(pian),用于(yu)控制無線模塊的發(fa)射和(he)接受(shou);PTR2000無線數據傳輸模塊,使用了433MHz IGM頻(pin)段,是真正的單(dan)(dan)片(pian)(pian)UHF無線收發(fa)一體(ti)芯片(pian)(pian),可以(yi)和(he)單(dan)(dan)片(pian)(pian)機的串口直(zhi)接相連。

2、 PC端(duan):PTR2000無線數據傳輸模塊;TTL電平(ping)(ping)轉(zhuan)換RS-232電平(ping)(ping)芯片MAX202。

試驗流(liu)程電(dian)路圖:

單片機端:

PC端:

試(shi)驗程序(xu)代碼(ma):

//wireless.h程序

#ifndef _WIRELESS_H // 防止(zhi)wireless.h被重復(fu)引用(yong)

#define _WIRELESS_H

#include // 引(yin)用標準庫的(de)頭文件

#include

#define uchar unsigned char

#define uint unsigned int

#define REQ_SEND 0x33

#define REQ_RESEND 0x66

#define SEND_OVER 0x99

//為簡化起見(jian),假設了7位固定的(de)采集數(shu)據

#define DATA0 0x10

#define DATA1 0x20

#define DATA2 0x30

#define DATA3 0x40

#define DATA4 0x50

#define DATA5 0x60

#define DATA6 0x70

sbit TXEN = P2^0;

sbit CS = P2^1;

sbit PWR = P2^2;

void ClearT_buf(); // 清(qing)除t_buf函數

void ClearR_buf(); // 清除r_buf函數(shu)

void Delay5ms(); // 延(yan)時5ms

void GetData(); // 采集數(shu)據

void Send(); // 采集并(bing)發送函數

void SendOver(); // 通知(zhi)PC機(ji)發送結束(shu)函數

xdata uchar Flag_StartRec = 0 ; //開(kai)始接受數(shu)據標(biao)志位

xdata uchar Flag_ReqSend = 0 ; //請(qing)求發(fa)送標志位

 xdata uchar Flag_ReqReSend = 0 ; //請求重發標志(zhi)位

xdata uchar Flag_Delay5ms = 1 ; //延時(shi)5ms標志

xdata uchar Data[7]; //采集的7個字節(jie)數據

xdata uchar tCount = 0 ;

xdata uchar t_buf[11]; // 1開始字(zi)節"$",1長度字(zi)節LEN,

// 7字(zi)節數據,1校驗(yan)和字(zi)節,

// 1 結(jie)束字節"*"

xdata uchar rCount = 0 ;

xdata uchar r_buf[5]; // 1開始字(zi)節(jie)"$",1長度字(zi)節(jie)LEN,

// 1字(zi)節指(zhi)令,1校(xiao)驗(yan)和字(zi)節,

// 1 結束(shu)字節"*"

#endif

//wireless.c程序

#include "wireless.h"

/* 定時器0中(zhong)斷服務子程序 */

void timer() interrupt 1 using 2

{

Flag_Delay5ms = 0;

TH0 = -5000/256;

TL0 = -5000%256;

}

void main(void)

{

ClearT_buf();

ClearR_buf();

TXEN = 0; //初(chu)始為接收狀(zhuang)態

PWR = 1; //正(zheng)常工作模式

CS = 0; //選擇頻道0

EA=0;

/* 11.0592MHz下,設置串行口9600波(bo)特率,工作方式1

8位(wei)(wei)(wei)數據(ju)位(wei)(wei)(wei),1位(wei)(wei)(wei)停(ting)止位(wei)(wei)(wei),無奇偶校驗,*/

TMOD = 0x21; //定(ding)時器1工作模(mo)式1,定(ding)時器0工作模(mo)式2

SCON = 0x50; //串行(xing)口工作方式1,REN=1

PCON = 0x00; //SMOD=0

TL1 = 0xfd;

TH1 = 0xfd;

TR1=1; //定時器(qi)1開始計時

PT0 = 1; //定時(shi)器0高優先級

TH0 = -5000/256; //5ms

TL0 = -5000%256;

IE = 0x90; //EA=1,ES=1:打開串(chuan)口中斷

while (1)

{

if (Flag_ReqSend) //收(shou)到“請求發送”指(zhi)令

{

TXEN = 1; //改變為發射(she)狀態

Delay5ms(); //延時5ms

GetData(); //采集數據

Send(); //發送

Flag_ReqSend = 0;

SendOver(); //通(tong)知PC機發送結束

TXEN = 0; //重設(she)為接收(shou)狀態

}

 else if (Flag_ReqReSend) //收(shou)到“請求重發(fa)”指令

{

TXEN = 1; //改變為發(fa)射狀態

Delay5ms(); //延時5ms

Send(); //重發

Flag_ReqReSend = 0;

SendOver(); //通知PC機(ji)發送結(jie)束

TXEN = 0; //重設為接收(shou)狀(zhuang)態

}

}

}

接上篇程序:

/* 串(chuan)口中斷服務子程序 */

void serial ( ) interrupt 4 using 1

{

RI = 0 ;

/* 判斷(duan)是否收到字符'$',其數值為0x24,置開(kai)始接收標志位*/

if ((!Flag_StartRec) && (SBUF == 0x24))

{

Flag_StartRec = 1;

}

if (Flag_StartRec)

{

if (rCount <5)

{

r_buf[rCount] = SBUF;

rCount ++;

}

/* 判(pan)斷是否收(shou)到字符'*',其(qi)數值為0x2A,根據接(jie)收(shou)的指令設置相應標志位*/

if ((r_buf[rCount -1] == 0x2A)||(rCount == 5))

{

rCount = 0;

Flag_StartRec = 0;

if (r_buf[2] == REQ_SEND) //收到(dao)“請求發(fa)送&rdquo;指令

{

Flag_ReqSend = 1;

}

if (r_buf[2] == REQ_RESEND) //收(shou)到“請(qing)求重發”指令

{

Flag_ReqReSend = 1;

}

}

else

ClearR_buf();

}

}

void ClearT_buf(void)

{

uchar xdata k ;

for (k=0;k++;k<11)

{

t_buf[k] = 0;

}

}

void ClearR_buf(void)

{

uchar xdata k ;

for (k=0;k++;k<5)

{

r_buf[k] = 0;

}

}

void Delay5ms(void)

{

TR0=1;

ET0=1;

while( Flag_Delay5ms);

ET0 = 0;

TR0 = 0;

Flag_Delay5ms = 1;

}

//采(cai)集數據函數經過簡(jian)化處理,取(qu)固定的7個字節數據

void GetData(void)

{

Data[0]=DATA0;

Data[1]=DATA1;

Data[2]=DATA2;

Data[3]=DATA3;

Data[4]=DATA4;

Data[5]=DATA5;

Data[6]=DATA6;

}

//單片機端發送數(shu)據(ju)函數(shu)

void Send(void)

{

uchar xdata j = 0;

uchar xdata len = 0;

uchar xdata CheckSum = 0 ;

t_buf[0]=0x24; //起始位

t_buf[1]=0x07; //7個(ge)數據字節

len=t_buf[1];

CheckSum = CheckSum + len;

for ( j=0;j++;j

{

t_buf[j+2] = Data[j];

CheckSum = CheckSum + t_buf[j+2];

}

t_buf[9] = CheckSum; //校驗(yan)和字(zi)節(jie)

t_buf[10] = 0x2A; //停止位

for (j=0;j++;j<11)

{

TI =0 ;

SBUF = t_buf[j];

while ( TI ==0 );

TI =0 ;

}

}

//通知PC機端發送結束函數(shu)

void SendOver(void)

{

TI =0 ;

SBUF = 0x24;

while ( TI ==0 );

TI =0 ;

SBUF = 0x01;

while ( TI ==0 );

TI =0 ;

SBUF = SEND_OVER; //通(tong)知PC機端(duan)“發送結束”

while ( TI ==0 );

TI =0 ;

SBUF = 0x99; //校(xiao)驗和字節(jie)

while ( TI ==0 );

TI =0 ;

SBUF = 0x2A;

while ( TI ==0 );

TI =0 ;

}

上一篇:基于51單片機解碼紅外遙控器原理

下一篇:avr單片機教程,讓你快速學avr單片機

熱(re)點文(wen)章推(tui)薦
華清學員就業榜單
高薪學員經驗(yan)分(fen)享
熱點(dian)新(xin)聞推薦
前(qian)臺(tai)專線(xian):010-82525158 企業(ye)培訓洽談(tan)專線:010-82525379 院校合(he)作(zuo)洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部