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

📄 twi.lis

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 014E           ;    // 等待总线准备完成 
 014E           ;    while(Twi_State); 
 014E 20901500          lds R2,_Twi_State
 0152 2220              tst R2
 0154 E1F7              brne L52
 0156                   .dbline 213
 0156           ;    // 设置状态 
 0156           ;    Twi_State = TWI_MASTER_RX; 
 0156 83E0              ldi R24,3
 0158 80931500          sts _Twi_State,R24
 015C                   .dbline 215
 015C           ;    // 保存数据 
 015C           ;    Twi_DeviceAddrRW = (deviceAddr|0x01);   // RW 为1 : 读操作
 015C 842F              mov R24,R20
 015E 8160              ori R24,1
 0160 80931400          sts _Twi_DeviceAddrRW,R24
 0164                   .dbline 217
 0164           ;    
 0164           ;    if(Twi_ReceiveBuffer.status==TWI_DATA_FREE)  
 0164 20901000          lds R2,_Twi_ReceiveBuffer+7
 0168 2220              tst R2
 016A 49F4              brne L55
 016C                   .dbline 218
 016C           ;          {
 016C                   .dbline 219
 016C           ;                InitQueue(&Twi_ReceiveBuffer);            //清空上次发送的信息
 016C 00E0              ldi R16,<_Twi_ReceiveBuffer
 016E 10E0              ldi R17,>_Twi_ReceiveBuffer
 0170 0E940000          xcall _InitQueue
 0174                   .dbline 220
 0174           ;          Twi_ReceiveBuffer.status=TWI_DATA_RECEIVE;
 0174 81E0              ldi R24,1
 0176 80931000          sts _Twi_ReceiveBuffer+7,R24
 017A                   .dbline 221
 017A           ;                Twi_ReceiveBuffer.memo=length; 
 017A C0921100          sts _Twi_ReceiveBuffer+8,R12
 017E                   .dbline 222
 017E           ;                }
 017E           L55:
 017E                   .dbline 225
 017E           ;  
 017E           ;    // 发送开始条件 
 017E           ;    Twi_Start(); 
 017E 86B7              in R24,0x36
 0180 8F70              andi R24,15
 0182 806A              ori R24,160
 0184 86BF              out 0x36,R24
 0186                   .dbline 226
 0186           ;    WDR(); //喂狗;
 0186 A895              wdr
 0188           L60:
 0188                   .dbline 228
 0188           L61:
 0188                   .dbline 228
 0188           ;    //等待数据准备好 
 0188           ;    while(Twi_State);                           //注意有可能引起死循环
 0188 20901500          lds R2,_Twi_State
 018C 2220              tst R2
 018E E1F7              brne L60
 0190                   .dbline 229
 0190           ;    WDR(); //喂狗;
 0190 A895              wdr
 0192                   .dbline 230
 0192           ;    i=0;
 0192 6627              clr R22
 0194 19C0              xjmp L64
 0196           L63:
 0196                   .dbline 232
 0196           ;    while(((TwiErrorCode==TW_MR_SLA_NACK)||(TwiErrorCode==TW_MR_ARB_LOST)||(TwiErrorCode==TW_MR_DATA_NACK))&&i<TWI_FAIL_MAX)  //器件不响应或总线仲裁失败
 0196           ;          {
 0196                   .dbline 233
 0196           ;                i++;
 0196 6395              inc R22
 0198                   .dbline 234
 0198           ;                if((TwiErrorCode==TW_MR_DATA_NACK)&&(Twi_ReceiveBuffer.count>=length))
 0198 80910400          lds R24,_TwiErrorCode
 019C 8835              cpi R24,88
 019E 29F4              brne L66
 01A0 20900B00          lds R2,_Twi_ReceiveBuffer+2
 01A4 2C14              cp R2,R12
 01A6 08F0              brlo L66
 01A8                   .dbline 235
 01A8           ;                {
 01A8                   .dbline 236
 01A8           ;                        break;
 01A8 1DC0              xjmp L65
 01AA           L66:
 01AA                   .dbline 239
 01AA           ;                        }
 01AA           ;                //Twi_Stop();
 01AA           ;                Delay(255);
 01AA 0FEF              ldi R16,255
 01AC 29DF              xcall _Delay
 01AE                   .dbline 240
 01AE           ;                Twi_State = TWI_MASTER_RX; 
 01AE 83E0              ldi R24,3
 01B0 80931500          sts _Twi_State,R24
 01B4                   .dbline 241
 01B4           ;                Twi_Start();
 01B4 86B7              in R24,0x36
 01B6 8F70              andi R24,15
 01B8 806A              ori R24,160
 01BA 86BF              out 0x36,R24
 01BC                   .dbline 242
 01BC           ;                WDR(); //喂狗;
 01BC A895              wdr
 01BE           L69:
 01BE                   .dbline 243
 01BE           L70:
 01BE                   .dbline 243
 01BE 20901500          lds R2,_Twi_State
 01C2 2220              tst R2
 01C4 E1F7              brne L69
 01C6                   .dbline 244
 01C6 A895              wdr
 01C8                   .dbline 245
 01C8           L64:
 01C8                   .dbline 231
 01C8 80910400          lds R24,_TwiErrorCode
 01CC 8834              cpi R24,72
 01CE 41F0              breq L74
 01D0 80910400          lds R24,_TwiErrorCode
 01D4 8833              cpi R24,56
 01D6 21F0              breq L74
 01D8 80910400          lds R24,_TwiErrorCode
 01DC 8835              cpi R24,88
 01DE 11F4              brne L72
 01E0           L74:
 01E0 6431              cpi R22,20
 01E2 C8F2              brlo L63
 01E4           L72:
 01E4           L65:
 01E4                   .dbline 247
 01E4           ;                while(Twi_State);
 01E4           ;                WDR(); //喂狗;
 01E4           ;                }
 01E4           ;          // 取数据 
 01E4           ;    for(result=0; (result<length)&&(Twi_ReceiveBuffer.count>0); result++) 
 01E4 4427              clr R20
 01E6 08C0              xjmp L78
 01E8           L75:
 01E8                   .dbline 248
 01E8 00E0              ldi R16,<_Twi_ReceiveBuffer
 01EA 10E0              ldi R17,>_Twi_ReceiveBuffer
 01EC 0E940000          xcall _DeQueue
 01F0 F501              movw R30,R10
 01F2 0193              st Z+,R16
 01F4 5F01              movw R10,R30
 01F6           L76:
 01F6                   .dbline 247
 01F6 4395              inc R20
 01F8           L78:
 01F8                   .dbline 247
 01F8 4C15              cp R20,R12
 01FA 28F4              brsh L80
 01FC 2224              clr R2
 01FE 30900B00          lds R3,_Twi_ReceiveBuffer+2
 0202 2314              cp R2,R3
 0204 88F3              brlo L75
 0206           L80:
 0206                   .dbline 249
 0206           ;       *data++ = DeQueue(&Twi_ReceiveBuffer);
 0206           ;    Twi_ReceiveBuffer.status=TWI_DATA_FREE;
 0206 2224              clr R2
 0208 20921000          sts _Twi_ReceiveBuffer+7,R2
 020C                   .dbline 250
 020C           ;    if(i>=TWI_FAIL_MAX) 
 020C 6431              cpi R22,20
 020E 10F0              brlo L82
 0210                   .dbline 251
 0210           ;      {
 0210                   .dbline 252
 0210           ;        return (FALSE);
 0210 0027              clr R16
 0212 01C0              xjmp L51
 0214           L82:
 0214                   .dbline 255
 0214           ;        }
 0214           ;    else
 0214           ;      {
 0214                   .dbline 256
 0214           ;        return (result);    //返回接收到的字节数;
 0214 042F              mov R16,R20
 0216                   .dbline -2
 0216           L51:
 0216 0E940000          xcall pop_gset4
 021A                   .dbline 0 ; func end
 021A 0895              ret
 021C                   .dbsym r result 20 c
 021C                   .dbsym r i 22 c
 021C                   .dbsym r data 10 pc
 021C                   .dbsym r length 12 c
 021C                   .dbsym r deviceAddr 20 c
 021C                   .dbend
 021C                   .dbfunc e Twi_MasterSendNI _Twi_MasterSendNI fc
 021C           ;         retval -> R20
 021C           ;           data -> R22,R23
 021C           ;         length -> R18
 021C           ;     deviceAddr -> R16
                        .even
 021C           _Twi_MasterSendNI::
 021C 0E940000          xcall push_gset2
 0220 6C81              ldd R22,y+4
 0222 7D81              ldd R23,y+5
 0224                   .dbline -1
 0224                   .dbline 273
 0224           ;        }
 0224           ; } 
 0224           ; /*********************************************************************************************************
 0224           ; ** 函数名称:Twi_MasterSendNI
 0224           ; ** 功能描述:主模式非中断发送
 0224           ; ** 输 入:  deviceAddr:从机地址
 0224           ; **          length:数据长度
 0224           ; **          * data  缓冲区指针
 0224           ; ** 输  出:             
 0224           ; ** 全局变量: 
 0224           ; ** 调用模块: 
 0224           ; ** 说明:
 0224           ; ** 注意:    
 0224           ; ** 日 期:   2006年8月29日
 0224           ; ********************************************************************************************************/
 0224           ; uint8 Twi_MasterSendNI(uint8 deviceAddr, uint8 length, uint8* data) 
 0224           ; { 
 0224                   .dbline 274
 0224           ;    uint8 retval = TWI_OK; 
 0224 4427              clr R20
 0226                   .dbline 275
 0226           ;    WDR(); //喂狗;
 0226 A895              wdr
 0228                   .dbline 277
 0228           ;    // 关Twi_中断 
 0228           ;    TWCR&=~(1<<TWIE); 
 0228 86B7              in R24,0x36
 022A 8E7F              andi R24,254
 022C 86BF              out 0x36,R24
 022E                   .dbline 278
 022E           ;    WDR(); //喂狗;
 022E A895              wdr
 0230                   .dbline 280
 0230           ;    // 发送开始条件 
 0230           ;    Twi_Start(); 
 0230 86B7              in R24,0x36
 0232 8F70              andi R24,15
 0234 806A              ori R24,160
 0236 86BF              out 0x36,R24
 0238                   .dbline 281
 0238           ;    WDR(); //喂狗;
 0238 A895              wdr
 023A                   .dbline 282
 023A           L85:
 023A                   .dbline 282
 023A           L86:
 023A                   .dbline 282
 023A           ;    Twi_WaitForComplete(); 
 023A 26B6              in R2,0x36
 023C 27FE              sbrs R2,7
 023E FDCF              rjmp L85
 0240                   .dbline 282
 0240                   .dbline 282
 0240                   .dbline 284
 0240           ;    // 发送器件写地址 
 0240           ;    Twi_SendByte( deviceAddr & 0xFE ); 
 0240                   .dbline 284
 0240 802F              mov R24,R16
 0242 8E7F              andi R24,254
 0244 83B9              out 0x3,R24
 0246                   .dbline 284
 0246 86B7              in R24,0x36
 0248 8F70              andi R24,15
 024A 8068              ori R24,128
 024C 86BF              out 0x36,R24
 024E                   .dbline 284
 024E                   .dbline 284
 024E                   .dbline 285
 024E           L88:
 024E                   .dbline 285
 024E           L89:
 024E                   .dbline 285
 024E           ;    Twi_WaitForComplete(); 
 024E 26B6              in R2,0x36
 0250 27FE              sbrs R2,7
 0252 FDCF              rjmp L88
 0254                   .dbline 285
 0254                   .dbline 285
 0254                   .dbline 287
 0254           ;    // 检查器件是否可用 
 0254           ;    if( TWSR == TW_MT_SLA_ACK) 
 0254 81B1              in R24,0x1
 0256 8831              cpi R24,24
 0258 89F4              brne L91
 025A                   .dbline 288
 025A           ;    { 
 025A 0DC0              xjmp L94
 025C           L93:
 025C                   .dbline 291
 025C           ;       // 发送数据 
 025C           ;       while(length) 
 025C           ;       { 
 025C                   .dbline 292
 025C           ;          Twi_SendByte( *data++ ); 
 025C                   .dbline 292
 025C FB01              movw R30,R22
 025E 2190              ld R2,Z+
 0260 BF01              movw R22,R30
 0262 23B8              out 0x3,R2
 0264                   .dbline 292
 0264 86B7              in R24,0x36
 0266 8F70              andi R24,15
 0268 8068              ori R24,128
 026A 86BF              out 0x36,R24
 026C                   .dbline 292
 026C                   .dbline 292

⌨️ 快捷键说明

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