第1页共15页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共15页/***************************************************AVRTWI读写读写范例**************作者:HJJourAVR*******编译器:WINAVR20050214**************www.OurAVR.com2005.10.18**************************************************//*本程序简单的示范了如何使用ATMEGA16的TWI读写AT24C02IICEEPROMTWI协议(即IIC协议,请认真参考IIC协议的内容,否则根本就不能掌握)一主多从的应用,M16作主机(M16做从机和多主多从的应用不多,请自行参考相关文档)中断模式(因为AVR的速度很高,而IIC的速度相对较低,采用查询模式会长时间独占CPU,令CPU的利用率明显下降。特别是IIC速度受环境影响只能低速通讯时,对系统的实时性产生严重的影响。查询模式可以参考其它文档和软件模拟IIC的文档)AT24C02/04/08的操作特点出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAGICE硬件仿真器*//**********************ATEEPROM读写过程*********************************字节写:Start→器件地址&W→应答→选ROM地址→应答→写数据→应答→Stop中断过程START→MT_SLA_ACK→MT_DATA_ACK(地址)→MT_DATA_ACK(数据)(STOP中止)页面写:Start→器件地址&W→应答→选ROM地址→应答→写数据→应答→写NEXT地址数据→应答→。。。写NEXT地址数据→应答→Stop中断过程START→MT_SLA_ACK→MT_DATA_ACK(地址)→MT_DATA_ACK(数据)→MT_DATA_ACK(数据)→。。。MT_DATA_ACK(数据)(STOP中止)字节读:Start→器件地址&W→应答→选ROM地址→应答→Restart→器件地址&R→应答→读数据→无应答→Stop中断过程START→MT_SLA_ACK→MT_DATA_ACK(地址)→RE_START→MR_SLA_ACK→MR_DATA_NOACK(STOP中止)页面读:Start→器件地址&W→应答→选ROM地址→应答→Restart→器件地址&R→应答→读数据→应答→读NEXT地址数据→应答→。。。读NEXT地址数据→无应答→Stop中断过程START→MT_SLA_ACK→MT_DATA_ACK(地址)→RE_START→MR_SLA_ACK→MR_DATA_ACK→MR_DATA_ACK→。。。MR_DATA_NOACK(STOP中第2页共15页第1页共15页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共15页止)*************************************************************************/#include
#include#include#include//时钟定为外部晶振7.3728MHz,F_CPU=7372800#include//定义了各种模式下的状态码列表(TWSR已屏蔽预分频位),本文后面附上中文描述//管脚定义#definepinSCL0//PC0SCL#definepinSDA1//PC1SDA//为保险起见,最好在SCL/SDA接上1~10K的外部上拉电阻到VCC。#definefSCL100000//TWI时钟为100KHz//预分频系数=1(TWPS=0)#ifF_CPU