Tư vấn: 0979.466.469 / 0938.128.290

MENU

Kết nối RFID với vi điều khiển 8051

Gia cong pcb 600*150px

Gắn kết RFID với vi điều khiển 8051.

RFID hoặc Radio Frequency Identification là một phương pháp sử dụng sóng điện từ để truyền dữ liệu với mục đích xác định các thẻ đính kèm vào các đối tượng. Hệ thống RFID bao gồm một bộ phát (thẻ) và một đầu đọc. Thẻ được mã hóa bằng một mã duy nhất và đầu đọc quét mã này để xác định đối tượng. Thẻ thường có hai loại: thẻ hoạt động và thẻ không hoạt động. Thẻ hoạt động có một pin sạc được gắn vào và nó truyền mã duy nhất định kỳ hoặc ở gần đầu đọc. Thẻ không hoạt động được cung cấp điện qua quá trình tổng hợp điện từ từ tín hiệu được truyền bởi đầu đọc. Các ứng dụng điển hình của RFID bao gồm hệ thống kiểm soát truy cập, thẻ ID, xác định con người, xác định động vật, hệ thống thanh toán, đánh dấu sách, thay thế mã vạch, đánh dấu hàng hóa trong cửa hàng, v.v. Thẻ RFID có sẵn trong nhiều hình dạng khác nhau, nhưng hình dạng phổ biến nhất là thẻ. Đầu đọc RFID có sẵn trên thị trường dưới dạng một mô-đun với tất cả các phần cứu trợ.

Bài viết này là về việc gắn kết mô-đun RFID với vi điều khiển 8051. Hình ảnh của một thẻ RFID tiêu biểu và đầu đọc cũng được hiển thị dưới đây.

Thẻ RFID

Thẻ RFID có sẵn trong nhiều kích thước và hình dạng khác nhau, và loại phổ biến nhất là được hiển thị ở trên. Hình ảnh của một mô-đun đầu đọc RFID tiêu biểu cũng được hiển thị ở trên. Cơ bản, nó bao gồm một bộ nhớ bán dẫn để lưu trữ mã ID duy nhất, mạch biến đổi và một cuộn dây. Cuộn dây hoạt động như nguồn điện thông qua tổng hợp điện từ trong tầm của đầu đọc và nó cũng hoạt động như anten để truyền tín hiệu ID. Mạch biến đổi biến đổi mã duy nhất thành sóng truyền. Đầu đọc cơ bản chứa một cuộn dây và mạch điện tử. Cuộn dây hoạt động như thiết bị kích thích cho thẻ và cũng là anten để nhận tín hiệu truyền bởi thẻ. Mạch điện tử giải mã tín hiệu này và chuyển nó thành một dạng phù hợp cho giai đoạn tiếp theo (vi điều khiển). Sơ đồ mạch để gắn kết mô-đun RFID với vi điều khiển 8051 được hiển thị ở dưới đây.

Sơ đồ mạch cho việc gắn kết mô-đun RFID với vi điều khiển 8051 được hiển thị ở trên. Mã ID duy nhất trên thẻ RFID được đọc bởi mạch và hiển thị trên màn hình LCD 16x2. Chân Tx của mô-đun RFID được kết nối với cổng 3.5 của vi điều khiển. Vi điều khiển nhận dữ liệu từ mô-đun RFID qua kênh này. Công tắc S1, tụ C1 và điện trở R1 tạo thành mạch đặt lại. Tụ C2, C3 và xtal X1 liên quan đến mạch đặt lại.

Program.

RS EQU P2.7                  //equates P2.7 to RS
RW EQU P2.6                  //equates P2.6 to RW
E  EQU P2.5                  //equates P2.5 to E
ORG 000H                     //origin
MOV TMOD,#00100001B          //Timer1=Mode2 timer & Timer0=Mode1 timer
MOV TH1,#253D                //loads TH1 with 253D(9600 baud)
MOV SCON,#50H                //sets serial port to Mode1 and receiver enabled
SETB TR1                     //starts Timer1

MAIN:ACALL DINT              //calls DINT subroutine
     ACALL TEXT1             //calls TEXT1 subroutine        
     ACALL LINE2             //calls LINE2 subroutine
     ACALL TEXT2             //calls TEXT2 subroutine
     ACALL READ              / /calls READ subroutine
     CLR REN                 //disables serial data receive
     ACALL LINE2             //calls LINE2 subroutine
     ACALL WRITE             //calls WRITE subroutine
     ACALL DELAY1            //calls DELAY1 subroutine
     SETB REN                //enables serial data receive
     SJMP MAIN               //jumps back to MAIN label

DELAY1:MOV R3,#46D           //loads R3 with 46D
BACK:  MOV TH0,#00000000B    //loads TH0 with all 0's 
       MOV TL0,#00000000B    //loads TL0 with all 0's
       SETB TR0              //starts Timer 0            
HERE1: JNB TF0,HERE1         //loops here until TFO flag is 1     
       CLR TR0               //stops TR1      
       CLR TF0               //clears TF0 flag
       DJNZ R3,BACK          //iterates the loop 46 times for 3s delay
       RET                   //returns from subroutine

READ:MOV R0,#12D             //loads R0 with 12D
     MOV R1,#160D            //loads R1 with 160D
WAIT:JNB RI,WAIT             //loops here until RI flag is set
     MOV A,SBUF              //moves SBUF to A         
     MOV @R1,A               //moves A to location pointed by R1
     CLR RI                  //clears RI flag
     DJNZ R0,WAIT            //iterates the loop 12 times
     RET                     //return from subroutine

WRITE:MOV R2,#12D            //loads R2 with 12D
      MOV R1,#160D           //loads R1 with 160D
BACK1:MOV A,@R1              //loads A with data pointed by R1
      ACALL DISPLAY          //calls DISPLAY subroutine
      INC R1                 //incremets R1
      DJNZ R2,BACK1          //iterates the loop 160 times
      RET                    //return from subroutine
      

TEXT1: MOV A,#52H            //loads A with ascii of "R"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#46H               //loads A with ascii of "F"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#49H               //loads A with ascii of "I"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#44H               //loads A with ascii of "D"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#20H               //loads A with ascii of "space"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#52H               //loads A with ascii of "R"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#45H               //loads A with ascii of "E"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#41H               //loads A with ascii of "A"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#44H               //loads A with ascii of "D"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#45H               //loads A with ascii of "E"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#52H               //loads A with ascii of "R"
    ACALL DISPLAY            //calls DISPLAY subroutine
    RET                      //returns from subroutine
     
TEXT2: MOV A,#53H            //loads A with ascii of "S"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#77H               //loads A with ascii of "w"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#69H               //loads A with ascii of "i"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#70H               //loads A with ascii of "p"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#65H               //loads A with ascii of "e"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#20H               //loads A with ascii of "space"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#63H               //loads A with ascii of "c"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#61H               //loads A with ascii of "a"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#72H               //loads A with ascii of "r"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#64H               //loads A with ascii of "d"
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#2EH               //loads A with ascii of "."
    ACALL DISPLAY            //calls DISPLAY subroutine
    MOV A,#2EH               //loads A with ascii of "."
    ACALL DISPLAY            //calls DISPLAY subroutine
    RET                      //return from subroutine

DINT:MOV A,#0FH              //display ON cursor blinking ON           
    ACALL CMD                //calls CMD subroutine
    MOV A,#01H               //clear display screen
    ACALL CMD                //calls CMD subroutine
    MOV A,#06H               //increment cursor
    ACALL CMD                //calls CMD subroutine
    MOV A,#83H               //cursor line 1 position 3
    ACALL CMD                //calls CMD subroutine
    MOV A,#3CH               //activate 2nd line
    ACALL CMD                //calls CMD subroutine 
    RET                      //return from subroutine

LINE2:MOV A,#0C0H            //force cursor to line 2 position 1
    ACALL CMD                //calls CMD subroutine
    RET                      //return from subroutine

CMD: MOV P0,A                //moves content of A to Port 0
    CLR RS                   //clears register select pin
    CLR RW                   //clears read/write pin
    SETB E                   //sets enable pin
    CLR E                    //clears enable pin
    ACALL DELAY              //calls DELAY subroutine
    RET                      //return from subroutine

DISPLAY:MOV P0,A             //moves content of A to Port 0
    SETB RS                  //sets register select pin
    CLR RW                   //clears read/write pin
    SETB E                   //sets enable pin
    CLR E                    //clears enable pin
    ACALL DELAY              //calls DELAY subroutine         
    RET                      //return from subroutine

DELAY: CLR E                 //clears enable pin
    CLR RS                   //clears register select pin
    SETB RW                  //clears read/write pin
    MOV P0,#0FFh             //moves all 0's to Port 0
    SETB E                   //sets enable pin
    MOV A,P0                 //moves Port 0 to A
    JB ACC.7,DELAY           //jumps back to label DELAY if ACC.7 is set
    CLR E                    //clears enable pin
    CLR RW                   //clears read/write pin
    RET                      //return from subroutine

    END                      //end statement

Về chương trình: Chương trình để kết nối RFID với vi điều khiển 8051 có thể chia thành bốn phần chính: cấu hình giao tiếp chuỗi, đọc thẻ RFID, truy xuất dữ liệu từ bộ nhớ và hiển thị nó trên màn hình LCD.

Quảng cáo đặt hàng nhập

Cấu hình Giao tiếp Chuỗi: Trong phần đầu của chương trình, ta thiết lập tốc độ baud và chế độ giao tiếp chuỗi. Tốc độ baud đại diện cho tốc độ trao đổi dữ liệu giữa hai hệ thống, và trong trường hợp này, nó được thiết lập là 9600. Tốc độ baud này được đạt bằng cách cấu hình Timer1 ở Mode 2 và nạp giá trị TH1 (Register Timer1 cao) bằng giá trị 253D. Công thức để xác định giá trị cần nạp vào TH1 cho một tốc độ baud cụ thể là TH1 = 256 - ((Crystal / 384) / Baud). Trong trường hợp này, sử dụng một tinh thể có tần số 11.052 MHz. Thay thế các giá trị này vào công thức trên, ta có TH1 = 256 - ((11.0592 MHz / 384) / 9600) = 253.

Đăng ký SCON được nạp giá trị 50H để thiết lập chế độ cổng chuỗi sang Mode1 và kích hoạt bộ thu chuỗi. Tất cả các thủ tục trên là yêu cầu tối thiểu để triển khai giao tiếp chuỗi trong vi điều khiển 8051.

Đọc thẻ RFID: Bước tiếp theo là đọc thẻ RFID. Đầu đọc RFID định kỳ phát sóng điện từ. Khi thẻ RFID ở gần đầu đọc, thẻ RFID sẽ thu sóng phát ra bởi đầu đọc và truyền mã ID duy nhất dưới dạng tín hiệu radio biến đổi. Đầu đọc thu sóng radio này, giải mã nó, chuyển đổi nó thành dạng mà vi điều khiển có thể nhận biết và đầu ra nó theo chuỗi trên chân Tx. Nói một cách đơn giản, đầu đọc phát ra mã ID duy nhất theo chuỗi mỗi khi thẻ RFID ở gần nó.

Thường thì mã RFID bao gồm 12 ký tự và vi điều khiển phải nhận nó mỗi khi đầu đọc truyền nó. Điều này được thực hiện bằng cách kiểm tra trạng thái của cờ RI trong đăng ký SCON. Dữ liệu được truyền đến vi điều khiển được nhận bởi đăng ký SBUF và quá trình này diễn ra tự động. Mỗi khi SBUF nhận một khối dữ liệu hoàn chỉnh, cờ RI được đặt lên. Do đó, mỗi khi RI được đặt lên, byte bên trong SBUF được chuyển vào thanh ghi A và sau đó chuyển vào một vị trí bộ nhớ được chỉ định bởi thanh ghi R1. Vị trí bộ nhớ ban đầu (160D) được nạp trước vào R1. Sau đó, R1 được tăng lên, cờ RI được xóa và toàn bộ bước được lặp lại 12 lần để nhận tất cả 12 ký tự.

Lấy và Hiển thị Mã ID Độc đáo: Phần tiếp theo là lấy từng ký tự riêng lẻ từ bộ nhớ và hiển thị nó lên màn hình LCD. Để làm điều này, địa chỉ của vị trí bộ nhớ của ký tự đầu tiên được nạp vào thanh ghi R1 và sau đó nó được chuyển vào bộ ghi (accumulator A) bằng lệnh MOV A,@R1. Sau đó, tiến trình hiển thị (DISPLAY subroutine) được gọi để hiển thị ký tự hiện tại trong A lên màn hình LCD. Toàn bộ quá trình được lặp lại 12 lần để lấy và hiển thị tất cả 12 ký tự của mã ID RFID độc đáo.

Nguồn cung cấp điện: Một nguồn cung cấp điện 5V/1A đơn giản có thể được sử dụng để cung cấp điện cho mạch này như được hiển thị dưới đây. Nguồn cung cấp điện này dựa trên biến áp 6V, bộ cầu nối sóng đầy đủ và một bộ ổn áp 7805.

Lưu ý: Giá trị của tinh thể X1 rất quan trọng trong mạch này. Giá trị của nó phải chính xác là 11.0952 hoặc bội số nguyên của nó. Bất kỳ giá trị nào khác sẽ cho kết quả không chính xác.

Gia công pcb 932*150
Sản phẩm nổi bật
Sale 0%
35000 /Cái
/ Cái

Code: 7201-001 Còn hàng

Lưu xem sau
Sale 0%
Liên hệ /Cái
/ Cái

Code: 7201-023 Còn hàng

Lưu xem sau
Sale 0%
15000 /Cái
/ Cái

Code: 7201-019 Còn hàng

Lưu xem sau
Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469
0868565469
0868565469

Hotline: 0979 466 469

Loading
0964238397
Bạn cần linh kiện mẫu ? 7-11 ngày