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

📄 mp3.lst

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0AA0 918001EB  LDS	R24,TwiErrorCode
    0AA2 3380      CPI	R24,0x30
    0AA3 F429      BNE	0x0AA9
    0AA4 902000C1  LDS	R2,Twi_SendBuffer+2
    0AA6 2022      TST	R2
    0AA7 F409      BNE	0x0AA9
(0171) 	         {
(0172) 			 break;
    0AA8 C01D      RJMP	0x0AC6
(0173) 			 }
(0174) 		 Delay(255);
    0AA9 EF0F      LDI	R16,0xFF
    0AAA DF89      RCALL	_Delay
(0175) 		 Twi_State = TWI_MASTER_TX; 
    0AAB E082      LDI	R24,2
    0AAC 938001FC  STS	Twi_State,R24
(0176) 		 Twi_Start();
    0AAE B786      IN	R24,0x36
    0AAF 708F      ANDI	R24,0xF
    0AB0 6A80      ORI	R24,0xA0
    0AB1 BF86      OUT	0x36,R24
(0177) 		 WDR(); //喂狗;
    0AB2 95A8      WDR
(0178) 		 while(Twi_State);
    0AB3 902001FC  LDS	R2,Twi_State
    0AB5 2022      TST	R2
    0AB6 F7E1      BNE	0x0AB3
(0179) 		 WDR(); //喂狗;
    0AB7 95A8      WDR
    0AB8 918001EB  LDS	R24,TwiErrorCode
    0ABA 3280      CPI	R24,0x20
    0ABB F041      BEQ	0x0AC4
    0ABC 918001EB  LDS	R24,TwiErrorCode
    0ABE 3388      CPI	R24,0x38
    0ABF F021      BEQ	0x0AC4
    0AC0 918001EB  LDS	R24,TwiErrorCode
    0AC2 3380      CPI	R24,0x30
    0AC3 F411      BNE	0x0AC6
    0AC4 3164      CPI	R22,0x14
    0AC5 F2C8      BCS	0x0A9F
(0180) 		 }
(0181)    Twi_SendBuffer.status=TWI_DATA_FREE;
    0AC6 2422      CLR	R2
    0AC7 922000C6  STS	0xC6,R2
(0182)    if(i>=TWI_FAIL_MAX) 
    0AC9 3164      CPI	R22,0x14
    0ACA F010      BCS	0x0ACD
(0183)      {
(0184) 	 return (FALSE);
    0ACB 2700      CLR	R16
    0ACC C004      RJMP	0x0AD1
(0185) 	 }
(0186)    else
(0187)      {
(0188) 	 return (result-Twi_SendBuffer.count);
    0ACD 902000C1  LDS	R2,Twi_SendBuffer+2
    0ACF 2F04      MOV	R16,R20
    0AD0 1902      SUB	R16,R2
    0AD1 940E1918  CALL	pop_gset5
    0AD3 9508      RET
_Twi_MasterReceive:
  result               --> R20
  i                    --> R22
  data                 --> R10
  length               --> R12
  deviceAddr           --> R20
    0AD4 940E191D  CALL	push_gset4
    0AD6 2EC2      MOV	R12,R18
    0AD7 2F40      MOV	R20,R16
    0AD8 84A8      LDD	R10,Y+8
    0AD9 84B9      LDD	R11,Y+9
(0189) 	 }
(0190) } 
(0191) /*********************************************************************************************************
(0192) ** 函数名称:Twi_MasterReceive
(0193) ** 功能描述:主模式接收
(0194) ** 输 入:  deviceAddr:从机地址
(0195) **          length:数据长度
(0196) **          * data  缓冲区指针
(0197) **
(0198) ** 输  出:  返回接收到的字节数           
(0199) ** 全局变量: 
(0200) ** 调用模块: 
(0201) ** 说明:
(0202) ** 注意:    
(0203) ** 日 期:   2006年8月29日
(0204) ********************************************************************************************************/
(0205) 
(0206) uint8 Twi_MasterReceive(uint8 deviceAddr, uint8 length, uint8* data) 
(0207) { 
(0208)    uint8 i,result; 
(0209)    WDR(); //喂狗;
    0ADA 95A8      WDR
(0210)    // 等待总线准备完成 
(0211)    while(Twi_State); 
    0ADB 902001FC  LDS	R2,Twi_State
    0ADD 2022      TST	R2
    0ADE F7E1      BNE	0x0ADB
(0212)    // 设置状态 
(0213)    Twi_State = TWI_MASTER_RX; 
    0ADF E083      LDI	R24,3
    0AE0 938001FC  STS	Twi_State,R24
(0214)    // 保存数据 
(0215)    Twi_DeviceAddrRW = (deviceAddr|0x01);   // RW 为1 : 读操作
    0AE2 2F84      MOV	R24,R20
    0AE3 6081      ORI	R24,1
    0AE4 938001FB  STS	Twi_DeviceAddrRW,R24
(0216)    
(0217)    if(Twi_ReceiveBuffer.status==TWI_DATA_FREE)  
    0AE6 902000CF  LDS	R2,0xCF
    0AE8 2022      TST	R2
    0AE9 F449      BNE	0x0AF3
(0218)          {
(0219) 		 InitQueue(&Twi_ReceiveBuffer);            //清空上次发送的信息
    0AEA EC08      LDI	R16,0xC8
    0AEB E010      LDI	R17,0
    0AEC 940E08FE  CALL	_InitQueue
(0220)          Twi_ReceiveBuffer.status=TWI_DATA_RECEIVE;
    0AEE E081      LDI	R24,1
    0AEF 938000CF  STS	0xCF,R24
(0221) 		 Twi_ReceiveBuffer.memo=length; 
    0AF1 92C000D0  STS	0xD0,R12
(0222) 		 }
(0223)  
(0224)    // 发送开始条件 
(0225)    Twi_Start(); 
    0AF3 B786      IN	R24,0x36
    0AF4 708F      ANDI	R24,0xF
    0AF5 6A80      ORI	R24,0xA0
    0AF6 BF86      OUT	0x36,R24
(0226)    WDR(); //喂狗;
    0AF7 95A8      WDR
(0227)    //等待数据准备好 
(0228)    while(Twi_State);                           //注意有可能引起死循环
    0AF8 902001FC  LDS	R2,Twi_State
    0AFA 2022      TST	R2
    0AFB F7E1      BNE	0x0AF8
(0229)    WDR(); //喂狗;
    0AFC 95A8      WDR
(0230)    i=0;
    0AFD 2766      CLR	R22
    0AFE C019      RJMP	0x0B18
(0231)    while(((TwiErrorCode==TW_MR_SLA_NACK)||(TwiErrorCode==TW_MR_ARB_LOST)||(TwiErrorCode==TW_MR_DATA_NACK))&&i<TWI_FAIL_MAX)  //器件不响应或总线仲裁失败
(0232)          {
(0233) 		 i++;
    0AFF 9563      INC	R22
(0234) 		 if((TwiErrorCode==TW_MR_DATA_NACK)&&(Twi_ReceiveBuffer.count>=length))
    0B00 918001EB  LDS	R24,TwiErrorCode
    0B02 3588      CPI	R24,0x58
    0B03 F429      BNE	0x0B09
    0B04 902000CA  LDS	R2,Twi_ReceiveBuffer+2
    0B06 142C      CP	R2,R12
    0B07 F008      BCS	0x0B09
(0235) 	         {
(0236) 			 break;
    0B08 C01D      RJMP	0x0B26
(0237) 			 }
(0238) 		 //Twi_Stop();
(0239) 		 Delay(255);
    0B09 EF0F      LDI	R16,0xFF
    0B0A DF29      RCALL	_Delay
(0240) 		 Twi_State = TWI_MASTER_RX; 
    0B0B E083      LDI	R24,3
    0B0C 938001FC  STS	Twi_State,R24
(0241) 		 Twi_Start();
    0B0E B786      IN	R24,0x36
    0B0F 708F      ANDI	R24,0xF
    0B10 6A80      ORI	R24,0xA0
    0B11 BF86      OUT	0x36,R24
(0242) 		 WDR(); //喂狗;
    0B12 95A8      WDR
(0243) 		 while(Twi_State);
    0B13 902001FC  LDS	R2,Twi_State
    0B15 2022      TST	R2
    0B16 F7E1      BNE	0x0B13
(0244) 		 WDR(); //喂狗;
    0B17 95A8      WDR
    0B18 918001EB  LDS	R24,TwiErrorCode
    0B1A 3488      CPI	R24,0x48
    0B1B F041      BEQ	0x0B24
    0B1C 918001EB  LDS	R24,TwiErrorCode
    0B1E 3388      CPI	R24,0x38
    0B1F F021      BEQ	0x0B24
    0B20 918001EB  LDS	R24,TwiErrorCode
    0B22 3588      CPI	R24,0x58
    0B23 F411      BNE	0x0B26
    0B24 3164      CPI	R22,0x14
    0B25 F2C8      BCS	0x0AFF
(0245) 		 }
(0246) 	   // 取数据 
(0247)    for(result=0; (result<length)&&(Twi_ReceiveBuffer.count>0); result++) 
    0B26 2744      CLR	R20
    0B27 C008      RJMP	0x0B30
(0248)       *data++ = DeQueue(&Twi_ReceiveBuffer);
    0B28 EC08      LDI	R16,0xC8
    0B29 E010      LDI	R17,0
    0B2A 940E093E  CALL	_DeQueue
    0B2C 01F5      MOVW	R30,R10
    0B2D 9301      ST	R16,Z+
    0B2E 015F      MOVW	R10,R30
    0B2F 9543      INC	R20
    0B30 154C      CP	R20,R12
    0B31 F428      BCC	0x0B37
    0B32 2422      CLR	R2
    0B33 903000CA  LDS	R3,Twi_ReceiveBuffer+2
    0B35 1423      CP	R2,R3
    0B36 F388      BCS	0x0B28
(0249)    Twi_ReceiveBuffer.status=TWI_DATA_FREE;
    0B37 2422      CLR	R2
    0B38 922000CF  STS	0xCF,R2
(0250)    if(i>=TWI_FAIL_MAX) 
    0B3A 3164      CPI	R22,0x14
    0B3B F010      BCS	0x0B3E
(0251)      {
(0252) 	 return (FALSE);
    0B3C 2700      CLR	R16
    0B3D C001      RJMP	0x0B3F
(0253) 	 }
(0254)    else
(0255)      {
(0256) 	 return (result);    //返回接收到的字节数;
    0B3E 2F04      MOV	R16,R20
    0B3F 940E1915  CALL	pop_gset4
    0B41 9508      RET
_Twi_MasterSendNI:
  retval               --> R20
  data                 --> R22
  length               --> R18
  deviceAddr           --> R16
    0B42 940E1921  CALL	push_gset2
    0B44 816C      LDD	R22,Y+4
    0B45 817D      LDD	R23,Y+5
(0257) 	 }
(0258) } 
(0259) /*********************************************************************************************************
(0260) ** 函数名称:Twi_MasterSendNI
(0261) ** 功能描述:主模式非中断发送
(0262) ** 输 入:  deviceAddr:从机地址
(0263) **          length:数据长度
(0264) **          * data  缓冲区指针
(0265) ** 输  出:             
(0266) ** 全局变量: 
(0267) ** 调用模块: 
(0268) ** 说明:
(0269) ** 注意:    
(0270) ** 日 期:   2006年8月29日
(0271) ********************************************************************************************************/
(0272) uint8 Twi_MasterSendNI(uint8 deviceAddr, uint8 length, uint8* data) 
(0273) { 
(0274)    uint8 retval = TWI_OK; 
    0B46 2744      CLR	R20
(0275)    WDR(); //喂狗;
    0B47 95A8      WDR
(0276)    // 关Twi_中断 
(0277)    TWCR&=~(1<<TWIE); 
    0B48 B786      IN	R24,0x36
    0B49 7F8E      ANDI	R24,0xFE
    0B4A BF86      OUT	0x36,R24
(0278)    WDR(); //喂狗;
    0B4B 95A8      WDR
(0279)    // 发送开始条件 
(0280)    Twi_Start(); 
    0B4C B786      IN	R24,0x36
    0B4D 708F      ANDI	R24,0xF
    0B4E 6A80      ORI	R24,0xA0
    0B4F BF86      OUT	0x36,R24
(0281)    WDR(); //喂狗;
    0B50 95A8      WDR
(0282)    Twi_WaitForComplete(); 
    0B51 B626      IN	R2,0x36
    0B52 FE27      SBRS	R2,7
    0B53 CFFD      RJMP	0x0B51
(0283)    // 发送器件写地址 
(0284)    Twi_SendByte( deviceAddr & 0xFE ); 
    0B54 2F80      MOV	R24,R16
    0B55 7F8E      ANDI	R24,0xFE
    0B56 B983      OUT	0x03,R24
    0B57 B786      IN	R24,0x36
    0B58 708F      ANDI	R24,0xF
    0B59 6880      ORI	R24,0x80
    0B5A BF86      OUT	0x36,R24
(0285)    Twi_WaitForComplete(); 
    0B5B B626      IN	R2,0x36
    0B5C FE27      SBRS	R2,7
    0B5D CFFD      RJMP	0x0B5B
(0286)    // 检查器件是否可用 
(0287)    if( TWSR == TW_MT_SLA_ACK) 
    0B5E B181      IN	R24,0x01
    0B5F 3188      CPI	R24,0x18
    0B60 F489      BNE	0x0B72
(0288)    { 
    0B61 C00D      RJMP	0x0B6F
(0289)       // 发送数据 
(0290)       while(length) 
(0291)       { 
(0292)          Twi_SendByte( *data++ ); 
    0B62 01FB      MOVW	R30,R22
    0B63 9021      LD	R2,Z+
    0B64 01BF      MOVW	R22,R30
    0B65 B823      OUT	0x03,R2
    0B66 B786      IN	R24,0x36
    0B67 708F      ANDI	R24,0xF
    0B68 6880      ORI	R24,0x80
    0B69 BF86      OUT	0x36,R24
(0293)          Twi_WaitForComplete(); 
    0B6A B626      IN	R2,0x36
    0B6B FE27      SBRS	R2,7
    0B6C CFFD      RJMP	0x0B6A
(0294)          length--; 
    0B6D 952A      DEC	R18
(0295) 		 WDR(); //喂狗;
    0B6E 95A8      WDR
    0B6F 2322      TST	R18
    0B70 F789      BNE	0x0B62
(0296)       } 
(0297)    } 
    0B71 C001      RJMP	0x0B73
(0298)    else 
(0299)    { 
(0300)       // 如未回应器件地址,停止发送,返回错误 
(0301)          retval = TWI_ERROR_NODEV; 
    0B72 E041      LDI	R20,1
(0302)    } 
(0303) 
(0304)    // 发送停止条件,保持TWEA以便从接收 
(0305)    Twi_Stop(); 
    0B73 B786      IN	R24,0x36
    0B74 708F      ANDI	R24,0xF
    0B75 6D80      ORI	R24,0xD0
    0B76 BF86      OUT	0x36,R24
(0306)    while( !(TWCR&(1<<TWSTO)) ); 
    0B77 B626      IN	R2,0x36
    0B78 FE24      SBRS	R2,4
    0B79 CFFD      RJMP	0x0B77
(0307)    // 开Twi_中断 
(0308)    TWCR|=(1<<TWIE); 
    0B7A B786      IN	R24,0x36
    0B7B 6081      ORI	R24,1
    0B7C BF86      OUT	0x36,R24
(0309)    return retval; 
    0B7D 2F04      MOV	R16,R20
    0B7E 940E190F  CALL	pop_gset2
    0B80 9508      RET
_Twi_MasterReceiveNI:
  retval               --> R20
  data                 --> R22
  length               --> R18
  deviceAddr           --> R16
    0B81 940E1921  CALL	push_gset2
    0B83 816C      LDD	R22,Y+4
    0B84 817D      LDD	R23,Y+5
(0310) } 
(0311) /*********************************************************************************************************
(0312) ** 函数名称:主模式非中断接收
(0313) ** 功能描述:
(0314) ** 输 入:  deviceAddr:从机地址
(0315) **          length:数据长度
(0316) **          * data  缓冲区指针
(0317) ** 输  出:             
(0318) ** 全局变量: 
(0319) ** 调用模块: 
(0320) ** 说明:
(0321) ** 注意:    
(0322) ** 日 期:   2006年8月29日
(0323) ********************************************************************************************************/
(0324) 
(0325) uint8 Twi_MasterReceiveNI(uint8 deviceAddr, uint8 length, uint8 *data) 

⌨️ 快捷键说明

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