标准AVR单片机模拟I2C总线的主机程序

本文档提供了使用AVR单片机模拟I2C总线的主机程序,包括起始和停止条件、数据传输以及应答位的生成。提供了I2C_Start(), I2C_Write(), I2C_Read(), I2C_GetAck(), I2C_PutAck()和I2C_Stop()等关键函数,以及综合发送和接收函数I2C_Puts()和I2C_Gets(),用于与从设备进行数据交互。示例中展示了如何写入和读取EEPROM以及控制数字电位器。" 126655490,7783893,QML中JS数值转换:Number、parseInt与parseFloat,"['开发语言', 'javascript']
摘要由CSDN通过智能技术生成

 

.H文件预处理

typedef unsigned char INT8U; //0~255

typedef signed char INT8S; //-128~127

typedef unsigned int INT16U; //0~65535

typedef signed int INT16S; //-32768~32767

typedef unsigned long INT32U; //0~0xFFFFFFFF

typedef signed long INT32S; //0x8000 0000~7FFFFFFF

typedef float FP32; //Single precision floating point

typedef double FP64; //Double precision floating point

#define XTAL 1 //晶振频率,单位MHz

#define m_delayus(x) __delay_cycles((unsigned long)(x*XTAL))

#define m_delayms(x) __delay_cycles((unsigned long)(x*XTAL*1000UL))

#define m_delays(x) __delay_cycles((unsigned long)(x*XTAL*1000000UL))


#define BIT0 0x01

#define BIT1 0x02

#define BIT2 0x04

#define BIT3 0x08

#define BIT4 0x10

#define BIT5 0x20

#define BIT6 0x40

#define BIT7 0x80

//假设SCLPD6,SDA是端口PD7WP是端口PD5

#define m_EnE2pWrite PORTD&=~BIT5 //允许EEPROM读写

#define m_DiE2pWrite PORTD|=BIT5 //EEPROM只读

#define m_I2CWritePort DDRD|=BIT7 //I2C写时,SDA端口方向为输出

#define m_I2CReadPort DDRD&=~BIT7 //I2C读时,SDA端口方向为输入

#define m_SetSCL PORTD|=BIT6 //PD6=1,SCL置位

#define m_ClrSCL PORTD&=~BIT6 //PD6=0,SCL清0

#define m_SetSDA PORTD|=BIT7 //PD7=1,SDA置位

#define m_ClrSDA PORTD&=~BIT7 //PD7=0,SDA清0

#define m_SDAIn (PIND&BIT7) //SDA读入

#define m_I2C_Delay m_delayus(5) //I2C延时,不同器件可能不同

#define m_I2C_StopDelay m_delayms(10)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值