37
MODUL THU PHÁT RF Modul này cần sử dụng 2 chip vi điều khiển: 1 chip PIC 16F84 làm nhiệm vụ xử lý ở tay cầm điều khiển :đọc phím, mã hóa tín hiệu đưa ra mạch phát RF. 1 chip PIC 16F84 làm nhiệm vụ xử lý tín hiệu thu từ mạch thu RF: giải mã tín hiệu rồi truyền thông tin nối tiếp sang mạch trung tâm AVR. CHƯƠNG I: GIỚI THIỆU 1. Vi điều khiển 16F84A: Sơ đồ chân: Đặc tính nổi bật của bộ vi xử lý: + Tốc độ hoạt động lên tới 20 MHz. + 68 byes Ram + 64 byes EEPROM Khả năng của bộ vi xử lý: + Có thể hoạt động với thạch anh nội lên tới 8 MHz. + Truy nhập bộ nhớ trực tiếp hoặc gián tiếp. + Có 4 nguồn ngắt:

MODUL THU PHÁT RF

Embed Size (px)

DESCRIPTION

thu phat rfhfh

Citation preview

Page 1: MODUL THU PHÁT RF

MODUL THU PHÁT RF

Modul này cần sử dụng 2 chip vi điều khiển:

1 chip PIC 16F84 làm nhiệm vụ xử lý ở tay cầm điều khiển :đọc phím, mã hóa tín hiệu đưa ra mạch phát RF.

1 chip PIC 16F84 làm nhiệm vụ xử lý tín hiệu thu từ mạch thu RF: giải mã tín hiệu rồi truyền thông tin nối tiếp sang mạch trung tâm AVR.

CHƯƠNG I: GIỚI THIỆU

1. Vi điều khiển 16F84A:

Sơ đồ chân:

Đặc tính nổi bật của bộ vi xử lý:+ Tốc độ hoạt động lên tới 20 MHz.

+ 68 byes Ram

+ 64 byes EEPROM

Khả năng của bộ vi xử lý:+ Có thể hoạt động với thạch anh nội lên tới 8 MHz.

+ Truy nhập bộ nhớ trực tiếp hoặc gián tiếp.

+ Có 4 nguồn ngắt:

Ngắt ngoài chân RB0/INT

Tràn timer TMRO

PORTB <7:4> ngắt biến đổi

Page 2: MODUL THU PHÁT RF

Hoàn thành ghi dữ liệu EEPROM

+ Nguồn khởi động lại có mã chương trình bảo vệ.

Khả năng đặc biệt :+ Lưu trữ dữ liệu trong EEPROM trên 40 năm.

+ Bộ nhớ Flash có thể xóa/ghi 10,000 lần.

+ Bộ nhớ EEPROM có thể xóa/ghi 10,000,000 lần.

+ Xử lý đọc ghi tới bộ nhớ chương trình.

+ Chế độ ngủ của nguồn

Sơ đồ khối bộ vi diều khiển PIC16F84A:

2 . Modul thu phát RF

Page 3: MODUL THU PHÁT RF

Ở đây nhóm không đi sâu vào thiết kế modul RF mà sử dụng trực tiếp modul có bán trên thị trường. Các modul này đã được chế tạo với kích thước nhỏ gọn dễ sử dụng

a. Modul phát:

Modul phát truyền dữ liệu số chưa có thành phần mã hóa được thiết kế với 4 chân vào ra chính là:

+ Chân 1:VCC cấp nguồn 1 chiều 5V.

+ Chân 2: Data in : chân này đưa các tín hiệu 0, 1 vào đây (mức tín hiệu chuẩn của TTL là 0 : 0 vôn và 1 : 5 vôn ).

Khi đưa tín hiệu 0 vào chân data in thì mạch phát vẩn không có gì xảy ra, khi đưa tín hiệu 1 vào chân data in thì mạch phát được kích hoạt và phát sóng điện từ.

Cứ dưa xung lien tục 0, 1… vào chân data in khi đó mạch sẽ ngừng, phát, ngừng, phát …

Hình dưới đây mô tả việc sóng điện từ được phát thành “chùm hình sin” ngắt quãng khi đầu data in có các tín hiệu 0 và 1

+ Chân 3: GND nối đất.

+ Chân 4: ANT nối với anten phát (Ngoài trừ những module phát được chế tạo đặc biệt có anten đặt sẳn trên mạch) thì phải nối anten ngoài vào đểm này. Một module phát RF phải có anten thì mới có thể phát sóng ra xa ngoài không gian.

Page 4: MODUL THU PHÁT RF

b. Modul thuModul thu cấu tạo gồm các chân:

+ Chân 1:VCC nguồn nuôi 5V.

+ Chân 2: Data dữ liệu thu đưa ra.

+ Chân 3: GND nối đất.

+ Chân 4: GND nối đất.

+ Chân 5: ANT nối với anten thu.

Đặc điểm của module thu: bình thường khi cấp nguồn cho module thu thì đầu ra data out có mức 0, 1 ngẫu nhiên không xác định. Mức 0 hoặc 1 này do yếu tố môi trường tác động. Bởi thế khi lập trình giải mã cho các bộ thu thì ta không sử dụng ngắt để nhận ở đầu vào mà ta sẽ dung phương pháp hỏi vòng, loại trừ. Khi dung ngắt để nhận tín hiệu thì bị nhảy vào ngắt liên tục và kết quả chẳng nhận được cái gì.

Đây cũng là điểm khác biệt giữa module thu RF và module thu IR (hồng ngoại). tín hiệu từ module thu IR là rất sạch vì thế có thể dùng ngắt để nhận tín hiệu từ module IR còn RF thì không

Page 5: MODUL THU PHÁT RF

Đặc điểm của modul thu_phát:+Tần số hoạt động là: 315 MHz

+ Hoạt động ở mức TTL nên có thể kết nối trực tiếp với cổng vào/ra của vi điều khiển.

+Công suất tiêu thụ thấp

+ Khoảng cách truyền nhận tối đa: 300m(khi có anten)

+ Tốc độ truyền dữ liệu có thể đạt từ 300bps tới 100kbps.

+ Dải nhiệt độ hoạt động: -35o tới 80o.

CHƯƠNG II : GIẢI PHÁP ĐIỀU KHIỂN

2.1 Giới thiệu về mã Manchester

a. giới thiệu

Tại sao phải mã hóa/giải mã? Đó là câu hỏi đặt ra của rất nhiều người khi bắt đầu tiếp xúc với truyền thông, nhất lại là truyền thông không dây(wireless). Trong một mức nào đó, đa phần các tín hiệu truyền đi qua sóng vô tuyến(RF: radio frequency) đều phải được mã hóa để đảm bảo tính ổn định của thông tin. Một máy phát có mã hóa và máy thu có giải mã sẽ ít bị nhận sai dữ liệu hoặc cũng có thể sữa sai dữ liệu, khó bị can nhiễu hơn so với không mã hóa. Có rất nhiều kiễu mã hóa và giải mã, có thể mã hóa trực tiếp sóng mang như mã xung, mã pha, mã tần số, . . .hay cũng có thể mã hóa tín hiệu (dữ liệu) truyền đi.

Có rất nhiều kiểu thiết kế trong RF, có thể nhà sản xuất đã làm bộ mã hóa/giải mã trong các module đơn giản, bởi tính năng linh hoạt và việc cài một bộ mã hóa/giải mã mặc định vào sẽ đội giá thành lên cao (nhưng lại không đúng ý nghĩa của người ứng dụng) và như

Page 6: MODUL THU PHÁT RF

vậy việc ứng dụng phát triển các sản phẩm sẽ không được đẩy cao, tính sáng tạo sẽ mất đi, đôi khi tạo ra sự lãng phí không cần thiết.

Trong môi trường tự nhiên, có rất nhiều yếu tố ảnh hưởng đến tín hiệu từ máy phát truyền đến máy thu, máy thu rất dễ bị nhiễu vì ngoài môi trường không gian có rất nhiều nhiễu sóng điện từ, điện tích, các nguồn nhiễu phát sinh tác động vào máy thu và những dữ liệu ta thu được có thể bị sai vì nhiễu tác động.

Mã hóa Manchester là phương pháp mã hóa các bits dữ liệu sử dụng trong việc truyền các tín hiệu dạng số. Đây là phương pháp mã hóa các bit dữ liệu dạng 0, 1 thành các chuỗi tín hiệu có mức tín hiệu thay đổi liên tục dù bit dữ liệu là các dãy 0 hoặc 1 liên tiếp. Do đó, ưu đểm của mã hóa Manchester là dễ dàng tạo ra sự đồng bộ giữa bên phát và bên thu.

b.Ứng dụng

Đây là phương pháp được sử dụng rộng rãi trong lĩnh vực truyền thông vô tuyến, hữu tuyến, Ethernet . . .

Trong lĩnh vực truyền thông điều khiển sử dụng vi điều khiển, mã Manchester dễ hiện thực để lập trình cùng với khả năng phát hiện lỗi khi phát hiện có sự vi phạm mã.

2.2 Phương pháp mã hóa

Mã hóa Manchester là một phương pháp mã hóa các bit dữ liệu sử dụng trong

việc truyền các tín hiệu dạng số. Đây là phương pháp mã hóa các bit dữ liệu 1,0

Page 7: MODUL THU PHÁT RF

thành các chuổi tín hiệu có mức tín hiệu thay đổi liên tục dù dãy bit dữ liệu là 1 hoặc

0 liên tiếp. Do đó, ưu điểm của mã hóa Manchester là dễ dàng tạo sự tự đồng bộ

giữa bên phát và bên nhận.

Phương pháp mã hóa Manchester theo nguyên tắc sau:

Mỗi bit sẽ có khoảng thời gian truyền cố định.

Dữ liệu được xác định vào thời khoảng giữa của bit.

Mức 1 biễu diễn low – to – high, mức 0 biễu diễn high – to – low hoặc ngược lại tùy theo qui ước đảo mã Manchester.

Biễu diễn bằng cổng XOR

Mã hóa Manchester là kết quả XOR giữa dữ liệu và xung clock.

Khả năng tự đồng bộ:

Page 8: MODUL THU PHÁT RF

Các setup point đồng bộ.

Ví dụ mã hóa chuỗi 00110111011 đươc kết quả: 1010010110010101100101

2.3 Mach thu phát RF

a. Mạch phát RF

thường dùng là loại module phát OOK(ON/OFF keyring) và ASK(điều biên) để chuyển các tín hiệu dạng số 1 và 0 thành trạng thái có hoặc không có tín hiệu ở mạch thu.

Ăng ten phát làm tăng khả năng phát xa các tín hiệu ra môi trường. Được thiết kế hợp lý tương ứng với tần số đang hoạt động.

Sơ đồ nguyên lý mach phát:

Page 9: MODUL THU PHÁT RF

s w7

s w3

C 13 3

C 31 0 4

s w2

s w1

s w6

R 4R

E 1A N TE N N A

s w1 0

R 5R

R 2R

J 3

C O N 1 2

123456789

1 01 11 2

C 23 3

v c c

s w2

o s c 1

s w4

s w1 1R 1R

s w7

J 2

C O N 4

1234

s w1 2

s w3

s w9

sw11

Y 1

C R Y S TA L

s w1 2

d a t as w5

s w8

s w1 0

o s c 2

J 1

C O N 2

12

s w4

s w8

s w1

v c c

sw10

o s c 1

s w6

s w9

R 3R

s w1 1

s w5

g n d

sw9

o s c 2

sw12

d a t a

U 1

P I C 1 6 F 8 4

1 4

1 5

4

1 6

1 71 8

123

67891 01 11 21 3

V D D

O S C 2 / C L K O U T

M C L R

O S C 1 / C L K I N

R A 0R A 1R A 2R A 3R A 4 / TO C K I

R B 0 / I N TR B 1R B 2R B 3R B 4R B 5R B 6R B 7

b. Mạch thu RF

Sử dụng để thu lại các tín hiệu từ mạch phát, biến các trạng thái phát hoặc không phát thành dạng số 1 hoặc 0.

Nguyên tắc khi mạch thu rãnh không nhận dữ liệu từ mạch phát thì mạch vẩn có thể thu các tín hiệu nhiễu từ môi trường làm cho đầu ra của nó có những tín hiệu 1, 0 không xác định. Hoặc trong quá trình phát có một chuỗi dài bit 1 hoặc 0 liên tục.

Để loại bỏ nhiễu từ môi trường phía mạch phát cần phát một chuỗi tín hiệu trong một khoảng thời gian(tùy vào mạch thu, khoảng 25ms), trước khi chính thức phát dữ liệu, điều này sẽ đảm bảo mạch thu thu đúng dữ liệu từ phía mạch phát. Đây là bước cần thiết để chỉnh lại độ lợi(gain) cho bộ thu trước khi hoạt động.

Độ nhạy của mạch thu phụ thuộc rất nhiều vào ăngten

Page 10: MODUL THU PHÁT RF

Sơ đồ nguyên lý mạch thu:

d a t a

J 2

C O N 5

1 2 3 4 5

P V N 1

P I C 1 6 F 8 4 A

123

4

5

67891 01 11 21 3

1 4

1 5

1 6

1 71 8

R A 2R A 3R A 4 / T0 C K I

M C L R

V s s

R B 0 / I N TR B 1R B 2R B 3R B 4R B 5R B 6R B 7

V d d

O S C 2 / C L K O

O S C 1 / C L K I

R A 0R A 1

Y 1

C R Y S TA L

C 1 3 3 p

R 21 0 0 k

J 1

C O N 2

12

D 1 2

L E D

V C C

E 1A N TE N N A

V C C

V C C

R 11 0 0 R

J 4

C O N 4

1234

C 2

3 3 p

C 3

1 0 4

V C C

S W 1

S W TA C T-S P S T/ S M

d a t a

2.4 Lập trình mã hóa giải mã:

Code demo, sua lai tuy muc dich .

Code phát:

#include "D:\RF\trans_test84a.h"

#use delay(clock=4M)

// dinh nghia chan data

#define TX PIN_A1

Page 11: MODUL THU PHÁT RF

// dinh nghia dia chi mach thu

#define adr 0x02;

// dinh nghia cac phim bam

#DEFINE BUTTON1 input(PIN_B0)

#DEFINE BUTTON2 input(PIN_B1)

#DEFINE BUTTON3 input(PIN_B2)

#DEFINE BUTTON4 input(PIN_B3)

#DEFINE BUTTON5 input(PIN_B4)

#DEFINE BUTTON6 input(PIN_B5)

#DEFINE BUTTON7 input(PIN_B6)

#DEFINE BUTTON8 input(PIN_B7)

#DEFINE BUTTON9 input(PIN_A0)

#DEFINE BUTTON10 input(PIN_A2)

#DEFINE BUTTON11 input(PIN_A4)

#DEFINE BUTTON12 input(PIN_A3)

// khai bao bien

char buff[3],i;

INT b1=0;

Page 12: MODUL THU PHÁT RF

INT b2=0;

INT b3=0;

INT b4=0;

INT b5=0;

INT b6=0;

INT b7=0;

INT b8=0;

INT b9=0;

INT b10=0;

INT b11=0;

INT b12=0;

// chuong trinh con

void send_data(char*buff)

{

char i,j;

delay_cycles(1);//same a NOP

//---------------chuoi init-------------------

for(i=1;i<=35;i++)

{

output_high(TX);

delay_us(416);

output_low(TX);

delay_us(416);

Page 13: MODUL THU PHÁT RF

}

//--------------dong bo------------------

delay_us(416);

delay_us(416);

delay_us(416);

//---------------start bit---------------

output_high(TX);

delay_us(416);

output_low(TX);

delay_us(416);

//--------------send data--------------

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

{

for(i=0;i<8;i++)

{

if((buff[j] & 0x80)==0x80)

{

output_high(TX);

delay_us(416);

output_low(TX);

delay_us(416);

}

else

{

output_low(TX);

Page 14: MODUL THU PHÁT RF

delay_us(416);

output_high(TX);

delay_us(416);

}

buff[j]=buff[j]<<1;

}

}

//--------------stop bit--------------------

output_high(TX);

delay_us(416);

output_low(TX);

delay_us(416);

}

//----------------------------

void read_button1(char cmd)

{

if(BUTTON1==0)

{

do

{

buff[0]=adr;

buff[1]=cmd;

buff[2]=buff[0]^buff[1];

Page 15: MODUL THU PHÁT RF

send_data(buff);

}

while(!BUTTON1);

delay_us(20);

}

}

void read_button2(char cmd)

{

if(BUTTON2==0)

{

do

{

buff[0]=adr;

buff[1]=cmd;

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON2);

delay_us(20);

}

}

void read_button3(char cmd)

{

if(BUTTON3==0)

Page 16: MODUL THU PHÁT RF

{

do

{

buff[0]=adr;

buff[1]=cmd;

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON3);

delay_us(20);

}

}

void read_button4(char cmd)

{

if(BUTTON4==0)

{

do

{

buff[0]=adr;

buff[1]=cmd;

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON4);

delay_us(20);

Page 17: MODUL THU PHÁT RF

}

}

void read_button5(char cmd)

{

if(BUTTON5==0)

{

do

{

buff[0]=adr;

buff[1]=cmd;

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON5);

delay_us(20);

}

}

void read_button6(char cmd)

{

if(BUTTON6==0)

{

do

{

buff[0]=adr;

buff[1]=cmd;

Page 18: MODUL THU PHÁT RF

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON6);

delay_us(20);

}

}

void read_button7(char cmd)

{

if(BUTTON7==0)

{

do

{

buff[0]=adr;

buff[1]=cmd;

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON7);

delay_us(20);

}

}

void read_button8(char cmd)

{

if(BUTTON8==0)

Page 19: MODUL THU PHÁT RF

{

do

{

buff[0]=adr;

buff[1]=cmd;

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON8);

delay_us(20);

}

}

void read_button9(char cmd)

{

if(BUTTON9==0)

{

do

{

buff[0]=adr;

buff[1]=cmd;

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON9);

delay_us(20);

Page 20: MODUL THU PHÁT RF

}

}

void read_button10(char cmd)

{

if(BUTTON10==0)

{

do

{

buff[0]=adr;

buff[1]=cmd;

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON10);

delay_us(20);

}

}

void read_button11(char cmd)

{

if(BUTTON11==0)

{

do

{

buff[0]=adr;

buff[1]=cmd;

Page 21: MODUL THU PHÁT RF

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON11);

delay_us(20);

}

}

void read_button12(char cmd)

{

if(BUTTON12==0)

{

do

{

buff[0]=adr;

buff[1]=cmd;

buff[2]=buff[0]^buff[1];

send_data(buff);

}

while(!BUTTON12);

delay_us(20);

}

}

void main()

{

Page 22: MODUL THU PHÁT RF

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

// TODO: USER CODE!!

delay_us(5);

set_tris_b(0xff); // cac chan cua PORTB deu la dau vao

set_tris_a(0xfd); // PIN_A1(TX) la dau ra

output_low(TX);

port_b_pullups(true);

while(TRUE)

{

IF(BUTTON1==0)

{

if(b1==0)

{read_button1(0x01);b1=1;}

else

{read_button1(0x11);b1=0;}

}

IF(BUTTON2==0)

{

Page 23: MODUL THU PHÁT RF

if(b2==0)

{read_button2(0x02);b2=1;}

else

{read_button2(0x12);b2=0;}

}

IF(BUTTON3==0)

{

if(b3==0)

{read_button3(0x03);b3=1;}

else

{read_button3(0x13);b3=0;}

}

IF(BUTTON4==0)

{

if(b4==0)

{read_button4(0x04);b4=1;}

else

{read_button4(0x14);b4=0;}

}

IF(BUTTON5==0)

{

if(b5==0)

Page 24: MODUL THU PHÁT RF

{read_button5(0x05);b5=1;}

else

{read_button5(0x15);b5=0;}

}

IF(BUTTON6==0)

{

if(b6==0)

{read_button6(0x06);b6=1;}

else

{read_button6(0x16);b6=0;}

}

IF(BUTTON7==0)

{

if(b7==0)

{read_button7(0x07);b7=1;}

else

{read_button7(0x17);b7=0;}

}

IF(BUTTON8==0)

{

if(b8==0)

{read_button8(0x08);b8=1;}

Page 25: MODUL THU PHÁT RF

else

{read_button8(0x18);b8=0;}

}

IF(BUTTON9==0)

{

if(b9==0)

{read_button9(0x09);b9=1;}

else

{read_button9(0x19);b9=0;}

}

IF(BUTTON10==0)

{

if(b10==0)

{read_button10(0x10);b10=1;}

else

{read_button10(0x20);b10=0;}

}

IF(BUTTON11==0)

{

if(b11==0)

{read_button11(0x21);b11=1;}

else

Page 26: MODUL THU PHÁT RF

{read_button11(0x22);b11=0;}

}

IF(BUTTON12==0)

{

if(b12==0)

{read_button12(0x23);b12=1;}

else

{read_button12(0x24);b12=0;}

}

}

}

Code thu

#include "D:\RF\RECEIV 84A.h"

#use delay(clock=4M)

#define RX input(PIN_A0)

#define adr 0x02

char data[3];

Page 27: MODUL THU PHÁT RF

short rx_bit;

short get_data(char*buff);

void main()

{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

// TODO: USER CODE!!

set_tris_a(0x01);

set_tris_b(0);

output_a(0x00);

output_b(0x00);

port_b_pullups(TRUE);

while(TRUE)

{

while(get_data(data));

if((data[2])==(data[0]^data[1]))

{

if(data[0]==adr)

{

Page 28: MODUL THU PHÁT RF

//if(data[1]==0x00){output_b(0x00);output_low(PIN_A2);output_low(PIN_A3);}

if(data[1]==0x01){output_high(PIN_B0);}

else if(data[1]==0x02){output_high(PIN_B1);}

else if(data[1]==0x03){output_high(PIN_B2);}

else if(data[1]==0x04){output_high(PIN_B3);}

else if(data[1]==0x05){output_high(PIN_B4);}

else if(data[1]==0x06){output_high(PIN_B5);}

else if(data[1]==0x07){output_high(PIN_B6);}

else if(data[1]==0x08){output_high(PIN_B7);}

else if(data[1]==0x09){output_high(PIN_A2);}

else if(data[1]==0x10){output_high(PIN_A3);}

else if(data[1]==0x11){output_low(PIN_B0);}

else if(data[1]==0x12){output_low(PIN_B1);}

else if(data[1]==0x13){output_low(PIN_B2);}

else if(data[1]==0x14){output_low(PIN_B3);}

else if(data[1]==0x15){output_low(PIN_B4);}

else if(data[1]==0x16){output_low(PIN_B5);}

else if(data[1]==0x17){output_low(PIN_B6);}

else if(data[1]==0x18){output_low(PIN_B7);}

else if(data[1]==0x19){output_low(PIN_A2);}

else if(data[1]==0x20){output_low(PIN_A3);}

else if(data[1]==0x21){output_b(0xff);output_a(0xff);}

else if(data[1]==0x22){output_b(0x00);output_a(0x00);}

else if(data[1]==0x23){output_b(0xff);output_a(0x00);}

Page 29: MODUL THU PHÁT RF

else if(data[1]==0x24){output_b(0x00);output_a(0xff);}

}

}

}

}

short get_data(char*buff)

{

char i,j,time,count;

i=35;

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);

// chuoi 35 xung INit

while(--i)

{

delay_cycles(1);

delay_cycles(1);

delay_cycles(1);

while(RX);

set_rtcc(0);

delay_cycles(3);

while(!RX);

time=get_rtcc();

if(time==255)return 1;

Page 30: MODUL THU PHÁT RF

if((time>198)&&(time<218))

{

count++;

if((count>1)||(i==0))break;

}

}

if(i==0)return 1;

// bit start

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);

time=0;

while(!((time>=94)&&(time<=114)))

{

delay_cycles(3);

while(RX);

set_rtcc(0);

delay_cycles(4);

while(!RX);

time=get_rtcc();

}

while(RX);

delay_us(624);

// nhan 3 byte data

Page 31: MODUL THU PHÁT RF

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

{

i=8;

buff[j]=0;

while(i--)

{

buff[j]=buff[j]<<1;

rx_bit=RX;

buff[j]=buff[j]|rx_bit;

if(rx_bit==0)

while(!RX);

else

while(RX);

delay_us(624);

}

}

if(rx_bit==0)

if(!RX)return 1 ;

else

if(!RX)return 1;

return 0;

}

Page 32: MODUL THU PHÁT RF