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) 貌似应该是先设置数据再给上升沿吧?书里面不是有例子代码和电路么? 回复【1楼】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------
的确是应该先置数再给上升沿,但我改了也没用呢?输出也全成了低电平了!
书上那个程序有很大的问题,而且说“这个程序比较简单,就不多加分析了“,这只是个测试电路,模拟SPI的时序,所以也没有什么电路图!
真照书上那个一段程序是绝对不能仿真出来结果的!
所以在这儿向你请教,我这程序出在什么问题? 回复【2楼】kaiy2006 幽若
回复【1楼】gorgon meducer 傻孩子
-----------------------------------------------------------------------
的确是应该先置数再给上升沿,但我改了也没用呢?输出也全成了低电平了!
书上那个程序有很大的问题,而且说“这个程序比较简单,就不多加分析了“,这只是个测试电路,模拟spi的时序,所以也没有什么电路图!
真照书上那个一段程序是绝对不能仿真出来结果的!
所以在这儿向你请教,我这程序出在什么问题?
-----------------------------------------------------------------------
同样你的程序,延时函数均注释掉,先送数据再置上升沿,Proteus仿真如下(没有595所以没搭实际电路,使用内部1M晶振):
http://cache.amobbs.com/bbs_upload782111/files_32/ourdev_574316.png
(原文件名:搜狗截图.png) mark 回复【3楼】Swallow
-----------------------------------------------------------------------
难道是软件的原因?! 回复【3楼】Swallow
-----------------------------------------------------------------------
难道是软件的原因?! 回复【3楼】Swallow
-----------------------------------------------------------------------
我的程序也是实现全部点亮呀,你的也没全亮!·
请指点,谢谢! 回复【7楼】kaiy2006 幽若
回复【3楼】swallow
-----------------------------------------------------------------------
我的程序也是实现全部点亮呀,你的也没全亮!·
请指点,谢谢!
-----------------------------------------------------------------------
PC5初始化为高电平,然后 PORTC^=(1<<5);//串行数据由PC5口输入,即模拟MOSI
则输出的为0x55啊,就不应该全亮,如果要全亮PORTC |= (1<<5); 如果要全灭PORTC &=~(1<<5); 回复【8楼】Swallow
-----------------------------------------------------------------------
哦,相当谢谢前辈哦!那我知道了,是我软件的原因了,我用的是7.5SP3,不能仿真74HC595,你用的是哪个版本的呢? 回复【9楼】kaiy2006 幽若
回复【8楼】swallow
-----------------------------------------------------------------------
哦,相当谢谢前辈哦!那我知道了,是我软件的原因了,我用的是7.5sp3,不能仿真74hc595,你用的是哪个版本的呢?
-----------------------------------------------------------------------
晕!可不敢称前辈,我也是新手!我用的也是7.5SP3,下面是工程及仿真文件,最好以实际硬件为准,仿真软件仅能辅助调试,你试试!
点击此处下载 ourdev_574381.rar(文件大小:49K) (原文件名:595.rar) 回复【10楼】Swallow
-----------------------------------------------------------------------
呵,这就是我给的程序嘛,现在应该知道了就是软件的原因,我用你这个工程文件打开后仿真仍然没有结果!你的真的是7.5SP3?
不过,还是要谢谢你! xiexie 收下了 还没写好
页:
[1]