[Atmel] 用AtmelStudio6.2跑mega16例程(23) SPI通讯

[复制链接]
1151|2
 楼主| ddllxxrr 发表于 2014-9-29 20:46 | 显示全部楼层 |阅读模式
用两个Atmega16的单片机进行SPI通讯。收到神么就在C管脚显示什么

以下是proteus的截图:虽然数码管接的不对但管脚可以看出数据是正确的



主机程序:
  1. /*
  2. * GccApplication5.c
  3. *
  4. * Created: 2014-9-29 19:46:18
  5. *  Author: Administrator
  6. */
  7. #include <avr/io.h>
  8. #define DD_SS 4  //ss
  9. #define DD_MOSI 5 //MOSI
  10. #define DD_SCK 7 //SCK

  11. void SPI_MasterInit()
  12. {
  13.     DDRB = (1<<DD_SS)|(1<<DD_MOSI)|(1<<DD_SCK);  //设置ss,mosi,sck引脚下
  14.         SPCR = (1<<SPE)|(1<<SPR0)|(1<<MSTR);  //enable SPI, mast, fosc/16       
  15. }
  16. unsigned char SPI_MasterTransmit(char data)
  17. {
  18.      SPDR = data;
  19.          while(!(SPSR&(1<<SPIF))); //等行发送完
  20.          return SPDR;       
  21. }

  22. int main()
  23. {
  24.    unsigned char data;
  25.    unsigned char i=0x88;
  26.    SPI_MasterInit();
  27.    while(1)
  28.    {
  29.           
  30.    
  31.    data=SPI_MasterTransmit(i);
  32.    }
  33. }



从机程序:
  1. /*
  2. * GccApplication6.c
  3. *
  4. * Created: 2014-9-29 20:02:33
  5. *  Author: Administrator
  6. */


  7. #include <avr/io.h>
  8. #define  DD_MISO 6
  9. void SPI_SlaveInit(void)
  10. {
  11.           DDRB=(1<<DD_MISO);
  12.         SPCR=(1<<SPE);  
  13. }

  14. char SPI_SlaveReceive(void)
  15. {
  16.    while(!(SPSR&(1<<SPIF)));
  17.    return SPDR;       
  18.        
  19. }

  20. int main(void)
  21. {
  22.     DDRC = 0xFF;
  23.         SPI_SlaveInit();
  24.         while(1)
  25.         {
  26.                 PORTC=SPI_SlaveReceive();
  27.         }
  28.        
  29.        
  30. }





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
colinh 发表于 2014-10-16 17:05 | 显示全部楼层
赞,正好在用,收下了,学习下,感谢楼主!
 楼主| ddllxxrr 发表于 2014-10-16 20:42 | 显示全部楼层
colinh 发表于 2014-10-16 17:05
赞,正好在用,收下了,学习下,感谢楼主!

:handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7002

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部