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

📄 twi.lis

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 002C 1501              movw R2,R10
 002E 4424              clr R4
 0030 5524              clr R5
 0032 49E9              ldi R20,153
 0034 59E3              ldi R21,57
 0036 60E0              ldi R22,0
 0038 70E0              ldi R23,0
 003A 5A92              st -y,R5
 003C 4A92              st -y,R4
 003E 3A92              st -y,R3
 0040 2A92              st -y,R2
 0042 8A01              movw R16,R20
 0044 9B01              movw R18,R22
 0046 0E940000          xcall div32s
 004A A02E              mov R10,R16
 004C                   .dbline 124
 004C           ;    if(bitrate_div >= 16) 
 004C 8A2D              mov R24,R10
 004E 0031              cpi R16,16
 0050 18F0              brlo L16
 0052                   .dbline 125
 0052           ;       bitrate_div = (bitrate_div-16)/2; 
 0052 8051              subi R24,16
 0054 A82E              mov R10,R24
 0056 A694              lsr R10
 0058           L16:
 0058                   .dbline 126
 0058           ;           TWBR = bitrate_div; 
 0058 A0B8              out 0x0,R10
 005A                   .dbline -2
 005A           L15:
 005A 0E940000          xcall pop_gset3
 005E                   .dbline 0 ; func end
 005E 0895              ret
 0060                   .dbsym r bitrate_div 10 c
 0060                   .dbsym r bitrateKHz 10 i
 0060                   .dbend
 0060                   .dbfunc e Twi_MasterSend _Twi_MasterSend fc
 0060           ;         result -> R20
 0060           ;              i -> R22
 0060           ;           data -> R10,R11
 0060           ;         length -> R12
 0060           ;     deviceAddr -> R14
                        .even
 0060           _Twi_MasterSend::
 0060 0E940000          xcall push_gset5
 0064 C22E              mov R12,R18
 0066 E02E              mov R14,R16
 0068 AA84              ldd R10,y+10
 006A BB84              ldd R11,y+11
 006C                   .dbline -1
 006C                   .dbline 143
 006C           ; } 
 006C           ; /*********************************************************************************************************
 006C           ; ** 函数名称:Twi_MasterSend
 006C           ; ** 功能描述:主发送
 006C           ; ** 输 入:  deviceAddr:从机地址
 006C           ; **          length:数据长度
 006C           ; **          * data:发送缓冲区指针
 006C           ; **
 006C           ; ** 输  出: 发送的字节数         
 006C           ; ** 全局变量: 
 006C           ; ** 调用模块: 
 006C           ; ** 说明:
 006C           ; ** 注意:    
 006C           ; ** 日 期:   2006年8月29日
 006C           ; ********************************************************************************************************/
 006C           ; uint8 Twi_MasterSend(uint8 deviceAddr, uint8 length, uint8* data) 
 006C           ; { 
 006C                   .dbline 144
 006C           ;    uint8 i,result=0;
 006C 4427              clr R20
 006E                   .dbline 145
 006E           ;    WDR(); //喂狗; 
 006E A895              wdr
 0070           L19:
 0070                   .dbline 147
 0070           L20:
 0070                   .dbline 147
 0070           ;    // 等待总线准备完成 
 0070           ;    while(Twi_State);                          //此处为独占TWI的信号量机制
 0070 20901500          lds R2,_Twi_State
 0074 2220              tst R2
 0076 E1F7              brne L19
 0078                   .dbline 149
 0078           ;    // 设置状态 
 0078           ;    Twi_State = TWI_MASTER_TX; 
 0078 82E0              ldi R24,2
 007A 80931500          sts _Twi_State,R24
 007E                   .dbline 151
 007E           ;    // 准备数据 
 007E           ;    Twi_DeviceAddrRW = (deviceAddr & 0xFE);   // RW 为0: 写操作
 007E 8E2D              mov R24,R14
 0080 8E7F              andi R24,254
 0082 80931400          sts _Twi_DeviceAddrRW,R24
 0086                   .dbline 152
 0086           ;    if(Twi_SendBuffer.status==TWI_DATA_FREE)  
 0086 20900700          lds R2,_Twi_SendBuffer+7
 008A 2220              tst R2
 008C 39F4              brne L22
 008E                   .dbline 153
 008E           ;          {
 008E                   .dbline 154
 008E           ;                InitQueue(&Twi_SendBuffer);            //清空上次发送的信息
 008E 00E0              ldi R16,<_Twi_SendBuffer
 0090 10E0              ldi R17,>_Twi_SendBuffer
 0092 0E940000          xcall _InitQueue
 0096                   .dbline 155
 0096           ;          Twi_SendBuffer.status=TWI_DATA_SEND;
 0096 82E0              ldi R24,2
 0098 80930700          sts _Twi_SendBuffer+7,R24
 009C                   .dbline 156
 009C           ;                }
 009C           L22:
 009C                   .dbline 157
 009C           ;    for(i=0; (i<length)&&(Twi_SendBuffer.errorcode!=QUEUE_OVERFLOW); i++) 
 009C 6627              clr R22
 009E 08C0              xjmp L29
 00A0           L26:
 00A0                   .dbline 158
 00A0 F501              movw R30,R10
 00A2 2191              ld R18,Z+
 00A4 5F01              movw R10,R30
 00A6 00E0              ldi R16,<_Twi_SendBuffer
 00A8 10E0              ldi R17,>_Twi_SendBuffer
 00AA 0E940000          xcall _EnQueue
 00AE           L27:
 00AE                   .dbline 157
 00AE 6395              inc R22
 00B0           L29:
 00B0                   .dbline 157
 00B0 6C15              cp R22,R12
 00B2 20F4              brsh L31
 00B4 80910600          lds R24,_Twi_SendBuffer+6
 00B8 8130              cpi R24,1
 00BA 91F7              brne L26
 00BC           L31:
 00BC                   .dbline 159
 00BC           ;    EnQueue(&Twi_SendBuffer,*data++);
 00BC           ;    result=i;
 00BC 462F              mov R20,R22
 00BE                   .dbline 162
 00BE           ; 
 00BE           ;    // 发送开始条件 
 00BE           ;    Twi_Start();
 00BE 86B7              in R24,0x36
 00C0 8F70              andi R24,15
 00C2 806A              ori R24,160
 00C4 86BF              out 0x36,R24
 00C6                   .dbline 163
 00C6           ;    WDR(); //喂狗;
 00C6 A895              wdr
 00C8           L32:
 00C8                   .dbline 164
 00C8           L33:
 00C8                   .dbline 164
 00C8           ;    while(Twi_State);
 00C8 20901500          lds R2,_Twi_State
 00CC 2220              tst R2
 00CE E1F7              brne L32
 00D0                   .dbline 165
 00D0           ;    WDR(); //喂狗;
 00D0 A895              wdr
 00D2                   .dbline 166
 00D2           ;    i=0;
 00D2 6627              clr R22
 00D4 19C0              xjmp L36
 00D6           L35:
 00D6                   .dbline 168
 00D6           ;    while(((TwiErrorCode==TW_MT_SLA_NACK)||(TwiErrorCode==TW_MT_ARB_LOST)||(TwiErrorCode==TW_MT_DATA_NACK))&&i<TWI_FAIL_MAX)  //器件不响应或总线仲裁失败
 00D6           ;          {
 00D6                   .dbline 169
 00D6           ;                i++;
 00D6 6395              inc R22
 00D8                   .dbline 170
 00D8           ;                if((TwiErrorCode==TW_MT_DATA_NACK)&&(Twi_SendBuffer.count==0))
 00D8 80910400          lds R24,_TwiErrorCode
 00DC 8033              cpi R24,48
 00DE 29F4              brne L38
 00E0 20900200          lds R2,_Twi_SendBuffer+2
 00E4 2220              tst R2
 00E6 09F4              brne L38
 00E8                   .dbline 171
 00E8           ;                {
 00E8                   .dbline 172
 00E8           ;                        break;
 00E8 1DC0              xjmp L37
 00EA           L38:
 00EA                   .dbline 174
 00EA           ;                        }
 00EA           ;                Delay(255);
 00EA 0FEF              ldi R16,255
 00EC 89DF              xcall _Delay
 00EE                   .dbline 175
 00EE           ;                Twi_State = TWI_MASTER_TX; 
 00EE 82E0              ldi R24,2
 00F0 80931500          sts _Twi_State,R24
 00F4                   .dbline 176
 00F4           ;                Twi_Start();
 00F4 86B7              in R24,0x36
 00F6 8F70              andi R24,15
 00F8 806A              ori R24,160
 00FA 86BF              out 0x36,R24
 00FC                   .dbline 177
 00FC           ;                WDR(); //喂狗;
 00FC A895              wdr
 00FE           L41:
 00FE                   .dbline 178
 00FE           L42:
 00FE                   .dbline 178
 00FE 20901500          lds R2,_Twi_State
 0102 2220              tst R2
 0104 E1F7              brne L41
 0106                   .dbline 179
 0106 A895              wdr
 0108                   .dbline 180
 0108           L36:
 0108                   .dbline 167
 0108 80910400          lds R24,_TwiErrorCode
 010C 8032              cpi R24,32
 010E 41F0              breq L46
 0110 80910400          lds R24,_TwiErrorCode
 0114 8833              cpi R24,56
 0116 21F0              breq L46
 0118 80910400          lds R24,_TwiErrorCode
 011C 8033              cpi R24,48
 011E 11F4              brne L44
 0120           L46:
 0120 6431              cpi R22,20
 0122 C8F2              brlo L35
 0124           L44:
 0124           L37:
 0124                   .dbline 181
 0124           ;                while(Twi_State);
 0124           ;                WDR(); //喂狗;
 0124           ;                }
 0124           ;    Twi_SendBuffer.status=TWI_DATA_FREE;
 0124 2224              clr R2
 0126 20920700          sts _Twi_SendBuffer+7,R2
 012A                   .dbline 182
 012A           ;    if(i>=TWI_FAIL_MAX) 
 012A 6431              cpi R22,20
 012C 10F0              brlo L48
 012E                   .dbline 183
 012E           ;      {
 012E                   .dbline 184
 012E           ;        return (FALSE);
 012E 0027              clr R16
 0130 04C0              xjmp L18
 0132           L48:
 0132                   .dbline 187
 0132           ;        }
 0132           ;    else
 0132           ;      {
 0132                   .dbline 188
 0132           ;        return (result-Twi_SendBuffer.count);
 0132 20900200          lds R2,_Twi_SendBuffer+2
 0136 042F              mov R16,R20
 0138 0219              sub R16,R2
 013A                   .dbline -2
 013A           L18:
 013A 0E940000          xcall pop_gset5
 013E                   .dbline 0 ; func end
 013E 0895              ret
 0140                   .dbsym r result 20 c
 0140                   .dbsym r i 22 c
 0140                   .dbsym r data 10 pc
 0140                   .dbsym r length 12 c
 0140                   .dbsym r deviceAddr 14 c
 0140                   .dbend
 0140                   .dbfunc e Twi_MasterReceive _Twi_MasterReceive fc
 0140           ;         result -> R20
 0140           ;              i -> R22
 0140           ;           data -> R10,R11
 0140           ;         length -> R12
 0140           ;     deviceAddr -> R20
                        .even
 0140           _Twi_MasterReceive::
 0140 0E940000          xcall push_gset4
 0144 C22E              mov R12,R18
 0146 402F              mov R20,R16
 0148 A884              ldd R10,y+8
 014A B984              ldd R11,y+9
 014C                   .dbline -1
 014C                   .dbline 207
 014C           ;        }
 014C           ; } 
 014C           ; /*********************************************************************************************************
 014C           ; ** 函数名称:Twi_MasterReceive
 014C           ; ** 功能描述:主模式接收
 014C           ; ** 输 入:  deviceAddr:从机地址
 014C           ; **          length:数据长度
 014C           ; **          * data  缓冲区指针
 014C           ; **
 014C           ; ** 输  出:  返回接收到的字节数           
 014C           ; ** 全局变量: 
 014C           ; ** 调用模块: 
 014C           ; ** 说明:
 014C           ; ** 注意:    
 014C           ; ** 日 期:   2006年8月29日
 014C           ; ********************************************************************************************************/
 014C           ; 
 014C           ; uint8 Twi_MasterReceive(uint8 deviceAddr, uint8 length, uint8* data) 
 014C           ; { 
 014C                   .dbline 209
 014C           ;    uint8 i,result; 
 014C           ;    WDR(); //喂狗;
 014C A895              wdr
 014E           L52:
 014E                   .dbline 211
 014E           L53:
 014E                   .dbline 211

⌨️ 快捷键说明

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