AVR主从通信

该博客详细介绍了AVR单片机在I2C通信协议中如何实现主从通信的过程,包括定义的常量、状态码以及常用的操作函数,如启动、停止、发送和接收数据的函数声明。内容涵盖了从机和主机模式的初始化以及数据传输的函数定义。
摘要由CSDN通过智能技术生成

#ifndef __TWI_H__
#define __TWI_H__

#ifndef F_CPU
#define F_CPU 7372800  //晶振,注意有可能CONFIG.H里面已经定义的情况
#endif

#ifndef F_IIC_SCL
#define F_IIC_SCL 25000  //晶振,注意有可能CONFIG.H里面已经定义的情况
#endif

#define TWI_MOD 0 //主机;1 从机:0

#define SCL               5
#define SDA               4
#define TWI_PORT          PORTC
#define TWI_DIR           DDRC


//twi.h里面有定义,现附上中文描述

//主机发送状态码
#define START    0x08 //START已发送
#define REP_START   0x10 //重复START已发送
#define MT_SLA_ACK   0x18 //SLA+W 已发送收到ACK
#define MT_SLA_NACK   0x20 //SLA+W 已发送接收到NOT ACK
#define MT_DATA_ACK   0x28 //数据已发送接收到ACK
#define MT_DATA_NACK   0x30 //数据已发送接收到NOT ACK
#define TW_MT_ARB_LOST   0x38 //SLA+W 或数据的仲裁失败
//主机接收状态码
//#define TW_START    0x08 //START已发送
//#define TW_REP_START   0x10 //重复START已发送
#define MR_ARB_LOST   0x38 //SLA+R 或NOT ACK 的仲裁失败
#define MR_SLA_ACK   0x40 //SLA+R 已发送接收到ACK
#define MR_SLA_NACK   0x48 //SLA+R 已发送接收到NOT ACK
#define MR_DATA_ACK   0x50 //接收到数据ACK 已返回
#define MR_DATA_NACK   0x58 //接收到数据NOT ACK已返回

//从机接收状态码
#define SR_SLA_ACK   0x60 //自己的SLA+W 已经被接收ACK已返回
#define SR_ARB_LOST_SLA_ACK 0x68 //SLA+R/W 作为主机的仲裁失败;自己的SLA+W 已经被接收ACK 已返回
#define SR_GCALL_ACK   0x70 //接收到广播地址ACK 已返回
#define SR_ARB_LOST_GCALL_ACK 0x78 //SLA+R/W 作为主机的仲裁失败;接收到广播地址ACK已返回
#define SR_DATA_ACK   0x80 //以前以自己的SLA+W被寻址;数据已经被接收ACK已返回
#define SR_DATA_NACK   0x88 //以前以自己的SLA+W被寻址;数据已经被接收NOT ACK已返回
#define SR_GCALL_DATA_ACK 0x90 //以前以广播方式被寻址;数据已经被接收ACK已返回
#define SR_GCALL_DATA_NACK 0x98 //以前以广播方式被寻址;数据已经被接收NOT ACK已返回
#define SR_STOP    0xA0 //在以从机工作时接收到STOP或重复START
//从发送状态码
#define ST_SLA_ACK   0xA8 //自己的SLA

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值