新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ATmega8---SPI總線控制

        ATmega8---SPI總線控制

        作者: 時間:2016-11-27 來源:網絡 收藏
        開發中對ATmega8外設SPI總線使用:
        在發送數據之前都處于從模式,處于接收狀態。在發送的時候,需要進入主模式,完成發送之后再進入從模式。
        以下為操作函數:

        interrupt [SPI_STC] void spi_interrupt(void)
        {
        //uchar tmp;
        uchar i,b;
        //tmp=SPSR;
        b=SPDR;
        r_buf[0]=r_buf[1];
        r_buf[1]=r_buf[2];
        r_buf[2]=r_buf[3];
        r_buf[3]=r_buf[4];
        r_buf[4]=r_buf[5];
        r_buf[5]=b;
        if((r_buf[0]==0xff)&&(r_buf[5]==0xaa))
        {
        r_full=1;
        r_data[0]=r_buf[0];
        r_data[1]=r_buf[1];
        r_data[2]=r_buf[2];
        r_data[3]=r_buf[3];
        r_data[4]=r_buf[4];
        r_data[5]=r_buf[5];
        }
        if(r_full)
        {
        r_full=0;
        if(r_data[1]!=99)return;
        switch(r_data[2])
        {
        case 3:
        case 0x31:
        if((r_data[4]>16)||(r_data[3]>16))return;
        if(r_data[3]==0)return;
        else if(r_data[4]==0)
        {
        for(i=0;i<16;i++)
        {
        tmp_ddc[i]=r_data[3];
        }
        }
        else
        {
        tmp_ddc[r_data[4]-1]=r_data[3];
        }
        break;
        default:
        break;
        }
        }
        }
        //-------------------------------------------------
        void spi_init_s() //在沒有通訊之前,處于從模式
        {
        DDRB.4=1;
        DDRB.2=0;
        PORTB.2=1;
        DDRB.3=0;
        DDRB.5=0;
        SPCR=0XC0;
        }
        void spi_init_m()
        {
        DDRB.4=0;
        DDRB.2=1;
        DDRB.3=1;
        DDRB.5=1;
        SPCR=0x52;
        SPSR=0X01;
        }
        //-------------------------------------
        void send_spi()
        {
        uchar i;
        while(PINB.2==0){;}
        spi_init_m();
        #asm("cli")
        PORTB.2=0;
        delay_ms(1);
        for(i=0;i<2;i++)
        {
        SPDR=video_new[i];
        #asm("wdr")
        while((SPSR&0X80)!=0X80);
        }
        delay_ms(10);
        PORTB.2=1;
        #asm("sei")
        spi_init_s();
        }



        關鍵詞: ATmega8SPI總線控

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 湖口县| 巴东县| 藁城市| 岳阳市| 朔州市| 宜兰县| 东阳市| 彭山县| 镇原县| 呼和浩特市| 合作市| 衡水市| 承德市| 正蓝旗| 洪洞县| 时尚| 阿城市| 青州市| 修武县| 清苑县| 玛曲县| 福建省| 夏津县| 柯坪县| 洪湖市| 万全县| 井研县| 松原市| 阿克苏市| 平邑县| 湾仔区| 东山县| 东莞市| 清原| 交城县| 九台市| 大丰市| 五大连池市| 阳江市| 平阴县| 新密市|