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

📄 hard_i2c.lis

📁 meg16 的所有功能实例
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0166                   .dbline 220
 0166                   .dbline 221
 0166           ;         if(TestAck()!=MT_DATA_ACK) continue;//ACK
 0166 81B1              in R24,0x1
 0168 887F              andi R24,248
 016A 8832              cpi R24,40
 016C 09F0              breq L45
 016E                   .dbline 221
 016E 0AC0              xjmp L30
 0170           L45:
 0170                   .dbline 222
 0170           ;         Write8Bit(Wdata);//写数据到24C02的ROM
 0170                   .dbline 222
 0170 63B9              out 0x3,R22
 0172                   .dbline 222
 0172 84E8              ldi R24,132
 0174 86BF              out 0x36,R24
 0176                   .dbline 222
 0176                   .dbline 222
 0176                   .dbline 223
 0176           L47:
 0176                   .dbline 223
 0176           L48:
 0176                   .dbline 223
 0176 26B6              in R2,0x36
 0178 27FE              sbrs R2,7
 017A FDCF              rjmp L47
 017C                   .dbline 223
 017C                   .dbline 223
 017C                   .dbline 224
 017C 81B1              in R24,0x1
 017E 887F              andi R24,248
 0180 8832              cpi R24,40
 0182 29F0              breq L31
 0184                   .dbline 224
 0184                   .dbline 225
 0184           L30:
 0184                   .dbline 207
 0184 242E              mov R2,R20
 0186 3324              clr R3
 0188 4150              subi R20,1
 018A 2220              tst R2
 018C 61F6              brne L29
 018E           L31:
 018E                   .dbline 227
 018E           ;         Wait();
 018E           ;         if(TestAck()!=MT_DATA_ACK) continue;//ACK
 018E           ;         break;
 018E           ;         }
 018E           ;         Stop();//I2C停止
 018E 84E9              ldi R24,148
 0190 86BF              out 0x36,R24
 0192                   .dbline 228
 0192           ;         Delay_ms(10);//延时10ms等EEPROM写完
 0192 0AE0              ldi R16,10
 0194 10E0              ldi R17,0
 0196 3CDF              xcall _Delay_ms
 0198                   .dbline 229
 0198           ;         return 1;
 0198 01E0              ldi R16,1
 019A                   .dbline -2
 019A           L28:
 019A 0E940000          xcall pop_gset3
 019E                   .dbline 0 ; func end
 019E 0895              ret
 01A0                   .dbsym r number 20 c
 01A0                   .dbsym r Wdata 22 c
 01A0                   .dbsym r RomAddress 10 c
 01A0                   .dbend
 01A0                   .dbfunc e i2c_Read _i2c_Read fc
 01A0           ;         number -> R22
 01A0           ;           temp -> R20
 01A0           ;              a -> R10
 01A0           ;     RomAddress -> R16
                        .even
 01A0           _i2c_Read::
 01A0 0E940000          xcall push_gset3
 01A4                   .dbline -1
 01A4                   .dbline 236
 01A4           ; }
 01A4           ; /******************************************
 01A4           ;                I2C总线读一个字节
 01A4           ;                          
 01A4           ; *******************************************/
 01A4           ; unsigned char i2c_Read(unsigned char RomAddress) 
 01A4           ;  {char a=0x00;
 01A4                   .dbline 236
 01A4 AA24              clr R10
 01A6                   .dbline 237
 01A6           ;   unsigned char temp=0;
 01A6 4427              clr R20
 01A8                   .dbline 238
 01A8           ;   unsigned char number=10;
 01A8 6AE0              ldi R22,10
 01AA 44C0              xjmp L54
 01AC           L53:
 01AC                   .dbline 241
 01AC           ;   
 01AC           ;   while(number--)
 01AC           ;          {
 01AC                   .dbline 242
 01AC           ;          Start();//I2C启动
 01AC 84EA              ldi R24,164
 01AE 86BF              out 0x36,R24
 01B0                   .dbline 243
 01B0           L56:
 01B0                   .dbline 243
 01B0           L57:
 01B0                   .dbline 243
 01B0           ;          Wait();
 01B0 26B6              in R2,0x36
 01B2 27FE              sbrs R2,7
 01B4 FDCF              rjmp L56
 01B6                   .dbline 243
 01B6                   .dbline 243
 01B6                   .dbline 244
 01B6           ;          a=TestAck();
 01B6 81B1              in R24,0x1
 01B8 887F              andi R24,248
 01BA A82E              mov R10,R24
 01BC                   .dbline 246
 01BC           ;         
 01BC           ;          if (a!=START) continue;//ACK  
 01BC 8830              cpi R24,8
 01BE 09F0              breq L59
 01C0                   .dbline 246
 01C0 39C0              xjmp L54
 01C2           L59:
 01C2                   .dbline 248
 01C2           ;          
 01C2           ;          Write8Bit(wr_device_add);//写I2C从器件地址和写方式
 01C2                   .dbline 248
 01C2 80EA              ldi R24,160
 01C4 83B9              out 0x3,R24
 01C6                   .dbline 248
 01C6 84E8              ldi R24,132
 01C8 86BF              out 0x36,R24
 01CA                   .dbline 248
 01CA                   .dbline 248
 01CA                   .dbline 249
 01CA           L61:
 01CA                   .dbline 249
 01CA           L62:
 01CA                   .dbline 249
 01CA           ;          Wait(); 
 01CA 26B6              in R2,0x36
 01CC 27FE              sbrs R2,7
 01CE FDCF              rjmp L61
 01D0                   .dbline 249
 01D0                   .dbline 249
 01D0                   .dbline 251
 01D0           ;          
 01D0           ;          if (TestAck()!=MT_SLA_ACK) continue;//ACK
 01D0 81B1              in R24,0x1
 01D2 887F              andi R24,248
 01D4 8831              cpi R24,24
 01D6 09F0              breq L64
 01D8                   .dbline 251
 01D8 2DC0              xjmp L54
 01DA           L64:
 01DA                   .dbline 254
 01DA           ;         
 01DA           ; 
 01DA           ;          Write8Bit(RomAddress);//写STA013的ROM地址
 01DA                   .dbline 254
 01DA 03B9              out 0x3,R16
 01DC                   .dbline 254
 01DC 84E8              ldi R24,132
 01DE 86BF              out 0x36,R24
 01E0                   .dbline 254
 01E0                   .dbline 254
 01E0                   .dbline 255
 01E0           L66:
 01E0                   .dbline 255
 01E0           L67:
 01E0                   .dbline 255
 01E0           ;          Wait();
 01E0 26B6              in R2,0x36
 01E2 27FE              sbrs R2,7
 01E4 FDCF              rjmp L66
 01E6                   .dbline 255
 01E6                   .dbline 255
 01E6                   .dbline 257
 01E6           ;          
 01E6           ;          if (TestAck()!=MT_DATA_ACK) continue;
 01E6 81B1              in R24,0x1
 01E8 887F              andi R24,248
 01EA 8832              cpi R24,40
 01EC 09F0              breq L69
 01EE                   .dbline 257
 01EE 22C0              xjmp L54
 01F0           L69:
 01F0                   .dbline 258
 01F0           ;          Start();//I2C重新启动
 01F0 84EA              ldi R24,164
 01F2 86BF              out 0x36,R24
 01F4                   .dbline 259
 01F4           L71:
 01F4                   .dbline 259
 01F4           L72:
 01F4                   .dbline 259
 01F4           ;          Wait();
 01F4 26B6              in R2,0x36
 01F6 27FE              sbrs R2,7
 01F8 FDCF              rjmp L71
 01FA                   .dbline 259
 01FA                   .dbline 259
 01FA                   .dbline 260
 01FA           ;          if (TestAck()!=RE_START)  continue;
 01FA 81B1              in R24,0x1
 01FC 887F              andi R24,248
 01FE 8031              cpi R24,16
 0200 09F0              breq L74
 0202                   .dbline 260
 0202 18C0              xjmp L54
 0204           L74:
 0204                   .dbline 262
 0204           ;          
 0204           ;          Write8Bit(rd_device_add);//写I2C从器件地址和读方式
 0204                   .dbline 262
 0204 81EA              ldi R24,161
 0206 83B9              out 0x3,R24
 0208                   .dbline 262
 0208 84E8              ldi R24,132
 020A 86BF              out 0x36,R24
 020C                   .dbline 262
 020C                   .dbline 262
 020C                   .dbline 263
 020C           L76:
 020C                   .dbline 263
 020C           L77:
 020C                   .dbline 263
 020C           ;          Wait();
 020C 26B6              in R2,0x36
 020E 27FE              sbrs R2,7
 0210 FDCF              rjmp L76
 0212                   .dbline 263
 0212                   .dbline 263
 0212                   .dbline 265
 0212           ;          
 0212           ;          if(TestAck()!=MR_SLA_ACK)  continue;//ACK
 0212 81B1              in R24,0x1
 0214 887F              andi R24,248
 0216 8034              cpi R24,64
 0218 09F0              breq L79
 021A                   .dbline 265
 021A 0CC0              xjmp L54
 021C           L79:
 021C                   .dbline 266
 021C           ;          Twi();//启动主I2C读方式
 021C 84E8              ldi R24,132
 021E 86BF              out 0x36,R24
 0220                   .dbline 268
 0220           L81:
 0220                   .dbline 268
 0220           L82:
 0220                   .dbline 268
 0220           ;          
 0220           ;          Wait();
 0220 26B6              in R2,0x36
 0222 27FE              sbrs R2,7
 0224 FDCF              rjmp L81
 0226                   .dbline 268
 0226                   .dbline 268
 0226                   .dbline 270
 0226           ;          
 0226           ;          if(TestAck()!=MR_DATA_NOACK) continue;//ACK  
 0226 81B1              in R24,0x1
 0228 887F              andi R24,248
 022A 8835              cpi R24,88
 022C 09F0              breq L84
 022E                   .dbline 270
 022E 02C0              xjmp L54
 0230           L84:
 0230                   .dbline 271
 0230 43B1              in R20,0x3
 0232                   .dbline 273
 0232 06C0              xjmp L55
 0234           L54:
 0234                   .dbline 240
 0234 262E              mov R2,R22
 0236 3324              clr R3
 0238 6150              subi R22,1
 023A 2220              tst R2
 023C 09F0              breq X3
 023E B6CF              xjmp L53
 0240           X3:
 0240           L55:
 0240                   .dbline 275
 0240           ;          temp=TWDR;//读取I2C接收数据
 0240           ;          
 0240           ;          break;
 0240           ;          }
 0240           ;        Stop();//I2C停止
 0240 84E9              ldi R24,148
 0242 86BF              out 0x36,R24
 0244                   .dbline 277
 0244           ;          
 0244           ;          return temp;
 0244 042F              mov R16,R20
 0246                   .dbline -2
 0246           L52:
 0246 0E940000          xcall pop_gset3
 024A                   .dbline 0 ; func end
 024A 0895              ret
 024C                   .dbsym r number 22 c
 024C                   .dbsym r temp 20 c
 024C                   .dbsym r a 10 c
 024C                   .dbsym r RomAddress 16 c
 024C                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\HARD_I~1\Hard_I2C.c
 0000           _DISP_NUM::
 0000                   .blkb 1
 0001                   .dbsym e DISP_NUM _DISP_NUM c

⌨️ 快捷键说明

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