您的位置 首页 设计

ATmega8—SPI总线操控

开发中对ATmega8外设SPI总线使用:在发送数据之前都处于从模式,处于接收状态。在发送的时候,需要进入主模式,完成发送之后再进入从模式。

开发中对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();
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/257540.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部