kaiy2006 发表于 2010-8-11 09:04:20

AVR中用PC口模拟SPI通信与74HC595……

傻孩子,正在看你们那本书,我用74HC595模拟AVR的SPI通信,那用PC口来模拟SPI总线时序,也即实现端口扩展,但是写的这个程序无法实现功能,也找不出问题了,所以发帖请帮忙,图见附件!
程序如下:(延时不用管,我是有的,只不过没在这儿贴上来而已)
#include <iom48v.h>
#include <macros.h>
#include "delay_us.h"
#define clk_high PORTC|=(1<<4) //PC4,串行移位脉冲
#define clk_low PORTC&=~(1<<4)
#define load_high PORTC|=(1<<3) //PC3,并行输出脉冲
#define load_low PORTC&=~(1<<3)
void main(void)
{
unsigned char i;
DDRC=0xff;
PORTC=0xff;
while(1)
{
load_low;//模拟#SS信号低电平
for(i=0;i<8;i++)
{
clk_low;?/模拟SCK信号的低电平
delay_us(100);
clk_high;//SCK信号高电平来,即一个上升沿脉冲,时钟脉冲
delay_us(100);
PORTC^=(1<<5);//串行数据由PC5口输入,即模拟MOSI
delay_us(200);
}
load_high;//#SS高电平来临,即开始送并行端口输出
delay_us(1000);

}
}

http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_574253.png
(原文件名:ourdev_574008.png)

Gorgon_Meducer 发表于 2010-8-11 09:35:31

貌似应该是先设置数据再给上升沿吧?书里面不是有例子代码和电路么?

kaiy2006 发表于 2010-8-11 09:44:39

回复【1楼】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------

的确是应该先置数再给上升沿,但我改了也没用呢?输出也全成了低电平了!
书上那个程序有很大的问题,而且说“这个程序比较简单,就不多加分析了“,这只是个测试电路,模拟SPI的时序,所以也没有什么电路图!
真照书上那个一段程序是绝对不能仿真出来结果的!
所以在这儿向你请教,我这程序出在什么问题?

Swallow 发表于 2010-8-11 13:25:10

回复【2楼】kaiy2006 幽若
回复【1楼】gorgon meducer 傻孩子
-----------------------------------------------------------------------
的确是应该先置数再给上升沿,但我改了也没用呢?输出也全成了低电平了!
书上那个程序有很大的问题,而且说“这个程序比较简单,就不多加分析了“,这只是个测试电路,模拟spi的时序,所以也没有什么电路图!
真照书上那个一段程序是绝对不能仿真出来结果的!
所以在这儿向你请教,我这程序出在什么问题?
-----------------------------------------------------------------------

同样你的程序,延时函数均注释掉,先送数据再置上升沿,Proteus仿真如下(没有595所以没搭实际电路,使用内部1M晶振):
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_574316.png
(原文件名:搜狗截图.png)

vipcff 发表于 2010-8-11 14:03:15

mark

kaiy2006 发表于 2010-8-11 14:05:59

回复【3楼】Swallow
-----------------------------------------------------------------------

难道是软件的原因?!

kaiy2006 发表于 2010-8-11 14:06:14

回复【3楼】Swallow
-----------------------------------------------------------------------

难道是软件的原因?!

kaiy2006 发表于 2010-8-11 14:07:30

回复【3楼】Swallow
-----------------------------------------------------------------------

我的程序也是实现全部点亮呀,你的也没全亮!·
请指点,谢谢!

Swallow 发表于 2010-8-11 14:46:10

回复【7楼】kaiy2006 幽若
回复【3楼】swallow
-----------------------------------------------------------------------
我的程序也是实现全部点亮呀,你的也没全亮!·
请指点,谢谢!
-----------------------------------------------------------------------
PC5初始化为高电平,然后 PORTC^=(1<<5);//串行数据由PC5口输入,即模拟MOSI   
则输出的为0x55啊,就不应该全亮,如果要全亮PORTC |= (1<<5); 如果要全灭PORTC &=~(1<<5);

kaiy2006 发表于 2010-8-11 16:35:46

回复【8楼】Swallow
-----------------------------------------------------------------------

哦,相当谢谢前辈哦!那我知道了,是我软件的原因了,我用的是7.5SP3,不能仿真74HC595,你用的是哪个版本的呢?

Swallow 发表于 2010-8-11 17:34:33

回复【9楼】kaiy2006 幽若
回复【8楼】swallow
-----------------------------------------------------------------------
哦,相当谢谢前辈哦!那我知道了,是我软件的原因了,我用的是7.5sp3,不能仿真74hc595,你用的是哪个版本的呢?
-----------------------------------------------------------------------

晕!可不敢称前辈,我也是新手!我用的也是7.5SP3,下面是工程及仿真文件,最好以实际硬件为准,仿真软件仅能辅助调试,你试试!
点击此处下载 ourdev_574381.rar(文件大小:49K) (原文件名:595.rar)

kaiy2006 发表于 2010-8-12 09:10:33

回复【10楼】Swallow
-----------------------------------------------------------------------
呵,这就是我给的程序嘛,现在应该知道了就是软件的原因,我用你这个工程文件打开后仿真仍然没有结果!你的真的是7.5SP3?
不过,还是要谢谢你!

jpajmx 发表于 2010-12-9 20:30:45

xiexie 收下了

作家先生 发表于 2012-9-12 18:56:54

还没写好
页: [1]
查看完整版本: AVR中用PC口模拟SPI通信与74HC595……