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

📄 24c02.lis

📁 meg16 的所有功能实例
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 021A           ; }
 021A           ; //=======================================================================
 021A           ; //向IIC总线写数据。SCL=0时SDA的数据可改变,SCL=1时需保持SDA数据稳定。
 021A           ; void IICSendByte(unsigned char sendbyte)
 021A           ; {
 021A                   .dbline 265
 021A           ;       uint8 j=8;
 021A 48E0              ldi R20,8
 021C                   .dbline 266
 021C           ;       for(;j>0;j--)
 021C 15C0              xjmp L43
 021E           L40:
 021E                   .dbline 267
 021E           ;       {
 021E                   .dbline 268
 021E           ;               SCL_0;
 021E                   .dbline 268
 021E A898              cbi 0x15,0
 0220                   .dbline 268
 0220 04E6              ldi R16,100
 0222 10E0              ldi R17,0
 0224 EDDE              xcall _Delay_us
 0226                   .dbline 268
 0226                   .dbline 268
 0226                   .dbline 270
 0226           ;               
 0226           ;               if(sendbyte&0x80)       SDA_1           //SCL=0时写数据到SDA 
 0226 67FF              sbrs R22,7
 0228 05C0              rjmp L44
 022A                   .dbline 270
 022A                   .dbline 270
 022A A99A              sbi 0x15,1
 022C                   .dbline 270
 022C 04E6              ldi R16,100
 022E 10E0              ldi R17,0
 0230 E7DE              xcall _Delay_us
 0232                   .dbline 270
 0232 04C0              xjmp L45
 0234           L44:
 0234                   .dbline 271
 0234           ;               else                SDA_0
 0234                   .dbline 271
 0234 A998              cbi 0x15,1
 0236                   .dbline 271
 0236 04E6              ldi R16,100
 0238 10E0              ldi R17,0
 023A E2DE              xcall _Delay_us
 023C                   .dbline 271
 023C           L45:
 023C                   .dbline 273
 023C 660F              lsl R22
 023E                   .dbline 275
 023E                   .dbline 275
 023E A89A              sbi 0x15,0
 0240                   .dbline 275
 0240 04E6              ldi R16,100
 0242 10E0              ldi R17,0
 0244 DDDE              xcall _Delay_us
 0246                   .dbline 275
 0246                   .dbline 275
 0246                   .dbline 276
 0246           L41:
 0246                   .dbline 266
 0246 4A95              dec R20
 0248           L43:
 0248                   .dbline 266
 0248 2224              clr R2
 024A 2416              cp R2,R20
 024C 40F3              brlo L40
 024E                   .dbline 277
 024E           ;                 
 024E           ;               sendbyte<<=1;
 024E           ;               
 024E           ;               SCL_1;
 024E           ;       }
 024E           ;       SCL_0;
 024E                   .dbline 277
 024E A898              cbi 0x15,0
 0250                   .dbline 277
 0250 04E6              ldi R16,100
 0252 10E0              ldi R17,0
 0254 D5DE              xcall _Delay_us
 0256                   .dbline 277
 0256                   .dbline 277
 0256                   .dbline -2
 0256           L39:
 0256 0E940000          xcall pop_gset2
 025A                   .dbline 0 ; func end
 025A 0895              ret
 025C                   .dbsym r j 20 c
 025C                   .dbsym r sendbyte 22 c
 025C                   .dbend
 025C                   .dbfunc e i2c_Read _i2c_Read fc
 025C           ;     ErrorCount -> R22
 025C           ;           data -> R20
 025C           ;         device -> R10
 025C           ;        subAddr -> R12
                        .even
 025C           _i2c_Read::
 025C 0E940000          xcall push_gset4
 0260 A22E              mov R10,R18
 0262 C02E              mov R12,R16
 0264                   .dbline -1
 0264                   .dbline 283
 0264           ; }
 0264           ; 
 0264           ; //=======================================================================
 0264           ; //通过I2C读STA013
 0264           ; unsigned char i2c_Read(unsigned char subAddr,uint8 device)
 0264           ; {   
 0264                   .dbline 284
 0264           ;       uint8 data=0;
 0264 4427              clr R20
 0266                   .dbline 285
 0266           ;       uint8 ErrorCount=10;
 0266 6AE0              ldi R22,10
 0268 19C0              xjmp L48
 026A           L47:
 026A                   .dbline 289
 026A           ;       //Delay_us(1200);
 026A           ;       
 026A           ;       while(ErrorCount--)
 026A           ;       {
 026A                   .dbline 290
 026A           ;               IICStart();
 026A 57DF              xcall _IICStart
 026C                   .dbline 291
 026C           ;               IICSendByte(device);
 026C 0A2D              mov R16,R10
 026E D2DF              xcall _IICSendByte
 0270                   .dbline 293
 0270           ;               
 0270           ;               if(IICRecAck()) continue;                       //如果为非0应答,重复写
 0270 7ADF              xcall _IICRecAck
 0272 0023              tst R16
 0274 09F0              breq L50
 0276                   .dbline 293
 0276 12C0              xjmp L48
 0278           L50:
 0278                   .dbline 295
 0278           ;               
 0278           ;               IICSendByte(subAddr);   
 0278 0C2D              mov R16,R12
 027A CCDF              xcall _IICSendByte
 027C                   .dbline 296
 027C           ;               if(IICRecAck()) continue;       //如果为非0应答,重复写
 027C 74DF              xcall _IICRecAck
 027E 0023              tst R16
 0280 09F0              breq L52
 0282                   .dbline 296
 0282 0CC0              xjmp L48
 0284           L52:
 0284                   .dbline 297
 0284           ;               IICStart();
 0284 4ADF              xcall _IICStart
 0286                   .dbline 298
 0286           ;               IICSendByte(device | 0x01);     
 0286 0A2D              mov R16,R10
 0288 0160              ori R16,1
 028A C4DF              xcall _IICSendByte
 028C                   .dbline 299
 028C           ;               if(IICRecAck()) continue;
 028C 6CDF              xcall _IICRecAck
 028E 0023              tst R16
 0290 09F0              breq L54
 0292                   .dbline 299
 0292 04C0              xjmp L48
 0294           L54:
 0294                   .dbline 302
 0294 83DF              xcall _IICReceiveByte
 0296 402F              mov R20,R16
 0298                   .dbline 303
 0298 B0DF              xcall _IICNoAck
 029A                   .dbline 304
 029A 05C0              xjmp L49
 029C           L48:
 029C                   .dbline 288
 029C 262E              mov R2,R22
 029E 3324              clr R3
 02A0 6150              subi R22,1
 02A2 2220              tst R2
 02A4 11F7              brne L47
 02A6           L49:
 02A6                   .dbline 306
 02A6           ;               
 02A6           ;               
 02A6           ;               data=IICReceiveByte();        //读数据,并发出1应答,表示不再读。
 02A6           ;               IICNoAck();
 02A6           ;               break;
 02A6           ;       }
 02A6           ;       IICStop();      
 02A6 4EDF              xcall _IICStop
 02A8                   .dbline 307
 02A8           ;       return data;
 02A8 042F              mov R16,R20
 02AA                   .dbline -2
 02AA           L46:
 02AA 0E940000          xcall pop_gset4
 02AE                   .dbline 0 ; func end
 02AE 0895              ret
 02B0                   .dbsym r ErrorCount 22 c
 02B0                   .dbsym r data 20 c
 02B0                   .dbsym r device 10 c
 02B0                   .dbsym r subAddr 12 c
 02B0                   .dbend
 02B0                   .dbfunc e i2c_Write _i2c_Write fV
 02B0           ;     ErrorCount -> R20
 02B0           ;           data -> R22
 02B0           ;         device -> R10
 02B0           ;        subAddr -> R12
                        .even
 02B0           _i2c_Write::
 02B0 0E940000          xcall push_gset4
 02B4 A22E              mov R10,R18
 02B6 C02E              mov R12,R16
 02B8 6885              ldd R22,y+8
 02BA                   .dbline -1
 02BA                   .dbline 312
 02BA           ; }
 02BA           ; 
 02BA           ; //=======================================================================
 02BA           ; void i2c_Write(unsigned char subAddr,unsigned char device,unsigned char data)
 02BA           ; {
 02BA                   .dbline 313
 02BA           ;       uint8 ErrorCount=10;
 02BA 4AE0              ldi R20,10
 02BC 11C0              xjmp L58
 02BE           L57:
 02BE                   .dbline 316
 02BE           ;       
 02BE           ;       while(ErrorCount--)
 02BE           ;       {
 02BE                   .dbline 317
 02BE           ;               IICStart();
 02BE 2DDF              xcall _IICStart
 02C0                   .dbline 318
 02C0           ;               IICSendByte(device);    
 02C0 0A2D              mov R16,R10
 02C2 A8DF              xcall _IICSendByte
 02C4                   .dbline 319
 02C4           ;               if(IICRecAck()) continue;                       //如果为非0应答,重复写
 02C4 50DF              xcall _IICRecAck
 02C6 0023              tst R16
 02C8 09F0              breq L60
 02CA                   .dbline 319
 02CA 0AC0              xjmp L58
 02CC           L60:
 02CC                   .dbline 320
 02CC           ;               IICSendByte(subAddr);   
 02CC 0C2D              mov R16,R12
 02CE A2DF              xcall _IICSendByte
 02D0                   .dbline 321
 02D0           ;               if(IICRecAck()) continue;       //如果为非0应答,重复写
 02D0 4ADF              xcall _IICRecAck
 02D2 0023              tst R16
 02D4 09F0              breq L62
 02D6                   .dbline 321
 02D6 04C0              xjmp L58
 02D8           L62:
 02D8                   .dbline 323
 02D8 062F              mov R16,R22
 02DA 9CDF              xcall _IICSendByte
 02DC                   .dbline 324
 02DC 7DDF              xcall _IICACK
 02DE                   .dbline 326
 02DE 05C0              xjmp L59
 02E0           L58:
 02E0                   .dbline 315
 02E0 242E              mov R2,R20
 02E2 3324              clr R3
 02E4 4150              subi R20,1
 02E6 2220              tst R2
 02E8 51F7              brne L57
 02EA           L59:
 02EA                   .dbline 329
 02EA           ;               
 02EA           ;               IICSendByte(data);
 02EA           ;               IICACK();
 02EA           ;               
 02EA           ;               break;
 02EA           ;     }
 02EA           ;       
 02EA           ;     IICStop();
 02EA 2CDF              xcall _IICStop
 02EC                   .dbline -2
 02EC           L56:
 02EC 0E940000          xcall pop_gset4
 02F0                   .dbline 0 ; func end
 02F0 0895              ret
 02F2                   .dbsym r ErrorCount 20 c
 02F2                   .dbsym r data 22 c
 02F2                   .dbsym r device 10 c
 02F2                   .dbsym r subAddr 12 c
 02F2                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16例程\24C02T~1\24c02.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 + -