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

[复制链接]
4902|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循环里,不是何故,请高手指教。
完整程序见附件!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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;
..................
}




这样集中操作效率更高一点
 楼主| Adu0227 发表于 2010-10-26 22:28 | 显示全部楼层
初始状态SSPIF=0,不满足SSPIF != 0,第一次是不执行等待的。但是后面往SSPBUF里面赋值完成后需要等待发送完成SSPIF才会置1,紧随SSPBUF赋值完成就清零,应该没有用吧。几个周期之后发送完成SSPIF置1,那第二次回到上面等待可以发送的状态的循环里面岂不是要死循环了。
不解,期待高手指点。
软件仿真SSPIF始终没有置1,不知为何?
 楼主| Adu0227 发表于 2010-10-26 22:33 | 显示全部楼层
程序用另外的一个软件编译完成后,结果都已经实现了。可是用MPLAB和HI-TECH编译的结果却不能用。有点怀疑软件,可是总感觉没道理。
machunshui 发表于 2010-10-27 08:33 | 显示全部楼层
"软件仿真SSPIF始终没有置1,不知为何?"

软仿真好像不支持SPI外设吧???
 楼主| Adu0227 发表于 2010-10-27 08:52 | 显示全部楼层
那我编译后下载到板子也不行呀,楼上的能发给我一个SPI 的测试测序吗,我想找下原因!
E-mail:duwenlong0227@126.com
酒精考研 发表于 2010-10-29 19:25 | 显示全部楼层
珍爱生命,远离HI-TECH。

本人当年用HI-TECH用得想杀人。最后用汇编搞定的。
 楼主| Adu0227 发表于 2010-10-30 07:25 | 显示全部楼层
9# 酒精考研
 楼主| Adu0227 发表于 2010-10-30 07:27 | 显示全部楼层
那楼上的给推荐个编译器呗,我是刚刚开始玩PIC对这些还不是非常的了解。 9# 酒精考研
兰天白云 发表于 2010-10-30 08:29 | 显示全部楼层
用PICC,18系列单片机也可用MCC18
 楼主| Adu0227 发表于 2010-10-31 20:05 | 显示全部楼层
Thank you
shizaigaole 发表于 2010-11-1 08:12 | 显示全部楼层
珍爱生命,远离HI-TECH。

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



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

多找自己的原因.
alamo2009 发表于 2010-11-2 18:35 | 显示全部楼层
珍爱生命,远离HI-TECH。

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


典型的拉不出屎怪地球引力不够!!
x_yang 发表于 2010-12-30 11:45 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

254

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部