Thông báo

Collapse
No announcement yet.

Lỗi data overrun - received data is lost

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

  • Lỗi data overrun - received data is lost

    Chào mọi người!
    Em thực hiện giao tiếp SPI giữa các atmega32 giống như bài trên trang hocavr:
    Bài 7 - Giao tiếp SPI
    Em mô phỏng đã chạy trên protues, nhưng khi mô phỏng trong khoảng 1s đầu thì xuất hiện cảnh báo data overrun - received data is lost.

    Code em viết như sau:
    code của slave :
    #include <mega32.h>
    #include <lcd_4bit.h>
    #include <stdio.h>

    void SPI_slaveinit();
    unsigned char wdata=16, rdata;

    void main(void)
    {

    //define port for LCD
    PORTD=0xCF;
    DDRD=0xCF;
    PORTC=0x4F;
    DDRC=0x0F;

    SPI_slaveinit();
    delay_ms(60);
    init_LCD();
    wr_cmd_nibble(0x02);
    #asm("sei");
    while (1)
    {
    // Place your code here

    }
    }

    void SPI_slaveinit()
    {
    //define port for SPI
    PORTB=0xB0;
    DDRB=0x40;
    SPCR= 0xC2;
    }
    interrupt [SPI_STC] void spi_isr(void)
    {
    unsigned char dis[16];
    rdata=SPDR;
    wr_cmd_nibble(0x02);
    sprintf(dis,"%i",rdata);
    go_to_XY(1,1);
    wr_LCD_data(dis);
    }
    code của master:


    #include <mega32.h>
    #include <delay.h>
    unsigned char wdata[3]={0,80,160}, dis[];
    void SPI_masterinit();
    void SPI_transmit(unsigned char i, unsigned char data);
    #define slave0 PORTB.0
    #define slave1 PORTB.1
    #define slave2 PORTB.2
    void main(void)
    {

    //define port for SPI
    PORTB= 0xE7;
    DDRB= 0xA7;
    SPI_masterinit();
    delay_ms(100);
    while (1)
    {
    SPI_transmit(0,wdata[0]++);
    if(wdata[0]>80) wdata[0]=0;
    delay_ms(10);

    SPI_transmit(1,wdata[1]++);
    if(wdata[1]>160) wdata[1]=80;
    delay_ms(10);

    SPI_transmit(2,wdata[2]++);
    if(wdata[2]>240) wdata[2]=160;
    delay_ms(10);
    delay_ms(500);
    }
    }

    void SPI_masterinit()
    {
    SPCR=0xD2;
    }
    void SPI_transmit(unsigned char i, unsigned char data)
    {
    if(i==0) slave0= 0;
    if(i==1) slave1= 0;
    if(i==2) slave2= 0;
    delay_ms(10);
    SPDR= data;
    while(SPIF==0){};
    slave0= 1;
    slave1= 1;
    slave2= 1;
    }
    Xin mọi người xem thử mình code sai chỗ nào ạ!
    τ╩╦╚╔├─┬┘█┌╓├Khó quá thì bỏφ║║╩╔╦─Üúk

  • #2
    không có bạn nào quan tâm chủ đề này sao
    τ╩╦╚╔├─┬┘█┌╓├Khó quá thì bỏφ║║╩╔╦─Üúk

    Comment

    Về tác giả

    Collapse

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

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

    Collapse

    Đang tải...
    X