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

📄 communication.lis

📁 基于PIC单片机
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 03D8           ;       Start() ;          //I2C开始
 03D8 84EA              ldi R24,164
 03DA 80937400          sts 116,R24
 03DE                   .dbline 309
 03DE           L139:
 03DE                   .dbline 309
 03DE           L140:
 03DE                   .dbline 309
 03DE           ;       Wait()  ;          //等待TWIINT标志为1
 03DE 20907400          lds R2,116
 03E2 27FE              sbrs R2,7
 03E4 FCCF              rjmp L139
 03E6                   .dbline 309
 03E6                   .dbline 309
 03E6                   .dbline 310
 03E6           ;       if(TestAck()!=TWI_START )
 03E6 80917100          lds R24,113
 03EA 887F              andi R24,248
 03EC 8830              cpi R24,8
 03EE 19F0              breq L142
 03F0                   .dbline 311
 03F0           ;       {
 03F0                   .dbline 312
 03F0           ;               TWI_Master_Initialise(); 
 03F0 DDDF              xcall _TWI_Master_Initialise
 03F2                   .dbline 313
 03F2           ;               return 1;     //出错
 03F2 01E0              ldi R16,1
 03F4 8CC0              xjmp L138
 03F6           L142:
 03F6                   .dbline 315
 03F6           ;       }       
 03F6           ;       i2c_wt_8bit(device_wt);  //写I2C从器件地址及写方式      
 03F6 0C2D              mov R16,R12
 03F8 E3DF              xcall _i2c_wt_8bit
 03FA                   .dbline 316
 03FA           L144:
 03FA                   .dbline 316
 03FA           L145:
 03FA                   .dbline 316
 03FA           ;       Wait();                 //等
 03FA 20907400          lds R2,116
 03FE 27FE              sbrs R2,7
 0400 FCCF              rjmp L144
 0402                   .dbline 316
 0402                   .dbline 316
 0402                   .dbline 317
 0402           ;       if(TestAck()!=TWI_MTX_ADR_ACK )  //ACK
 0402 80917100          lds R24,113
 0406 887F              andi R24,248
 0408 8831              cpi R24,24
 040A 19F0              breq L147
 040C                   .dbline 318
 040C           ;       {
 040C                   .dbline 319
 040C           ;               TWI_Master_Initialise(); 
 040C CFDF              xcall _TWI_Master_Initialise
 040E                   .dbline 320
 040E           ;               return 1;    //出错
 040E 01E0              ldi R16,1
 0410 7EC0              xjmp L138
 0412           L147:
 0412                   .dbline 322
 0412           ;       }       
 0412           ;       i2c_wt_8bit(addrhi); //高地址
 0412 0885              ldd R16,y+8
 0414 D5DF              xcall _i2c_wt_8bit
 0416                   .dbline 323
 0416           L149:
 0416                   .dbline 323
 0416           L150:
 0416                   .dbline 323
 0416           ;       Wait();                 //等
 0416 20907400          lds R2,116
 041A 27FE              sbrs R2,7
 041C FCCF              rjmp L149
 041E                   .dbline 323
 041E                   .dbline 323
 041E                   .dbline 324
 041E           ;       if(TestAck()!=TWI_MTX_DATA_ACK  )  //ACK
 041E 80917100          lds R24,113
 0422 887F              andi R24,248
 0424 8832              cpi R24,40
 0426 19F0              breq L152
 0428                   .dbline 325
 0428           ;       {
 0428                   .dbline 326
 0428           ;           TWI_Master_Initialise(); 
 0428 C1DF              xcall _TWI_Master_Initialise
 042A                   .dbline 327
 042A           ;           return 1;    //出错         
 042A 01E0              ldi R16,1
 042C 70C0              xjmp L138
 042E           L152:
 042E                   .dbline 329
 042E           ;       }       
 042E           ;       i2c_wt_8bit(addrlo); //低地址
 042E 0A85              ldd R16,y+10
 0430 C7DF              xcall _i2c_wt_8bit
 0432                   .dbline 330
 0432           L154:
 0432                   .dbline 330
 0432           L155:
 0432                   .dbline 330
 0432           ;       Wait();                 //等
 0432 20907400          lds R2,116
 0436 27FE              sbrs R2,7
 0438 FCCF              rjmp L154
 043A                   .dbline 330
 043A                   .dbline 330
 043A                   .dbline 331
 043A           ;       if(TestAck()!=TWI_MTX_DATA_ACK  )  //ACK
 043A 80917100          lds R24,113
 043E 887F              andi R24,248
 0440 8832              cpi R24,40
 0442 19F0              breq L157
 0444                   .dbline 332
 0444           ;       {  
 0444                   .dbline 333
 0444           ;           TWI_Master_Initialise(); 
 0444 B3DF              xcall _TWI_Master_Initialise
 0446                   .dbline 334
 0446           ;           return 1;    //出错  
 0446 01E0              ldi R16,1
 0448 62C0              xjmp L138
 044A           L157:
 044A                   .dbline 336
 044A           ;       }       
 044A           ;       Start() ;          //I2C从新开始
 044A 84EA              ldi R24,164
 044C 80937400          sts 116,R24
 0450                   .dbline 337
 0450           L159:
 0450                   .dbline 337
 0450           L160:
 0450                   .dbline 337
 0450           ;       Wait()  ;          //等待TWIINT标志为1  
 0450 20907400          lds R2,116
 0454 27FE              sbrs R2,7
 0456 FCCF              rjmp L159
 0458                   .dbline 337
 0458                   .dbline 337
 0458                   .dbline 338
 0458           ;       if(TestAck()!=TWI_REP_START  )  //ACK
 0458 80917100          lds R24,113
 045C 887F              andi R24,248
 045E 8031              cpi R24,16
 0460 19F0              breq L162
 0462                   .dbline 339
 0462           ;       {   
 0462                   .dbline 340
 0462           ;           TWI_Master_Initialise(); 
 0462 A4DF              xcall _TWI_Master_Initialise
 0464                   .dbline 341
 0464           ;           return 1;    //出错         
 0464 01E0              ldi R16,1
 0466 53C0              xjmp L138
 0468           L162:
 0468                   .dbline 343
 0468           ;       }       
 0468           ;       i2c_wt_8bit(device_rd);  //写I2C从器件地址及读方式      
 0468 0A2D              mov R16,R10
 046A AADF              xcall _i2c_wt_8bit
 046C                   .dbline 344
 046C           L164:
 046C                   .dbline 344
 046C           L165:
 046C                   .dbline 344
 046C           ;       Wait();                 //等
 046C 20907400          lds R2,116
 0470 27FE              sbrs R2,7
 0472 FCCF              rjmp L164
 0474                   .dbline 344
 0474                   .dbline 344
 0474                   .dbline 345
 0474           ;       if(TestAck()!=TWI_MRX_ADR_ACK )  //ACK
 0474 80917100          lds R24,113
 0478 887F              andi R24,248
 047A 8034              cpi R24,64
 047C 19F0              breq L167
 047E                   .dbline 346
 047E           ;       {
 047E                   .dbline 347
 047E           ;           TWI_Master_Initialise(); 
 047E 96DF              xcall _TWI_Master_Initialise
 0480                   .dbline 348
 0480           ;           return 1;    //出错 
 0480 01E0              ldi R16,1
 0482 45C0              xjmp L138
 0484           L167:
 0484                   .dbline 350
 0484           ;       }       
 0484           ;       TWCR = (1<<TWEN)|                          // TWI Interface enabled
 0484 84EC              ldi R24,196
 0486 80937400          sts 116,R24
 048A                   .dbline 354
 048A           ;            (0<<TWIE)|(1<<TWINT)|               // Enable TWI Interupt and clear the flag to read next byte
 048A           ;            (1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|    // Send ACK after reception
 048A           ;            (0<<TWWC); 
 048A           ;       delay_nus(25);  //最低值!25 
 048A 09E1              ldi R16,25
 048C 10E0              ldi R17,0
 048E BADD              xcall _delay_nus
 0490                   .dbline 355
 0490           ;     for(j=1;j<num;j++)   //读取num-1个
 0490 61E0              ldi R22,1
 0492 18C0              xjmp L172
 0494           L169:
 0494                   .dbline 356
 0494           ;       {
 0494                   .dbline 357
 0494           ;           if(TestAck()!= TWI_MRX_DATA_ACK  )  //ACK
 0494 80917100          lds R24,113
 0498 887F              andi R24,248
 049A 8035              cpi R24,80
 049C 19F0              breq L173
 049E                   .dbline 358
 049E           ;               {
 049E                   .dbline 359
 049E           ;                   TWI_Master_Initialise(); 
 049E 86DF              xcall _TWI_Master_Initialise
 04A0                   .dbline 360
 04A0           ;               return 1;    //出错     
 04A0 01E0              ldi R16,1
 04A2 35C0              xjmp L138
 04A4           L173:
 04A4                   .dbline 362
 04A4 80E0              ldi R24,<_i2c_rd_buff-1
 04A6 90E0              ldi R25,>_i2c_rd_buff-1
 04A8 E62F              mov R30,R22
 04AA FF27              clr R31
 04AC E80F              add R30,R24
 04AE F91F              adc R31,R25
 04B0 20907300          lds R2,115
 04B4 2082              std z+0,R2
 04B6                   .dbline 363
 04B6 84EC              ldi R24,196
 04B8 80937400          sts 116,R24
 04BC                   .dbline 367
 04BC 09E1              ldi R16,25
 04BE 10E0              ldi R17,0
 04C0 A1DD              xcall _delay_nus
 04C2                   .dbline 368
 04C2           L170:
 04C2                   .dbline 355
 04C2 6395              inc R22
 04C4           L172:
 04C4                   .dbline 355
 04C4 6417              cp R22,R20
 04C6 30F3              brlo L169
 04C8                   .dbline 369
 04C8           ;               }       
 04C8           ;               i2c_rd_buff[j-1]=TWDR;  //读取数
 04C8           ;               TWCR = (1<<TWEN)|                          // TWI Interface enabled
 04C8           ;                (0<<TWIE)|(1<<TWINT)|               // Enable TWI Interupt and clear the flag to read next byte
 04C8           ;                (1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|    // Send ACK after reception
 04C8           ;                (0<<TWWC);     
 04C8           ;               delay_nus(25);   //最低值! 25
 04C8           ;       }       
 04C8           ;       if(TestAck()!= TWI_MRX_DATA_ACK  )  //ACK
 04C8 80917100          lds R24,113
 04CC 887F              andi R24,248
 04CE 8035              cpi R24,80
 04D0 19F0              breq L176
 04D2                   .dbline 370
 04D2           ;       {
 04D2                   .dbline 371
 04D2           ;           TWI_Master_Initialise(); 
 04D2 6CDF              xcall _TWI_Master_Initialise
 04D4                   .dbline 372
 04D4           ;           return 1;    //出错 
 04D4 01E0              ldi R16,1
 04D6 1BC0              xjmp L138
 04D8           L176:
 04D8                   .dbline 374
 04D8           ;       }       
 04D8           ;     i2c_rd_buff[num-1]=TWDR;  //读取数
 04D8 80E0              ldi R24,<_i2c_rd_buff-1
 04DA 90E0              ldi R25,>_i2c_rd_buff-1
 04DC E42F              mov R30,R20
 04DE FF27              clr R31
 04E0 E80F              add R30,R24
 04E2 F91F              adc R31,R25
 04E4 20907300          lds R2,115
 04E8 2082              std z+0,R2
 04EA                   .dbline 375
 04EA           ;       TWCR = (1<<TWEN)|                          // TWI Interface enabled
 04EA 84E8              ldi R24,132
 04EC 80937400          sts 116,R24
 04F0                   .dbline 379
 04F0           ;            (0<<TWIE)|(1<<TWINT)|               // Enable TWI Interupt and clear the flag to read next byte
 04F0           ;            (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|    // Send NACK after reception
 04F0           ;            (0<<TWWC); 
 04F0           ;       delay_nus(25);   //最低值!   25
 04F0 09E1              ldi R16,25
 04F2 10E0              ldi R17,0
 04F4 87DD              xcall _delay_nus
 04F6                   .dbline 380
 04F6           ;       if(TestAck()!= TWI_MRX_DATA_NACK   )  //NACK
 04F6 80917100          lds R24,113
 04FA 887F              andi R24,248
 04FC 8835              cpi R24,88
 04FE 19F0              breq L179
 0500                   .dbline 381
 0500           ;       {
 0500                   .dbline 382
 0500           ;           TWI_Master_Initialise(); 
 0500 55DF              xcall _TWI_Master_Initialise
 0502                   .dbline 383
 0502           ;           return 1;    //出错         
 0502 01E0              ldi R16,1
 0504 04C0              xjmp L138
 0506           L179:
 0506                   .dbline 385
 0506           ;       }          
 0506           ;       Stop();   //I2C停止
 0506 84E9              ldi R24,148
 0508 80937400          sts 116,R24
 050C                   .dbline 386
 050C           ;       return 0;   //整个过程正常时返

⌨️ 快捷键说明

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