AVR(M48)的i2c程序,读写at24c02

发布者:平凡的梦想最新更新时间:2019-12-11 来源: elecfans关键字:AVR  M48  i2c程序  读写at24c02 手机看文章 扫描二维码
随时随地手机看文章

//ICC-AVR application builder : 2007-12-5 17:34:01

// Target : m48

// Crystal: 1.0000Mhz


#include

#include

#include

//#include


#define START 0x08

#define ReSTART 0x10

#define MT_SLA_ACK 0x18

#define MT_DATA_ACK 0x28


#define MR_SLA_ACK 0x40

#define MR_DATA_ACK 0x50

#define MR_DATA_NACK 0x58


#define SLA_W 0xA0

#define SLA_R 0xA1

#define ADDRESS 0x00

#define DATA 0x55


void port_init(void)

{

//set LED PIN output

DDRC |= (1<DDRD |= (1<//set LED off

PORTD = 0xF0;PORTC = 0x0F;

}


void Error()

{

USART_Transmit(TWSR & 0xF8);

while(1) 

     LedBlk();

}


//****TWI_ByteW()****//

void TWI_ByteW(unsigned char add,unsigned data)

{

TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != START)                //check

     Error();


TWDR = SLA_W;                             //send SLA_W

TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != MT_SLA_ACK)           //check

     Error();


TWDR = add;                               //send address

TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != MT_DATA_ACK)          //check

     Error();

   

TWDR = data;                              //send data

TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != MT_DATA_ACK)          //check

     Error();


TWCR = (1<

Delayus(150);

}


//****TWI_CByteR()****//

unsigned char TWI_CByteR()

{

TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != START)                //check

     Error();


TWDR = SLA_R;                             //send SLA_R

TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != MR_SLA_ACK)           //check

     Error();


TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != MR_DATA_NACK)         //check

     Error();


TWCR = (1<

return TWDR;

}

//****TWI_ByteR()****//

unsigned char TWI_ByteR(unsigned char add)

{

TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != START)                //check

     Error();


TWDR = SLA_W;                             //send SLA_W

TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != MT_SLA_ACK)           //check

     Error();


TWDR = add;                               //send address

TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != MT_DATA_ACK)          //check

     Error();


TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != ReSTART)              //check

     Error();


TWDR = SLA_R;                             //send SLA_R

TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != MR_SLA_ACK)           //check

     Error();


TWCR = (1<while(!(TWCR & (1<     ;

if((TWSR & 0xF8) != MR_DATA_NACK)         //check

     Error();


TWCR = (1<

return TWDR;

}

void main(void)

{

unsigned char data;


CLI();

port_init();

USART_Init();

SEI();


TWI_ByteW(0x00,0xA0);

TWI_ByteW(0x01,0xA1);

TWI_ByteW(0x02,0xA2);

TWI_ByteW(0x03,0xA3);

TWI_ByteW(0x04,0xA4);

TWI_ByteW(0x05,0xA5);

TWI_ByteW(0x06,0xA6);

TWI_ByteW(0x07,0xA7);

TWI_ByteW(0x08,0xA8);

TWI_ByteW(0x09,0xA9);

USART_Transmit(TWI_ByteR(0x00));

USART_Transmit(TWI_ByteR(0x01));

USART_Transmit(TWI_ByteR(0x02));

USART_Transmit(TWI_ByteR(0x03));

USART_Transmit(TWI_ByteR(0x04));

USART_Transmit(TWI_ByteR(0x05));

USART_Transmit(TWI_ByteR(0x06));

USART_Transmit(TWI_ByteR(0x07));

USART_Transmit(TWI_ByteR(0x08));

USART_Transmit(TWI_ByteR(0x09));

}


关键字:AVR  M48  i2c程序  读写at24c02 引用地址:AVR(M48)的i2c程序,读写at24c02

上一篇:FreeModbus 精简版本(Only RTU) for M128 (Modbus Slave)
下一篇:玩Mega8 智能充电器-12. 终于实现-dV检测

推荐阅读最新更新时间:2024-11-09 19:04

基于AVR单片机的博物馆防盗保护器系统设计
引言 博物馆内的藏品常常受到人为盗窃的威胁,周围环境的变化也会对其造成破坏,因此需要极为可靠的防盗系统及完善的空调系统,本设计的目的就是实现对馆藏品的智能化防盗和保护。博物馆关闭时便可将此防盗保护器启动,通过CMOS传感器对博物馆进行扫描,图像信号在微处理器中进行处理筛选压缩,并与被监控信号(人形信号)进行比较,一旦出现类人形信号,便将数据进行存储(这样可以大大节省存储空间),并进行报警。被监控信号可以增加,可以是其它任何可能对馆藏品造成损害的动物,只不过在进行筛选比较处理时要复杂一些。另外,通过温度传感器对温度信号进行采集监控,通过控制馆内空调来达到调节温度的效果,以避免馆内文物因为温度的变化而造成损害。 图1 系统功能框
[单片机]
基于<font color='red'>AVR</font>单片机的博物馆防盗保护器系统设计
51单片机I2C详解与程序源码
I2C是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。I2C是总线结构,1个Master,1个或多个Slave,各Slave设备以7位地址区分,地址后面再跟1位读写位,表示读(=1)或者写(=0),所以我们有时也可看到8位形式的设备地址,此时每个设备有读、写两个地址,高7位地址其实是相同的。 I2C数据格式如下: 无数据:SCL=1,SDA=1; 开始位(Start):当SCL=1时,SDA由1向0跳变; 停止位(Stop):当SCL=1时,SDA由0向1跳变; 数据位:当SCL由0向1跳变时,由发送方控制SDA,此时SDA为有效数据
[单片机]
AVR基本硬件线路设计方法与原理分析
基本的AVR硬件线路,包括以下几部分: 1。复位线路 2。 晶振 线路 3。AD转换 滤波 线路 4。ISP下载接口 5。 JTAG 仿真接口 6。 电源   下面以本网站推荐的AVR入门芯片 ATmega16L-8AI 分析上述基本线路。(-8AI表示8M 频率 的T QFP 贴片封装,工业级,更详细的型号含义资料,请参考:AVR芯片入门知识) 复位线路的设计   Mega16已经内置了上电复位设计。并且在熔丝位里,可以控制复位时的额外时间,故AVR外部的复位线路在上电时,可以设计得很简单:直接拉一只10K的 电阻 到V CC 即可(R0)。   为了可靠,再加上一只0.1uF的 电容 (C0)以消除干扰、杂波。  
[单片机]
<font color='red'>AVR</font>基本硬件线路设计方法与原理分析
AVR Studio 的使用注意
AVR单片机最常用的集成开发环境就是AVR Studio和ICCAVR了,AVR Studio是ATMEL公司自己开发的编译环境,但是只支持汇编语言的开发。现在的版本已经出到AVR Studio5.0 ,但是好像要100M左右,很多研发的都是在使用AVR Studio4.0版本的吧。相对于C语言来说,就要安装winAVR和AVR Studio共同组成C语言编译环境了。AVR Studio头文件有自己的延迟函数。#include uitl/delay.h 有毫秒_delay_ms()和微妙_delay_us()两个子函数,可以在其他函数中调用这两个函数,但是使用这两个函数的时候特别要注意在AVR Studio中设置编译对象的晶振和优
[单片机]
AVR单片机中左移位和右移位指令
计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。计算机只能识别和执行机器语言的指令。为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。 AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。 SL-DIY02-3开发实验器使用AT90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。 AVR器件(指令速查表) 118条指令器件 AT90S2313/2323/2343/2333 ,AT90S4414/4433/4434/85
[单片机]
<font color='red'>AVR</font>单片机中左移位和右移位指令
AVR32 MCU上的ABDAC外设音频播放设计
  AVR32 MCU 上的 ABDAC 外设非常适合生成音频播放。本文介绍了如何执行此操作,并包含指向生成正弦波输出的示例驱动程序的链接。   许多嵌入式应用程序越来越多地具有音频播放功能,无论是响应用户输入的简单音频反馈还是全高速流音频。通过使用通用时钟接口,Atmel AVR32 MCU 上的 ABDAC 能够支持广泛的播放频率。   功能说明   ABDAC 是一个非常简单的外围设备,它的使用很简单。它需要通用时钟系统提供的时钟信号,以及通道的数据输入。图 1 中的框图给出了该模块的概述。有关 ABDAC 外设的详细说明,请参见器件的数据表。      图 1:时钟和数据路径框图。   通用时钟   ABDAC
[单片机]
<font color='red'>AVR</font>32 MCU上的ABDAC外设音频播放设计
AVR 单片机精确延时函数
1.毫秒级的延时 延时1ms; void delay_1ms(void) { unsigned int i; for(i=1;i (unsigned int)(xtal*143-2_;i++) ; } 在上式中,xtal为晶振频率,单位为MHz. 当晶振频率为8M时,延时函数软件仿真的结果为1000.25μs.当晶振频率为4M时,延时函数软件仿真结果为999.5μs. 如果需要准确的1ms延时时间,则本计算公式只供参考,应通过软件仿真后,再确定循环的次数及循环初值,并且循环中还必须关闭全局中断,防止中断影响延时函数的延时时间。 下面的函数可以获得1ms的整数倍的延时时间: void delay(unsigned int n) {
[单片机]
AVR单片机专辑——定时器
第二讲:AVR单片机的定时器 ATmega128有两个8位定时器0和2,两个16位定时器1和3。下面主要说一下定时器的不同用法。 1. T/C0可以外接32768Hz的晶振,实现RTC(实时时钟)。 2. T/C2 外部事件计数器(T2)。 3. 16位的T/C可以实现精确的程序定时、波形产生和信号测量。功能非常强。 本文主要以16位的T/C1为例介绍定时器的应用,其它的定时器可以依葫芦画瓢。 1. 采用T/C1的溢出中断实现电子钟的设计 定时器工作在普通模式,用数码管显示时间。这里问题是如何得到1s的定时。若晶振采用12M,256分频,则计数初值应设为X,0xFFFF-X=12M/256 ==〉X=0
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved