智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12270|回复: 12
打印 上一主题 下一主题

[编程类] 懂飞思卡尔SPI的高手们帮帮我!!!

  [复制链接]

2

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
QQ
威望
195
贡献
30
兑换币
2
注册时间
2008-4-12
在线时间
8 小时
跳转到指定楼层
1#
发表于 2010-3-12 15:46:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
3贡献
哪位高手能给我提供SPI通信好使的程序,就是俩个S12型单片机之间用SPI(不是模拟SPI)传输数据,我自己编了一个单片机发数据(比如0xf0)到另一个单片机,然后用八个LED显示,但是就是不行,负责发数据单片机的SS管脚我接了VDD,另一个接受数据的单片机的SS 接了GND。不适用中断,我用的单片机型号是MC9S12DP512, DG128也行,就是想看看大手编好使的程序跟我有什么不同,拜托,懂飞思卡尔SPI的高手们帮帮我!!!!!

22

主题

518

帖子

0

精华

版主

Rank: 9Rank: 9Rank: 9

积分
6442
QQ
威望
943
贡献
5041
兑换币
99
注册时间
2008-2-26
在线时间
229 小时
2#
发表于 2010-3-12 16:18:45 | 只看该作者
给你个例子在中电论坛上找到的,我以前也是调了老半天才把spi调通,主要在端口设置上没有注意
*功能:使用SPI实现对74HC595的控制操作,实现L1-L8流水灯控制.
;系统晶振6MHz,SPI波特率为5KHz
*创建时间:2008-5-15
********************************************************/
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#include"Delay.h" //Delay function
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
uchar disp_tab[28]={0xFF,0,0xFF,0,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x40,0x20,
0x10,0x08,0x04,0x02,0x01,0x00,0x18,0x24,0x42,0x81,0x42,0x24, 0x18,0x00};/*显示数据*/
void SpiInit(void); //SPI初始化
void SpiTx(uchar dat); //SPI发送数据函数
void main(void) {
uchar i;
/* put your own code here */
EnableInterrupts;
DDRB_BIT0=1; //PB0输出
DDRM|=0x38; //SCK0=1,MOSI=1,SS0=1
MODRR_MODRR4=1; //使用PM口
PTM|=0x08;
SpiInit(); //SPI初始化
PTM&=0xF7; //初始化小灯,全亮
SpiTx(0);
PTM|=0x08;
// Delay_6M_s(1);
for(;;)
{
for(i=0;i<28;i++)
{
Delay_6M_ms(400); //延时400ms
PTM&=0xF7;
SpiTx(disp_tab);
Delay_6M_us(100);
PTM|=0x08;
}
} /* wait forever */
/* please make sure that you never leave this function */
}
/**********************SPI初始化************************/
void SpiInit()
{
//设置波特率,波特率=BUSCLK/Diviser;Diviser=(SPPR+1)*2^(SPR+1)
SPI0BR|=0x00; //Diviser=5*2=10,6M晶振下速率为3K
//控制寄存器,配置数据传输格式以及主从机模式
//不使能中断,数据最高位先发送,在时钟上升沿时保持不变,下降沿更新
SPI0CR1|=0x5E; //SPE=1,MSTR=1,CPOL=1,CPHA=1,SSOE=1
// SPI0CR2|=0x10; //使能模式错误
}
/**********************发射端数据*************************/
void SpiTx(uchar dat)
{
uchar k;
uchar temp;
temp=SPI0SR; //清除状态标志位
while(!SPI0SR_SPTEF)
{
k++;
Delay1_6M(0);
if(k>=100)
{
PORTB_BIT0=1; //9S12开发板上小灯亮,报警
return;
}
}//等待输出为空
k=0;
SPI0DR=dat;
while(!SPI0SR_SPIF)
{
k++;
Delay1_6M(0);
if(k>=100)
{
PORTB_BIT0=1; //9S12开发板上小灯亮,报警
return;
}
};//等待发送结束
}
回复

使用道具 举报

1

主题

53

帖子

0

精华

高级会员

Rank: 4

积分
521
威望
319
贡献
82
兑换币
26
注册时间
2008-10-19
在线时间
60 小时
3#
发表于 2010-5-4 14:25:05 | 只看该作者
ding~
回复

使用道具 举报

1

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
QQ
威望
277
贡献
22
兑换币
0
注册时间
2010-4-13
在线时间
4 小时
4#
发表于 2010-5-4 23:24:01 | 只看该作者
学习中
回复

使用道具 举报

4

主题

42

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
QQ
威望
295
贡献
88
兑换币
10
注册时间
2010-12-3
在线时间
11 小时
5#
发表于 2010-12-3 15:36:38 | 只看该作者
先回复再看贴
回复

使用道具 举报

4

主题

82

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1550
QQ
威望
333
贡献
1179
兑换币
0
注册时间
2009-12-28
在线时间
19 小时
6#
发表于 2011-4-3 15:35:56 | 只看该作者
欣赏中
回复

使用道具 举报

10

主题

119

帖子

0

精华

高级会员

。。。。

Rank: 4

积分
860
QQ
威望
515
贡献
169
兑换币
14
注册时间
2011-3-21
在线时间
88 小时
7#
发表于 2011-4-4 12:18:06 | 只看该作者
律动
回复

使用道具 举报

11

主题

61

帖子

0

精华

高级会员

Rank: 4

积分
592
QQ
威望
417
贡献
111
兑换币
0
注册时间
2011-2-24
在线时间
32 小时
8#
发表于 2011-8-13 08:05:34 | 只看该作者
呵呵,额又回来了,学习中!
回复

使用道具 举报

2

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
QQ
威望
182
贡献
35
兑换币
0
注册时间
2011-8-9
在线时间
5 小时
9#
发表于 2011-8-23 15:50:35 | 只看该作者
先回复,再看帖
回复

使用道具 举报

13

主题

183

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1141

热心会员奖章活跃会员奖章优秀会员奖章

威望
666
贡献
335
兑换币
143
注册时间
2011-4-2
在线时间
70 小时
10#
发表于 2011-8-25 19:58:11 | 只看该作者
回帖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-23 02:24 , Processed in 0.064285 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表