热门搜索 :
考研考公
您的当前位置:首页正文

mc9s12xs128的SPI通信的读写参考模板

来源:伴沃教育
#include

#include \"derivative.h\"

uchar table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

byte a;

void delay(word z) {

byte x,y;

for(z;z>0;z--)

for(x=110;x>0;x--)

//延时函数1 / 6

for(y=25;y>0;y--);

}

void crg_init(void) //总线时钟调整

{

CLKSEL=0; //bus=2*16M*(2+1)/(1+1)

PLLCTL_PLLON=1;

SYNR=0x00|0x01;

REFDV=0x80|0x01;

POSTDIV=0X00;

while(!(CRGFLG_LOCK)); //总线频率为24m

CLKSEL_PLLSEL=1;

}

void SPI_int(void) // SPI初始化

2 / 6

{

MODRR_MODRR4=1; //使用PM口

SPI0CR1=0x5e; //中断禁止 主机模式 时钟空闲为高 先发最高位

}

void init()

{

DDRB=0xff;

DDRM=0xff; //选择M口的接口 我做实验时犯的低级错误

}

void send_data(word data) //写一个字节

{

PTM_PTM3=0; //M口的第三引脚为低

SPI0DR=data; //将数据写入移位寄存器

3 / 6

while(!(SPI0SR&0x20)); //等数据发完

}

uchar read(void) //SPI读一个字节

{

while(!(SPI0SR_SPIF)); //检测传输是否完成

4 / 6

return SPI0DRL; //读数据并返回

while(SPI0SR_SPIF==0); //清除该位 为下次读数据做准备

}

void main(void)

{

init();

crg_init();

SPI_int();

EnableInterrupts;

for(;;)

{

a++;if(a==10)a=0;

// a=read();

send_data(a); //发送a的值

PORTB=table[a]; //在数码管上显示a的植

delay(1000); //延时1秒左右

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top