历史上的今天
返回首页

历史上的今天

今天是:2024年12月11日(星期三)

正在发生

2019年12月11日 | AVR(M48)的i2c程序,读写at24c02

2019-12-11 来源:elecfans

//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));

}


推荐阅读

史海拾趣

Deutsch公司的发展小趣事

人才是企业发展的核心驱动力。Deutsch公司非常重视人才引进和培养工作。公司积极招聘具有丰富经验和专业技能的人才,并为他们提供广阔的发展空间和良好的职业前景。同时,公司还注重内部人才的培养和晋升,通过培训、交流等方式提升员工的综合素质和业务能力。这些措施使得Deutsch公司拥有一支高素质、高效率的团队,为公司的持续发展提供了有力保障。

C-MEDIA公司的发展小趣事

在音频处理和网络游戏领域取得成功后,C-MEDIA公司并未止步。它持续投入研发资源,不断推动技术创新和产品升级。公司的研发团队致力于开发更高效、更稳定的音频处理芯片,以满足市场对于高品质音频体验的需求。同时,在网络游戏领域,C-MEDIA也不断推出新的游戏内容和服务,以吸引和留住用户。

固驰(GUERTE)公司的发展小趣事

固驰电子深知产品质量是企业生存之本,因此始终将品质控制放在首位。公司不仅建立了完善的质量管理体系,还通过了ISO9001:2015质量管理体系认证和美国UL产品认证,这标志着固驰电子的产品质量达到了国际先进水平。此外,公司还积极申请专利,目前已拥有50项国家专利,进一步巩固了其在行业内的技术领先地位。

敦泰(FOCALTECH)公司的发展小趣事
首先检查电源插头是否牢固插入插座,然后用万用表测量插座是否有电。如果插座有电但冰箱仍不工作,可以检查冰箱内部的电源线路是否有断路或短路现象。注意,在检查电源线路时务必断电操作,以免发生触电事故。
ept Connectors公司的发展小趣事

EPT Connectors公司一直注重产品品质的管理和提升。公司建立了严格的质量管理体系,从原材料采购到产品制造、检测等各个环节都进行严格把关。同时,EPT还积极引进先进的生产设备和技术,不断提升产品的质量和性能。这些努力使得EPT的产品在市场上赢得了良好的口碑和客户的信任。许多知名电子企业都选择EPT作为他们的连接器供应商,这也进一步推动了EPT的发展。

Churod Electronics Co Ltd公司的发展小趣事

为了保证产品质量和客户满意度,中汇瑞德一直将质量管理体系的建设放在重要位置。公司引入了国际先进的质量管理理念和方法,建立了完善的质量管理体系,并通过了多项国际认证。同时,公司还加强了对供应商的管理和评估,确保原材料的质量符合公司要求。这些措施有效地提高了产品的质量稳定性和可靠性,赢得了客户的信任和认可。

问答坊 | AI 解惑

诺基亚手机配件及元器件代换/替换大全

诺基亚8210 CPU 诺基亚 8210 CPU可以与诺基亚8250、8850、8855、5210、3210 、3310、6210的CPU代换,型号有V11、V12、V16、V18、V19,其中8210、8850大多采用V11、V18,升级为8250、8855时应该换成V16的CPU。 ...…

查看全部问答>

请教tffs文件系统的问题

CPU:PXA270 64M Nor Flash:S29G512N上创建TFFS文件系统,修改了相关的文件,但是tffsShow也总是返回失败,查了些资料,有说室MMU的问题,有说是中断的问题,按提示做了修改,还是有问题: -> tffsShow 0: **** communication failed with err ...…

查看全部问答>

wince5 + 威盛VNUWLC51网卡

使用mini2440板的wince5 接通无线网卡后,重启发现无线网卡没有启动,需要拔下usb插头再插上才可以继续使用无线网卡。 如何使重启后直接就可以使用无线网卡,不需要重新拔插接头,谢谢! 或者有没有程序使得无线网卡驱动在开机时自动运行? …

查看全部问答>

vc2005下开发arm?

我用的是vc2005来开发TE2004的arm版,已经成功可以运行了。但是不知道可不可以在vc2005中插入arm汇编,来进行速度的提升?还是一定要在linux下用arm+linux才能使用arm汇编?希望得到大家的帮助。…

查看全部问答>

酒店里面是否装电脑

一.我们的项目是什么         通俗地讲:此项目,就是给酒店装一间网吧,而电脑不是集中放到一个大厅里,而是分散地放到酒店客房里面,为客人提供上网服务,并且收取相应的上网费用。 二.市场分析      &n ...…

查看全部问答>

8019网络芯片收到了数据包但不产生中断信号,是什么原因?小菜鸟请教各位大侠,谢谢了.

8019的接收LED指示灯闪,表示已经接收到数据包,但是我用示波器看了一下8019没有产生中断信号,估计是寄存器配置的问题,不过我已经将中断屏蔽寄存器写入了0xff,是还有其它的寄存器需要配置吗? 我看了一下8019的数据手册,第三页里面有一个CONFIG1的寄 ...…

查看全部问答>

求教关于S2E中TELNET的问题

因为手头正好有一块TI LM3S6965的开发板,最近想学习有关串口转以太网,所以拿着板子,根据 TI 的S2E源码在调试,在看telnet.c程序时有点不解,没找到把以太网数据存到ringbuf的相关代码,研究一短时间有点费解,有研究过S2E源码的大虾能帮忙解答下 ...…

查看全部问答>

用NE555制作寻光机器人

  在日常生活和学习中充斥着高新技术的今天,“低技术”表达的是回归自然和传统,去挖掘人类早已拥有的聪明才智。低技术不要求我们一味地追求技术的尖端化,但其所展现的科技成果和科学理念同样精彩。本文将通过一部寻光机器人的制作,向大家展示 ...…

查看全部问答>

做浮点数的乘法加减,结果怎么都不对,求好心人来帮忙分析下原因?

板子的芯片型号是MSP430F2618, 之前计算采集数据一直出现问题,后来发现是浮点数数据处理这里 为了测试方便,我简化了代码,大概就是下面这个样子: float A = 800.0; float tempfloat ; float coefficient = 0.2733;//系数 tempfloat = A*c ...…

查看全部问答>

MSP430常用加密总结

1> 为什么要加密,如何加密? 当您的产品推向市场的时候,您的竞争对手就开始盯上它了,如果您的产品硬件很容易被模仿,而且您使用的MSP430单片机没有被加密的话, 那么您辛辛苦苦的劳动成功就很容易成为您竞争对手的产品了,使用JTAG调试工具FET ...…

查看全部问答>