资料简介: 本程序简单的示范了如何使用ATMEGA16的TWI 读写AT24C02 IIC EEPROM TWI协议 (即IIC协议,请认真参考IIC协议的内容,否则根本就不能掌握) 一主多从的应用,M16作主机 (M16做从机和多主多从的应用不多,请自行参考相关文档) 中断模式 (因为AVR的速度很高,而IIC的速度相对较低, 采用查询模式会长时间独占CPU,令CPU的利用率明显下降。 特别是 IIC速度受环境影响只能低速通讯时,对系统的实时性产生严重的影响。 查询模式可以参考其它文档和软件模拟 IIC的文档) AT24C02/04/08的操作特点 出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器 */ #include
#include #include #include //时钟定为外部晶振 7.3728MHz,F_CPU=7372800 #include //定义了各种模式下的状态码列表(TWSR已屏蔽预分频位),本文后面附上中文描述 //管脚定义 #define pinSCL 0 //PC0 SCL #define pinSDA 1 //PC1 SDA //为保险起见,最好在 SCL/SDA接上 1~10K的外部上拉电阻到 VCC。 #define fSCL 100000 //TWI时钟为100KHz //预分频系数=1(TWPS=0) #if F_CPU < fSCL*36 #define TWBR_SET 10; //TWBR必须大于等于 10 #else #define TWBR_SET (F_CPU/fSCL-16)/2; //计算 TWBR值 #endif #define TW_ACT (1<