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

来源:互联网 发布:log4j 关闭sql日志 编辑:程序博客网 时间:2024/06/06 17:19

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

org 0x00ljmp startorg 30Hstart:    lcall init_I2Clcall init_ledmain:  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,Ah:  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 Aclr P3.7lcall delaymov P3.6,Clcall delaysetb P3.7lcall delayljmp w_circle  q1:    clr P3.7lcall delaysetb P3.6lcall 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,Aclr P3.7lcall delayljmp r_circle  q2:    clr P3.7lcall delaysetb P3.6lcall delaysetb P3.7lcall delayretwrite_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


 

 

原创粉丝点击