打印

求助关于PIC16F877A的SPI数据发送标志位判断问题

[复制链接]
3682|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Adu0227|  楼主 | 2010-10-25 18:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题目,具体相关程序如下
void init()
{
  asm("CLRWDT"); //清零看门狗  
  ADCON1=0X06; //通道都改为数字模式
OPTION=0x8f; //禁止端口B弱上拉,选择内部时钟源,预分频器分给看门狗
  TRISC=0X00;  //端口C配置为输出模式
  PORTC=0x00;  //初始化端口C为0x00
}

//初始化SPI端口
void spi_init()
{
SSPCON=0X31;//高电平空闲、打开串口、主控方式f/16
SMP=1;
CKE=1;//时钟下降沿发送数据
SSPIF=0;  //清零spi标志位
SSPIE=0;  //禁止使能spi中断允许位
}

//写一个字节
void write_word(uchar date,uchar d_c)
{
uchar date_unuse;
sce=0;
dc=d_c;
date_unuse=SSPBUF;
asm("NOP");
asm("NOP");
SSPBUF=date;
do
{
   asm("CLRWDT");
}while(SSPIF==0);//等待发送完毕
SSPIF=0;
dc=1;
sce=1;
sdin=1;
}

问题是:在调用到write_word函数发送数据时,总是无法判断到SSPIF是1,也就是程序死在了那个while循环里,不是何故,请高手指教。
完整程序见附件!

display_bmp.rar

152.38 KB

沙发
Adu0227|  楼主 | 2010-10-25 18:18 | 只看该作者
这个程序让我郁闷多时了,希望能够得到高手的指教,我的联系方式如下:
E-mail:duwenlong0227@126.com
    QQ:563436625

使用特权

评论回复
板凳
machunshui| | 2010-10-26 14:08 | 只看该作者
void write_word(uchar date,uchar d_c)
{
sce=0;
dc=d_c;
while(SSPIF != 0) //等待数据可以发送
{
asm("CLRWDT");
}
SSPBUF=date;
SSPIF=0;
dc=1;
sce=1;
sdin=1;
}

这样试试

使用特权

评论回复
地板
machunshui| | 2010-10-26 14:11 | 只看该作者
实际上,
void write_word(uchar *pData,uchar len)

          uchar i;
         for(i = 0 i < len; i++)
{
.....................
while(SSPIF != 0) //等待数据可以发送
{
asm("CLRWDT");
}
SSPBUF= *(pData+i);
SSPIF=0;
..................
}




这样集中操作效率更高一点

使用特权

评论回复
5
Adu0227|  楼主 | 2010-10-26 22:28 | 只看该作者
初始状态SSPIF=0,不满足SSPIF != 0,第一次是不执行等待的。但是后面往SSPBUF里面赋值完成后需要等待发送完成SSPIF才会置1,紧随SSPBUF赋值完成就清零,应该没有用吧。几个周期之后发送完成SSPIF置1,那第二次回到上面等待可以发送的状态的循环里面岂不是要死循环了。
不解,期待高手指点。
软件仿真SSPIF始终没有置1,不知为何?

使用特权

评论回复
6
Adu0227|  楼主 | 2010-10-26 22:33 | 只看该作者
程序用另外的一个软件编译完成后,结果都已经实现了。可是用MPLAB和HI-TECH编译的结果却不能用。有点怀疑软件,可是总感觉没道理。

使用特权

评论回复
7
machunshui| | 2010-10-27 08:33 | 只看该作者
"软件仿真SSPIF始终没有置1,不知为何?"

软仿真好像不支持SPI外设吧???

使用特权

评论回复
8
Adu0227|  楼主 | 2010-10-27 08:52 | 只看该作者
那我编译后下载到板子也不行呀,楼上的能发给我一个SPI 的测试测序吗,我想找下原因!
E-mail:duwenlong0227@126.com

使用特权

评论回复
9
酒精考研| | 2010-10-29 19:25 | 只看该作者
珍爱生命,远离HI-TECH。

本人当年用HI-TECH用得想杀人。最后用汇编搞定的。

使用特权

评论回复
10
Adu0227|  楼主 | 2010-10-30 07:25 | 只看该作者
9# 酒精考研

使用特权

评论回复
11
Adu0227|  楼主 | 2010-10-30 07:27 | 只看该作者
那楼上的给推荐个编译器呗,我是刚刚开始玩PIC对这些还不是非常的了解。 9# 酒精考研

使用特权

评论回复
12
兰天白云| | 2010-10-30 08:29 | 只看该作者
用PICC,18系列单片机也可用MCC18

使用特权

评论回复
13
Adu0227|  楼主 | 2010-10-31 20:05 | 只看该作者
Thank you

使用特权

评论回复
14
shizaigaole| | 2010-11-1 08:12 | 只看该作者
珍爱生命,远离HI-TECH。

本人当年用HI-TECH用得想杀人。最后用汇编搞定的。
酒精考研 发表于 2010-10-29 19:25



不会吧???
咱用HI-TECH连SPI从模式都搞的定,何况主模式?

多找自己的原因.

使用特权

评论回复
15
alamo2009| | 2010-11-2 18:35 | 只看该作者
珍爱生命,远离HI-TECH。

本人当年用HI-TECH用得想杀人。最后用汇编搞定的。
酒精考研 发表于 2010-10-29 19:25


典型的拉不出屎怪地球引力不够!!

使用特权

评论回复
16
x_yang| | 2010-12-30 11:45 | 只看该作者
:)

使用特权

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

本版积分规则

7

主题

254

帖子

2

粉丝