原创 KeilC51的编译效率和汇编可以说是一样的---只要

2006-12-30 01:19 5062 10 10 分类: MCU/ 嵌入式
Keil C51的编译效率和汇编可以说是一样的---只要"用心写"
mood0.gif hotpower 发表于 2005-6-18 0:21:43 侃单片机 ←返回版面 按此给该网友发送邮件 按此察看该网友的资料 按此把文章加入收藏夹



  2049: unsigned char I2CReadWrite(unsigned char val)
  2050: {
  2051: unsigned char i;
  2052:   ACC = val;//取写入数据
C:0x18D3    EF       MOV      A,R7
  2053:   for (i = 8; i > 0; i --) {//收发8位数据
C:0x18D4    7F08     MOV      R7,#0x08
  2054:         SCL = 0;//拉低I2C时钟
C:0x18D6    C286     CLR      SCL(0x80.6)
  2055:     _rlca_();//左移1位数据(取出1位写入数据)
C:0x18D8    33       RLC      A
  2056:         SDA = CY;//写入1位I2C数据
C:0x18D9    9287     MOV      SDA(0x80.7),C
  2057:         _rrca_();//右移1位还原数据
  2058: //    _nop_();_nop_();_nop_();_nop_();_nop_();//延时4.7uS
  2059: //如果不追求高速,可在此加入一些总线冲突裁决程序
  2060: //即SDA=1时,读回若为0则为总线冲突
C:0x18DB    13       RRC      A
  2061:     SCL = 1;//拉高I2C时钟
C:0x18DC    D286     SETB     SCL(0x80.6)
  2062:         CY = SDA;//读回1位I2C数据
C:0x18DE    A287     MOV      C,SDA(0x80.7)
  2063:     _rlca_();//左移最后1位数据
C:0x18E0    33       RLC      A
  2064:   }
C:0x18E1    DFF3     DJNZ     R7,C:18D6
  2065:   SCL = 0;//拉低I2C时钟
C:0x18E3    C286     CLR      SCL(0x80.6)
  2066:   return ACC;//返回读回数据
C:0x18E5    FF       MOV      R7,A
  2067: }
C:0x18E6    22       RET      


 


http://bbs.21ic.com/club/bbs/showEssence.asp?id=6493&page=1

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条