首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教MC9S08AW32使用SPI时发送器空标志一直为1,清不掉怎么办?

请教MC9S08AW32使用SPI时发送器空标志一直为1,清不掉怎么办?

PTED = 0;
PTEDD = 0;
PTED_PTED4 = 1;//外接74HC165和74HC595
PTEDD = 0b11010000;//PE口的4/6/7使能输出,其它口不变
SPI1S;
SPI1D;
SPI1BR = 0x35;//大概50KHz
SPI1C2 = 0x00;
SPI1C1 = 0x10;
SPI1C1_SPE = 1;
for(;;)
{
if(SPI1S_SPTEF)
{
SPI1S;
SPI1D = SendData;
SPI1S; //如果这句不加,2次后SPI1S_SPTEF就一直为0,再也不能输出。
delay(2);//这里应该是while(!SPI1S_SPTEF),但加了上一句后,
//SPI1S_SPTEF一直为1,所以用delay 0.2ms
}

if(SPI1S_SPRF)
{
SPI1S;
SPI1D;
}
}//end

本人第一次接触SPI,是不是哪里写的不对啊?

[此贴子已经被作者于2007-7-24 15:57:58编辑过]

上面的程序结果是SPTEF一直为1.

我是说如果不加红色那句,进入这个判断两次后,SPTEF就一直为0了。再也进不来了。
谢谢strongchen,帮看下。http://bbs.chinaecnet.com/uploadImages/test-spi-aw.rar
谢谢.请问用硬件仿真可以单步执行吗,因为我用硬件单步时,结果SPIS_SPTEF还是一直为1.
可是我用AW32硬件仿真没看到清零,数据可以用示波器看到已经输出了.

去掉delay(2);
换成 while(!SPI1S_SPTEF) __RESET_WATCHDOG();后,SPI1S的变化就是A0和20,没见过为零.

请问您用的是GP32吧,能不能用GT32或AW32试下啊,这两种差不多,GP的差好多啊.
谢谢,我是怕接收数据时有问题.我还没查看收数据,有问题再向您请教.
"实际上SPTEF并不是发送完成标志,而是发送缓冲空标志。"
那这个片子没有移位结束标志,我怎样判断8位移位结束呢?因为我要在移位结束后给74HC595一个信号,告诉它可以输出到显示了。

还是移位结束后单片机才会执行下一条语句?还是我自己要加个延时?
明白了,谢谢!
返回列表