搜索
bottom↓
回复: 18

新鲜出炉--SPI 双机全双工通讯,源代码,仿真。(原创哈)

[复制链接]

出0入0汤圆

发表于 2009-10-12 01:57:07 | 显示全部楼层 |阅读模式
奋战到凌晨终于调通。
采用查询方式,双工通讯时,主机每发送完一个字节,就要拉高SS。否则,从机的发送结束标志不会置位。
就这个小小的问题搞了一晚。

(原文件名:123.jpg)

点击此处下载 ourdev_490582.rar(文件大小:17K) (原文件名:SPI双机双工通讯.rar)

//从机
#include <iom16v.h>
#include <macros.h>

void main()
{
unsigned char GH=0X45;
DDRC  = 0XFF;
PORTC=0X00;
// SS   PB4
// MOSI PB5
// MISO PB6
// SCK  PB7
PORTB=PORTB|0b11110000; //SCK MISO MOSI SS  使能上拉   

DDRB=DDRB&0b01001111;   // SCK  MOSI SS 置为输入

DDRB=DDRB|0b01000001;   // MISO 置为输出

  
// SS   PB4
// MOSI PB5
// MISO PB6
// SCK  PB7

SPCR =0b01000000;//不用中断,使能SPI,MSB首先发送,SPI置为从机模式,
                   //SCK空闲时为低,低电平采样,4分频
        SPSR = 0x00;


while(1)
{
SPDR=GH; //向发送缓冲区写数据
while(!(SPSR&(1<<SPIF))); //等待发送结束
PORTC=SPDR; //读取接收到的从机数据,并显示
GH++;
}
}



//主机
#include <iom16v.h>
#include <macros.h>

// SS   PB4
// MOSI PB5
// MISO PB6
// SCK  PB7

void main()
{
unsigned int XX;
unsigned char FF,GHJ;
CLI();
DDRA  = 0XFF;
DDRC  = 0XFF;


PORTB=PORTB|0b11110000; //SCK MISO MOSI SS  使能上拉   
DDRB=DDRB&0b10111111;   //MISO 置为输入
DDRB=DDRB|0b10110001;   //SCK  MOSI SS 置为输出

SPCR =0b01010000; //不用中断,使能SPI,MSB首先发送,SPI置为主机模式,
                   //SCK空闲时为低,低电平采样,4分频
SPSR = 0x00;      


while(1)
{
  PORTB=PORTB&0b11101111; //拉低从机SS准备通讯
  SPDR=GHJ;  //向缓冲区写数据以启动通讯
  while(!(SPSR&(1<<SPIF))); //等待发送结束
  PORTC=SPDR;  //读取接收到的从机数据,并显示

//为观察方便,延时。
for(XX=20000;XX!=0;XX--){}
for(XX=20000;XX!=0;XX--){}
for(XX=20000;XX!=0;XX--){}
  PORTB=PORTB|0b00010000; //拉高从机SS以同步数据,否则从机发送结束标志不会置位
  GHJ++;

}

}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2009-10-12 17:56:38 | 显示全部楼层
自个顶!!!

出0入0汤圆

发表于 2009-10-12 18:58:02 | 显示全部楼层
建议写成中断的,我帮你顶!

出0入0汤圆

 楼主| 发表于 2009-10-12 20:25:47 | 显示全部楼层
回二楼,
个人感觉。不一定全对。

双机通讯的话,这么快的速度,不用中断了吧。
进中断还要保护现场,出中断也要恢复现场。
中断一次只能接收一个字节。这样算起来的话,速度也不见得快多少。

出0入0汤圆

发表于 2009-12-12 15:14:31 | 显示全部楼层
顶起

出0入0汤圆

发表于 2009-12-12 17:30:45 | 显示全部楼层
支持一下

出0入0汤圆

发表于 2010-3-9 22:28:18 | 显示全部楼层
yunlong 飞翔
能不能帮小弟用中断写一个,我写了一个没有成功!想让各位大虾帮帮忙!!!!

出0入0汤圆

 楼主| 发表于 2010-3-10 17:57:18 | 显示全部楼层
【6楼】 huhuan521
如果 你以2分频的方式通讯的话,这么快的速度,不用中断了吧

出0入0汤圆

发表于 2010-3-10 18:12:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-10 21:51:37 | 显示全部楼层
回复【7楼】yunlong 飞翔
-----------------------------------------------------------------------

小弟是想学习一下中断这个功能,暂时还没有考虑速度的问题,呵呵!!!

出0入0汤圆

发表于 2010-3-11 18:05:24 | 显示全部楼层
我公司产品都是用3线通信,不要用你的ss信号

出0入0汤圆

发表于 2010-8-4 20:01:08 | 显示全部楼层
看不懂耶。。。。。。

出0入0汤圆

发表于 2010-8-4 22:19:32 | 显示全部楼层
MARK!~~

出0入0汤圆

发表于 2010-9-9 18:19:40 | 显示全部楼层
我可要好好研究一下子了。

出0入0汤圆

发表于 2012-11-6 16:25:23 | 显示全部楼层
这个支持一下了。
头像被屏蔽

出0入0汤圆

发表于 2012-11-6 16:26:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-11-12 08:12:20 来自手机 | 显示全部楼层
楼主好人一生平安

出0入0汤圆

发表于 2012-11-12 08:43:07 | 显示全部楼层
查询在时间上还是浪费了不少的。。。不过能够实现就是好作品。。。注意检查后期的bug

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 07:25

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

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