打印
[AVR单片机]

mega8 SPI通讯的问题?

[复制链接]
3453|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lhy_radio|  楼主 | 2008-4-14 21:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我自己写的SPI主机/从机程序,为什么就是不能接收到正确的数据呢~~~~~~

以下是我写的主机程序:
  DDRB |= (1<<PB2) | (1<<PB3) |(1<<PB5);//SS,MOSI,SCK设置为输出
  PORTB &= ~(1<<PB2);//SS清零
  SPCR = (1<<SPE) | (1<<MSTR) |(1<<SPR0) | (1<<SPR1);//主机,使能SPI

  SPDR = 0xff;//发送数据FF
    do
      {
      ;
      }while(!(SPSR & (1<<SPIF)));//等待数据发送结束
    
    PORTB |= (1<<PB2);//SS置位

以下是我写的从机程序:
  unsigned char PortStatus;
  DDRB = (1<<PB4);//MISO设置为输出
  SPCR = (1<<SPE);//SPI使能
  SPDR = 0x4f;
  
  while(!(SPSR & (1<<SPIF)))//等待数据接收完毕
    {
    ;
    }
  
  PortStatus = SPDR;
    
  if(PortStatus == 0xFF)
    {
     LCDPut("OK!");//LCD显示数据接收成功
    }
  else
    {
     LCDPut("Error!");//LCD显示数据接收错误
     }

我在Proteus中仿真,结果就是不对。
从机一直在没接收到数据----因为LCD什么都不显示,而去掉while(!(SPSR & (1<<SPIF)))一行后显示“Error”

我的分析:
1)开始我觉得可能是主机发送频率高,从机来不及响应,后来改了分频还是不行。
2)我把从机判断传输结束标志(以前是检测SPIF位)改为检测SS引脚(因为主机数据发送结束后SS引脚被拉高)是否被置位,LCD还是显示“Error”。此时如果把if(PortStatus == 0xFF)中“FF”改为“00”,则显示“OK!”
3)我用AVR Studio仿真,分别把主机程序和从机程序调入。发现主机发送数据时序正常,从机接收数据也正常----自己手动把SCK置位或清零,可以使SPIF置位,证明从机程序应该没问题。但为什么还是不能接收到数据呢?

各位高手帮我看看是什么问题?

相关帖子

沙发
NE5532| | 2008-4-15 20:15 | 只看该作者

不要相信软件仿真,直接上硬件。

使用特权

评论回复
板凳
dld2| | 2008-4-15 20:26 | 只看该作者

楼上的发言以后我要引用

“不要相信软件仿真,直接上硬件”

使用特权

评论回复
地板
lhy_radio|  楼主 | 2008-4-15 20:33 | 只看该作者

谢谢两位,NE5532和dld2,

选择用软件仿真只是想先看看程序能不能正常运行......
感觉软件仿真挺方便的,不用花钱买那么多器件......

使用特权

评论回复
5
NE5532| | 2008-4-15 21:06 | 只看该作者

学单片机是为了做产品出来,所以要上硬件实际测。

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
qin552011373 + 4 赞一个!
6
hq_y| | 2008-4-15 21:16 | 只看该作者

“不要相信软件仿真,直接上硬件”--呵呵

使用特权

评论回复
7
lhy_radio|  楼主 | 2008-4-15 21:21 | 只看该作者

觉得有这样的仿真软件挺好的...

如果不能反映真实,那我觉得就没什么用了.....
还是不能判定我的程序哪个地方出了问题......
5楼能不能帮我看看?先谢谢了

使用特权

评论回复
8
NE5532| | 2008-4-15 21:25 | 只看该作者

软件仿真对了,硬件不一定对。

搞单片机不像搞PC软件,不能在屏幕上看。硬件可以通过上、下拉电阻来强制读取00或FF,软件里面也可以这样试一下,不过不保证对。

使用特权

评论回复
9
lhy_radio|  楼主 | 2008-4-15 21:30 | 只看该作者

“软件仿真对了,硬件不一定对”反过来是否也成立?

"软件仿真错了,硬件不一定错"?
呵呵
我前几天写的一个驱动1602的程序,软件仿真正确,硬件就是有问题。
LCD1602就是不亮......

使用特权

评论回复
10
NE5532| | 2008-4-15 21:36 | 只看该作者

可以这样认为。

protus不是pspice,仿真的是行为而不是数学模型,我个人不太看好这个软件,凡单片机的东西都要落到实际。有兴趣可以看下我的博客。

使用特权

评论回复
11
lhy_radio|  楼主 | 2008-4-15 21:41 | 只看该作者

谢谢NE5532了....

有些时候只想学学单片机中某个资源怎么用,不想做硬件。
因为买那些电阻电容等等麻烦啊
东跑西跑人家还不想卖给你---因为量太少.......

使用特权

评论回复
12
NE5532| | 2008-4-15 21:42 | 只看该作者

LZ这个观点不是太好,因为搞硬件的诀窍就是多动手哈。

使用特权

评论回复
13
lhy_radio|  楼主 | 2008-4-15 21:48 | 只看该作者

NE5532博客字体特小,看不清楚啊.....

使用特权

评论回复
14
NE5532| | 2008-4-15 21:57 | 只看该作者

楼上是不是用的firefox?

那个要调一级字体,IE看起来应该是好的。

使用特权

评论回复
15
lhy_radio|  楼主 | 2008-4-15 21:59 | 只看该作者

哦,好了......

使用特权

评论回复
16
zhao3462910| | 2013-5-10 11:09 | 只看该作者
请问楼主。。你的是怎么好的、?什么问题。。我的也是这个问题。。调试好久了

使用特权

评论回复
17
qin552011373| | 2013-5-11 21:39 | 只看该作者
lhy_radio 发表于 2008-4-15 21:30
&quot;软件仿真错了,硬件不一定错&quot;?呵呵我前几天写的一个驱动1602的程序,软件仿真正确,硬件就是有问题。LCD16 ...

有可能是延时那部分的问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

162

帖子

1

粉丝