⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.lst

📁 AD/DA转换
💻 LST
📖 第 1 页 / 共 3 页
字号:
                     220                             ; SOURCE LINE # 54
0005 00              221             NOP     
                     222     ;   _Nop();
                     223                             ; SOURCE LINE # 55
0006 00              224             NOP     
                     225     ;   _Nop();
                     226                             ; SOURCE LINE # 56
0007 00              227             NOP     
                     228     ;   _Nop();
                     229                             ; SOURCE LINE # 57
0008 00              230             NOP     
                     231     ;   _Nop();
                     232                             ; SOURCE LINE # 58
0009 00              233             NOP     
                     234     ;   SDA=1;      /*发送I2C总线结束信号*/
                     235                             ; SOURCE LINE # 59
000A D2A1            236             SETB    SDA
                     237     ;   _Nop();
                     238                             ; SOURCE LINE # 60
000C 00              239             NOP     
                     240     ;   _Nop();
                     241                             ; SOURCE LINE # 61
000D 00              242             NOP     
                     243     ;   _Nop();
                     244                             ; SOURCE LINE # 62
000E 00              245             NOP     
                     246     ;   _Nop();
                     247                             ; SOURCE LINE # 63
000F 00              248             NOP     
                     249     ; }
                     250                             ; SOURCE LINE # 64
0010 22              251             RET     
                     252     ; END OF Stop_I2c
                     253     
                     254     ; 
                     255     ; /*******************************************************************
                     256     ;                  字节数据发送函数               
A51 MACRO ASSEMBLER  I2C                                                                  09/13/2009 23:31:56 PAGE     5

                     257     ; 函数原型: void  SendByte(UCHAR c);
                     258     ; 功能:     将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
                     259     ;           此状态位进行操作.(不应答或非应答都使ack=0)     
                     260     ;            发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
                     261     ; ********************************************************************/
                     262     ; void  SendByte(unsigned char  c)
                     263     
----                 264             RSEG  ?PR?_SendByte?I2C
0000                 265     _SendByte:
                     266             USING   0
                     267                             ; SOURCE LINE # 73
                     268     ;---- Variable 'c?240' assigned to Register 'R7' ----
                     269     ; {
                     270                             ; SOURCE LINE # 74
                     271     ;  unsigned char  BitCnt;
                     272     ;  
                     273     ;  for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
                     274                             ; SOURCE LINE # 77
                     275     ;---- Variable 'BitCnt?241' assigned to Register 'R6' ----
0000 E4              276             CLR     A
0001 FE              277             MOV     R6,A
0002                 278     ?C0003:
                     279     ;     {
                     280                             ; SOURCE LINE # 78
                     281     ;      if((c<<BitCnt)&0x80)SDA=1;   /*判断发送位*/
                     282                             ; SOURCE LINE # 79
0002 EF              283             MOV     A,R7
0003 A806            284             MOV     R0,AR6
0005 08              285             INC     R0
0006 8002            286             SJMP    ?C0020
0008                 287     ?C0019:
0008 C3              288             CLR     C
0009 33              289             RLC     A
000A                 290     ?C0020:
000A D8FC            291             DJNZ    R0,?C0019
000C 30E704          292             JNB     ACC.7,?C0006
000F D2A1            293             SETB    SDA
0011 8002            294             SJMP    ?C0007
0013                 295     ?C0006:
                     296     ;        else  SDA=0;                
                     297                             ; SOURCE LINE # 80
0013 C2A1            298             CLR     SDA
0015                 299     ?C0007:
                     300     ;      _Nop();
                     301                             ; SOURCE LINE # 81
0015 00              302             NOP     
                     303     ;      SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
                     304                             ; SOURCE LINE # 82
0016 D2A0            305             SETB    SCL
                     306     ;       _Nop(); 
                     307                             ; SOURCE LINE # 83
0018 00              308             NOP     
                     309     ;       _Nop();             /*保证时钟高电平周期大于4μs*/
                     310                             ; SOURCE LINE # 84
0019 00              311             NOP     
                     312     ;       _Nop();
                     313                             ; SOURCE LINE # 85
001A 00              314             NOP     
                     315     ;       _Nop();
                     316                             ; SOURCE LINE # 86
001B 00              317             NOP     
                     318     ;       _Nop();         
                     319                             ; SOURCE LINE # 87
001C 00              320             NOP     
                     321     ;      SCL=0; 
                     322                             ; SOURCE LINE # 88
A51 MACRO ASSEMBLER  I2C                                                                  09/13/2009 23:31:56 PAGE     6

001D C2A0            323             CLR     SCL
                     324     ;     }
                     325                             ; SOURCE LINE # 89
001F 0E              326             INC     R6
0020 BE08DF          327             CJNE    R6,#08H,?C0003
0023                 328     ?C0004:
                     329     ;     
                     330     ;     _Nop();
                     331                             ; SOURCE LINE # 91
0023 00              332             NOP     
                     333     ;     _Nop();
                     334                             ; SOURCE LINE # 92
0024 00              335             NOP     
                     336     ;     SDA=1;                /*8位发送完后释放数据线,准备接收应答位*/
                     337                             ; SOURCE LINE # 93
0025 D2A1            338             SETB    SDA
                     339     ;     _Nop();
                     340                             ; SOURCE LINE # 94
0027 00              341             NOP     
                     342     ;     _Nop();   
                     343                             ; SOURCE LINE # 95
0028 00              344             NOP     
                     345     ;     SCL=1;
                     346                             ; SOURCE LINE # 96
0029 D2A0            347             SETB    SCL
                     348     ;     _Nop();
                     349                             ; SOURCE LINE # 97
002B 00              350             NOP     
                     351     ;     _Nop();
                     352                             ; SOURCE LINE # 98
002C 00              353             NOP     
                     354     ;     _Nop();
                     355                             ; SOURCE LINE # 99
002D 00              356             NOP     
                     357     ;     if(SDA==1)ack=0;     
                     358                             ; SOURCE LINE # 100
002E 30A104          359             JNB     SDA,?C0008
0031 C200     F      360             CLR     ack
0033 8002            361             SJMP    ?C0009
0035                 362     ?C0008:
                     363     ;        else ack=1;        /*判断是否接收到应答信号*/
                     364                             ; SOURCE LINE # 101
0035 D200     F      365             SETB    ack
0037                 366     ?C0009:
                     367     ;     SCL=0;
                     368                             ; SOURCE LINE # 102
0037 C2A0            369             CLR     SCL
                     370     ;     _Nop();
                     371                             ; SOURCE LINE # 103
0039 00              372             NOP     
                     373     ;     _Nop();
                     374                             ; SOURCE LINE # 104
003A 00              375             NOP     
                     376     ; }
                     377                             ; SOURCE LINE # 105
003B 22              378             RET     
                     379     ; END OF _SendByte
                     380     
                     381     ; 
                     382     ; /*******************************************************************
                     383     ;                  字节数据接收函数               
                     384     ; 函数原型: UCHAR  RcvByte();
                     385     ; 功能:        用来接收从器件传来的数据,并判断总线错误(不发应答信号),
                     386     ;           发完后请用应答函数应答从机。  
                     387     ; ********************************************************************/    
                     388     ; unsigned char   RcvByte()
A51 MACRO ASSEMBLER  I2C                                                                  09/13/2009 23:31:56 PAGE     7

                     389     
----                 390             RSEG  ?PR?RcvByte?I2C
0000                 391     RcvByte:
                     392             USING   0
                     393                             ; SOURCE LINE # 113
                     394     ; {
                     395                             ; SOURCE LINE # 114
                     396     ;   unsigned char  retc;
                     397     ;   unsigned char  BitCnt;
                     398     ;   
                     399     ;   retc=0; 
                     400                             ; SOURCE LINE # 118
                     401     ;---- Variable 'retc?342' assigned to Register 'R7' ----
0000 E4              402             CLR     A
0001 FF              403             MOV     R7,A
                     404     ;   SDA=1;                     /*置数据线为输入方式*/
                     405                             ; SOURCE LINE # 119
0002 D2A1            406             SETB    SDA
                     407     ;   for(BitCnt=0;BitCnt<8;BitCnt++)
                     408                             ; SOURCE LINE # 120
                     409     ;---- Variable 'BitCnt?343' assigned to Register 'R6' ----
0004 FE              410             MOV     R6,A
0005                 411     ?C0011:
                     412     ;       {
                     413                             ; SOURCE LINE # 121
                     414     ;         _Nop();           
                     415                             ; SOURCE LINE # 122
0005 00              416             NOP     
                     417     ;         SCL=0;                  /*置时钟线为低,准备接收数据位*/
                     418                             ; SOURCE LINE # 123
0006 C2A0            419             CLR     SCL
                     420     ;         _Nop();
                     421                             ; SOURCE LINE # 124
0008 00              422             NOP     
                     423     ;         _Nop();                 /*时钟低电平周期大于4.7μs*/
                     424                             ; SOURCE LINE # 125
0009 00              425             NOP     
                     426     ;         _Nop();
                     427                             ; SOURCE LINE # 126
000A 00              428             NOP     
                     429     ;         _Nop();
                     430                             ; SOURCE LINE # 127
000B 00              431             NOP     
                     432     ;         _Nop();
                     433                             ; SOURCE LINE # 128
000C 00              434             NOP     
                     435     ;         SCL=1;                  /*置时钟线为高使数据线上数据有效*/
                     436                             ; SOURCE LINE # 129
000D D2A0            437             SETB    SCL
                     438     ;         _Nop();
                     439                             ; SOURCE LINE # 130
000F 00              440             NOP     
                     441     ;         _Nop();
                     442                             ; SOURCE LINE # 131
0010 00              443             NOP     
                     444     ;         retc=retc<<1;
                     445                             ; SOURCE LINE # 132
0011 EF              446             MOV     A,R7
0012 25E0            447             ADD     A,ACC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -