Thông báo

Collapse
No announcement yet.

Hỏi về giao tiếp RC522 với at89!

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Hỏi về giao tiếp RC522 với at89!

    Minh giao tiếp RC522 với 8051 qua UART
    mô phỏng thì ok còn thực tế thì ko như ý muốn
    mong ae giúp đỡ.

    #include <REGX51.H>
    unsigned char x;

    #define LCD_D4 P0_4
    #define LCD_D5 P0_5
    #define LCD_D6 P0_6
    #define LCD_D7 P0_7
    #define LINE_1 0x80
    #define LINE_2 0xC0
    #define CLEAR_LCD 0x01
    #define LCD_RS P2_0
    #define LCD_RW P2_1
    #define LCD_E P2_2
    unsigned char card_id[12];
    unsigned char current_byte = 0;
    //unsigned int a[12];

    //-----------------------------------------------
    void delay_ms(unsigned int Time)
    {
    unsigned int i,j,t;
    t=Time;
    for(i=0;i<t;i++)
    {
    for(j=0;j<125;j++);
    }
    }
    void delay_us(unsigned int Time)
    {
    unsigned int i,j;
    for(i=0;i<Time;i++)
    {
    for(j=0;j<2;j++);
    }
    }
    void delay(unsigned int count) //if count = 1000 --> delay 1s (milisecond)
    {
    int i,j;
    for(i=0;i<count;i++)
    for(j=0;j<1275;j++);
    }

    //-------------------------------------------------------------------------------------------
    void lcd1602_enable(void)
    {
    LCD_E=1;
    delay_us(3);
    LCD_E=0;
    delay_us(5);
    }
    // ---------------------------------
    // Ham Gui 4 Bit Du Lieu Ra LCD
    void lcd1602_send_4bit_data ( unsigned char cX )
    {
    LCD_D4 = cX & 0x01;
    LCD_D5 = (cX>>1)&1;
    LCD_D6 = (cX>>2)&1;
    LCD_D7 = (cX>>3)&1;
    }

    // ------------------------
    // Ham Gui 1 Lenh Cho LCD
    void lcd1602_send_command (unsigned char cX )
    {
    lcd1602_send_4bit_data ( cX >>4 ); // send 4 bit high
    lcd1602_enable() ;
    lcd1602_send_4bit_data ( cX ); // send 4 bit low
    lcd1602_enable() ;
    }

    // -------------------------
    // Ham Khoi Tao LCD
    void lcd1602_init ( void )
    {
    lcd1602_send_4bit_data ( 0x00 );
    delay_ms(200);

    LCD_RS=0;
    LCD_RW=0;
    LCD_E=0; // che do gui lenh

    lcd1602_send_4bit_data ( 0x03 ); // ket noi 8 bit
    lcd1602_enable() ;
    lcd1602_enable () ;
    lcd1602_enable () ;
    lcd1602_send_4bit_data ( 0x02 ); // ket noi 4 bit
    lcd1602_enable() ;

    lcd1602_send_command( 0x2C ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5x8
    lcd1602_send_command( 0x80);
    lcd1602_send_command( 0x0C); // cho phep hien thi man hinh
    lcd1602_send_command( 0x06 ); // tang ID, khong dich khung hinh
    lcd1602_send_command( CLEAR_LCD ); // xoa toan bo khung hinh
    }

    // --------------------------------------------------
    // Ham Thiet Lap Vi Tri Con Tro
    void lcd1602_gotoxy(unsigned char x, unsigned char y)
    {
    unsigned char address;
    if(!y)
    address = (LINE_1+x);
    else
    address = (LINE_2+x);
    delay_ms(3);
    lcd1602_send_command(address);
    delay_ms(1);
    }

    // --------------------------------------------------
    // Ham Xoa Man Hinh LCD
    void lcd1602_clear(void)
    {
    lcd1602_send_command( CLEAR_LCD );
    //delay_us(300);
    }

    // --------------------------------------------------
    // Ham Gui 1 Ky Tu Len LCD
    void lcd1602_putchar ( unsigned int cX )
    {
    LCD_RS=1;
    lcd1602_send_command( cX );
    LCD_RS=0;
    }

    // --------------------------------------------------
    // Ham Gui 1 Chuoi Ky Tu Len LCD
    void lcd1602_puts(char *s)
    {
    while (*s)
    {
    lcd1602_putchar(*s);
    s++;
    }
    }
    //----------------------------------------------------------------------------------------------------

    void recieve() interrupt 4 // ngat truyen thông
    {
    card_id[current_byte]=SBUF;
    RI=0; // reset co RI
    current_byte++;
    }

    void main()
    {
    P2_7 = 0;
    TMOD=0x20; //Enable Timer 1
    TH1=0XFD;
    SCON=0x50;
    TR1=1;
    EA=1;
    ES=1;

    P1 = 0;
    lcd1602_init();
    lcd1602_clear();
    lcd1602_gotoxy(0,0);
    lcd1602_puts("Card ID:");
    lcd1602_gotoxy(0,1);

    while(1)
    {
    if(current_byte==12)
    {
    P2_7=1;
    lcd1602_gotoxy(0,1);
    for(x=0;x<12;x++)
    {
    lcd1602_putchar(card_id[x]);
    P1 = card_id[x];
    delay_ms(500);
    }
    break;
    }
    }
    }

    https://www.youtube.com/watch?v=Tb3YgvCbBxA
    |

  • #2
    Nguyên văn bởi quangminh Xem bài viết
    Minh giao tiếp RC522 với 8051 qua UART
    mô phỏng thì ok còn thực tế thì ko như ý muốn
    mong ae giúp đỡ.



    Không như ý muốn như thế nào ? Bác nói thế ai mà biết "thực tế" là thế nào.

    Chia cái "không như ý muốn" ra từng phần nhỏ rồi sửa từng phần nhỏ đó.

    Nếu chưa rành lập trình, thì cho chớp từng cái đèn một thôi. Sau đó hãy cho chớp hết.

    Comment


    • #3
      chào bác. không như ý muốn:
      1. phải cắm vào rút ra chân Tx mấy lần thì mới thấy xuất dữ liệu
      2. cùng 1 thẻ nhưng xuất dữ liệu ra khác nhau.
      mong bác giúp đỡ
      |

      Comment


      • #4
        Bạn mua card chuyển RC522 sang Uart về để làm nha. Chứ bản thân giao tiếp RC522 qua chuẩn SpI rất rờm rà.
        http://dientuungdung.com/mach-chuyen...2-sang-uart

        Email:
        Tel: 0983.497.310

        Comment

        Về tác giả

        Collapse

        quangminh Tìm hiểu thêm về quangminh

        Bài viết mới nhất

        Collapse

        Đang tải...
        X