当前位置: 代码迷 >> 汇编语言 >> 用I2C通讯实现点亮一盏小灯(包含应答)-汇编语言
  详细解决方案

用I2C通讯实现点亮一盏小灯(包含应答)-汇编语言

热度:4509   发布时间:2013-02-26 00:00:00.0
用I2C通信实现点亮一盏小灯(包含应答)---汇编语言

下载请于:http://download.csdn.net/detail/chenqiai0/4483389(完全代码以及详解)-------有疑问可以留言,希望多多交流

org 0x00ljmp startorg 30Hstart:    lcall init_I2C	lcall init_led	main:		  mov R3,#0x23		  mov R5,#0x05		  lcall write_add  //这一句和 lcall read_add需要从stop-》start,所以有一个延时,这个延时时间经过自己计算至少1.5ms		  mov 0x72,#77  //小于77会发生错误		  j:		    lcall delay		   //14周期		    djnz 0x72,j			  //3个周期		  lcall read_add		  mov A,R4		  xrl A,#0xFF		  mov P0,A	h:	  ljmp hdelay:  mov R0,#5		   //2个周期  here:       djnz R0,here  //djnz 寄存器减1,不为零就转移				3个周期retI2C_start:   clr    P3.7	//scl   lcall  delay   setb   P3.6   lcall  delay   setb   P3.7   lcall  delay   clr    P3.6   lcall  delayretI2C_stop:   clr    P3.7	//scl   lcall  delay   clr    P3.6   lcall  delay   setb   P3.7   lcall  delay   setb   P3.6   lcall  delayretI2C_respons:   mov R0,#0x00   setb P3.7   lcall  delay   there:         jnb P3.6,q		 inc R0		 cjne R0,#250,there	     q:	   clr P3.7	   lcall delayretwrite_byte:  //void write_byte(uchar date),从C语言看,这个函数需要一个参数             //我们不妨令R5=date		   (R6=i,A=temp)  mov A,R5  mov R6,#0x09 w_circle: djnz R6,next  ljmp q1  next:	rlc A	clr P3.7	lcall delay	mov P3.6,C	lcall delay	setb P3.7	lcall delay	ljmp w_circle  q1:    clr P3.7	lcall delay	setb P3.6	lcall delayretread_byte:   //A=k,R6=i   clr P3.7   lcall delay   setb P3.6   lcall delay   mov R6,#0x09   mov A,#0x00  r_circle:    djnz R6,next2    ljmp q2    next2:    	setb P3.7    	lcall delay	    	rl A    	jb  P3.6,orl1		 orl A,#0		 ljmp orl2    	orl1:	     orl A,#1       orl2:	    mov R4,A		clr P3.7		lcall delay		ljmp r_circle  q2:    clr P3.7	lcall delay	setb P3.6	lcall delay	setb P3.7	lcall delay	retwrite_add:   mov 0x70,R5//把原数据保存起来   lcall I2C_start   mov R5,#0xa0   lcall write_byte   lcall  I2C_respons   mov 0x71,R3   mov R5,0x71   lcall write_byte   lcall  I2C_respons   mov R5,0x70   lcall write_byte   lcall  I2C_respons   lcall I2C_stopretread_add:   lcall I2C_start   mov R5,#0xa0   lcall write_byte   lcall  I2C_respons   mov 0x71,R3   mov R5,0x71   lcall write_byte   lcall  I2C_respons    lcall I2C_start   mov R5,#0xa1   lcall write_byte   lcall  I2C_respons   lcall read_byteretinit_I2C:  setb P3.6  lcall delay  setb P3.7  lcall delayret//选中小灯init_led:   clr  P1.0   setb P1.1   setb P1.2   clr  P1.4   setb P1.3retend


 

 

1楼chenqiai0昨天 23:06
欢迎交流
  相关解决方案