搜索
bottom↓
回复: 14

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

[复制链接]

出0入0汤圆

发表于 2010-8-11 09:04:20 | 显示全部楼层 |阅读模式
傻孩子,正在看你们那本书,我用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);

}
}


(原文件名:ourdev_574008.png)

出0入296汤圆

发表于 2010-8-11 09:35:31 | 显示全部楼层
貌似应该是先设置数据再给上升沿吧?书里面不是有例子代码和电路么?

出0入0汤圆

 楼主| 发表于 2010-8-11 09:44:39 | 显示全部楼层
回复【1楼】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------

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

出0入0汤圆

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

同样你的程序,延时函数均注释掉,先送数据再置上升沿,Proteus仿真如下(没有595所以没搭实际电路,使用内部1M晶振):

(原文件名:搜狗截图.png)

出0入0汤圆

发表于 2010-8-11 14:03:15 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-8-11 14:05:59 | 显示全部楼层
回复【3楼】Swallow
-----------------------------------------------------------------------

难道是软件的原因?!

出0入0汤圆

 楼主| 发表于 2010-8-11 14:06:14 | 显示全部楼层
回复【3楼】Swallow
-----------------------------------------------------------------------

难道是软件的原因?!

出0入0汤圆

 楼主| 发表于 2010-8-11 14:07:30 | 显示全部楼层
回复【3楼】Swallow
-----------------------------------------------------------------------

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

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2010-8-11 16:35:46 | 显示全部楼层
回复【8楼】Swallow
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-8-11 17:34:33 | 显示全部楼层
回复【9楼】kaiy2006 幽若
回复【8楼】swallow  
-----------------------------------------------------------------------
哦,相当谢谢前辈哦!那我知道了,是我软件的原因了,我用的是7.5sp3,不能仿真74hc595,你用的是哪个版本的呢?
-----------------------------------------------------------------------

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

出0入0汤圆

 楼主| 发表于 2010-8-12 09:10:33 | 显示全部楼层
回复【10楼】Swallow
-----------------------------------------------------------------------
呵,这就是我给的程序嘛,现在应该知道了就是软件的原因,我用你这个工程文件打开后仿真仍然没有结果!你的真的是7.5SP3?
不过,还是要谢谢你!

出0入0汤圆

发表于 2010-12-9 20:30:45 | 显示全部楼层
xiexie 收下了

出0入0汤圆

发表于 2012-9-12 18:56:54 | 显示全部楼层
还没写好
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 15:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表