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

📄 24c02.lis

📁 meg16 的所有功能实例
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0156 04E6              ldi R16,100
 0158 10E0              ldi R17,0
 015A 52DF              xcall _Delay_us
 015C                   .dbline 196
 015C                   .dbline 196
 015C                   .dbline 197
 015C           ;       SDA_1;
 015C                   .dbline 197
 015C A99A              sbi 0x15,1
 015E                   .dbline 197
 015E 04E6              ldi R16,100
 0160 10E0              ldi R17,0
 0162 4EDF              xcall _Delay_us
 0164                   .dbline 197
 0164                   .dbline 197
 0164                   .dbline -2
 0164           L29:
 0164                   .dbline 0 ; func end
 0164 0895              ret
 0166                   .dbend
 0166                   .dbfunc e IICRecAck _IICRecAck fc
 0166           ;            ack -> R20
                        .even
 0166           _IICRecAck::
 0166 0E940000          xcall push_gset1
 016A                   .dbline -1
 016A                   .dbline 205
 016A           ;       //SCL_0;
 016A           ; }
 016A           ; //=======================================================================
 016A           ; //检查应答位,向I2C写数据时,I2C设备(EEPROM)正常接受到数据后在第9周期发出0应答,
 016A           ; //如果不正常接受到数据,则不以0应答而进入待命状态。
 016A           ; //写数据后需检查I2C设备是否有0应答。
 016A           ; unsigned char IICRecAck(void)
 016A           ; {
 016A                   .dbline 208
 016A           ;       uint8 ack;
 016A           ; 
 016A           ;       SCL_0;
 016A                   .dbline 208
 016A A898              cbi 0x15,0
 016C                   .dbline 208
 016C 04E6              ldi R16,100
 016E 10E0              ldi R17,0
 0170 47DF              xcall _Delay_us
 0172                   .dbline 208
 0172                   .dbline 208
 0172                   .dbline 209
 0172           ;       SDA_0;
 0172                   .dbline 209
 0172 A998              cbi 0x15,1
 0174                   .dbline 209
 0174 04E6              ldi R16,100
 0176 10E0              ldi R17,0
 0178 43DF              xcall _Delay_us
 017A                   .dbline 209
 017A                   .dbline 209
 017A                   .dbline 210
 017A           ;       SCL_1;
 017A                   .dbline 210
 017A A89A              sbi 0x15,0
 017C                   .dbline 210
 017C 04E6              ldi R16,100
 017E 10E0              ldi R17,0
 0180 3FDF              xcall _Delay_us
 0182                   .dbline 210
 0182                   .dbline 210
 0182                   .dbline 212
 0182           ;       
 0182           ;       i2c_ddr&=~(1<<SDA);                     //设置SDA为输入
 0182 A198              cbi 0x14,1
 0184                   .dbline 213
 0184           ;       i2c_port|=1<<SDA;                           //上拉
 0184 A99A              sbi 0x15,1
 0186                   .dbline 214
 0186           ;       ack=(i2c_pin & (1<<SDA));               //读SDA应答位
 0186 43B3              in R20,0x13
 0188 4270              andi R20,2
 018A                   .dbline 215
 018A           ;       i2c_ddr|=(1<<SDA);                          //恢复为输出
 018A A19A              sbi 0x14,1
 018C                   .dbline 217
 018C           ;       
 018C           ;       SCL_0;
 018C                   .dbline 217
 018C A898              cbi 0x15,0
 018E                   .dbline 217
 018E 04E6              ldi R16,100
 0190 10E0              ldi R17,0
 0192 36DF              xcall _Delay_us
 0194                   .dbline 217
 0194                   .dbline 217
 0194                   .dbline 218
 0194           ;       return(ack);
 0194 042F              mov R16,R20
 0196                   .dbline -2
 0196           L30:
 0196 0E940000          xcall pop_gset1
 019A                   .dbline 0 ; func end
 019A 0895              ret
 019C                   .dbsym r ack 20 c
 019C                   .dbend
 019C                   .dbfunc e IICReceiveByte _IICReceiveByte fc
 019C           ;              i -> R20
 019C           ;    receivebyte -> R22
                        .even
 019C           _IICReceiveByte::
 019C 0E940000          xcall push_gset2
 01A0                   .dbline -1
 01A0                   .dbline 223
 01A0           ; }
 01A0           ; //=======================================================================
 01A0           ; //从IIC总线上读数据。
 01A0           ; unsigned char IICReceiveByte(void)
 01A0           ; {
 01A0                   .dbline 224
 01A0           ;       uint8 receivebyte=0,i=8;
 01A0 6627              clr R22
 01A2                   .dbline 224
 01A2 48E0              ldi R20,8
 01A4                   .dbline 226
 01A4           ; 
 01A4           ;       i2c_ddr&=~(1<<SDA);                         //设置SDA为输入
 01A4 A198              cbi 0x14,1
 01A6                   .dbline 227
 01A6           ;       i2c_port|=1<<SDA;                           //上拉
 01A6 A99A              sbi 0x15,1
 01A8                   .dbline 228
 01A8           ;       i2c_port&=~(1<<SCL);
 01A8 A898              cbi 0x15,0
 01AA 0CC0              xjmp L33
 01AC           L32:
 01AC                   .dbline 231
 01AC           ;       
 01AC           ;       while(i--)
 01AC           ;       {
 01AC                   .dbline 232
 01AC           ;               SCL_1;
 01AC                   .dbline 232
 01AC A89A              sbi 0x15,0
 01AE                   .dbline 232
 01AE 04E6              ldi R16,100
 01B0 10E0              ldi R17,0
 01B2 26DF              xcall _Delay_us
 01B4                   .dbline 232
 01B4                   .dbline 232
 01B4                   .dbline 233
 01B4           ;               receivebyte <<= 1;
 01B4 660F              lsl R22
 01B6                   .dbline 234
 01B6           ;               if(i2c_pin & (1<<SDA)) receivebyte |= 1;
 01B6 999B              sbis 0x13,1
 01B8 01C0              rjmp L35
 01BA                   .dbline 234
 01BA 6160              ori R22,1
 01BC           L35:
 01BC                   .dbline 235
 01BC                   .dbline 235
 01BC A898              cbi 0x15,0
 01BE                   .dbline 235
 01BE 04E6              ldi R16,100
 01C0 10E0              ldi R17,0
 01C2 1EDF              xcall _Delay_us
 01C4                   .dbline 235
 01C4                   .dbline 235
 01C4                   .dbline 236
 01C4           L33:
 01C4                   .dbline 230
 01C4 242E              mov R2,R20
 01C6 3324              clr R3
 01C8 4150              subi R20,1
 01CA 2220              tst R2
 01CC 79F7              brne L32
 01CE                   .dbline 238
 01CE           ;               SCL_0;
 01CE           ;       }
 01CE           ;       
 01CE           ;       i2c_ddr|=(1<<SDA);                             //恢复SDA为输出
 01CE A19A              sbi 0x14,1
 01D0                   .dbline 239
 01D0           ;       return(receivebyte);
 01D0 062F              mov R16,R22
 01D2                   .dbline -2
 01D2           L31:
 01D2 0E940000          xcall pop_gset2
 01D6                   .dbline 0 ; func end
 01D6 0895              ret
 01D8                   .dbsym r i 20 c
 01D8                   .dbsym r receivebyte 22 c
 01D8                   .dbend
 01D8                   .dbfunc e IICACK _IICACK fV
                        .even
 01D8           _IICACK::
 01D8                   .dbline -1
 01D8                   .dbline 246
 01D8           ; }
 01D8           ; 
 01D8           ; 
 01D8           ; //=======================================================================
 01D8           ; //对IIC总线产生应答。读I2C设备时,如果下一步还要读则产生0应答。
 01D8           ; void IICACK(void)
 01D8           ; {
 01D8                   .dbline 247
 01D8           ;       SDA_0;
 01D8                   .dbline 247
 01D8 A998              cbi 0x15,1
 01DA                   .dbline 247
 01DA 04E6              ldi R16,100
 01DC 10E0              ldi R17,0
 01DE 10DF              xcall _Delay_us
 01E0                   .dbline 247
 01E0                   .dbline 247
 01E0                   .dbline 248
 01E0           ;       SCL_1;
 01E0                   .dbline 248
 01E0 A89A              sbi 0x15,0
 01E2                   .dbline 248
 01E2 04E6              ldi R16,100
 01E4 10E0              ldi R17,0
 01E6 0CDF              xcall _Delay_us
 01E8                   .dbline 248
 01E8                   .dbline 248
 01E8                   .dbline 249
 01E8           ;       SCL_0;
 01E8                   .dbline 249
 01E8 A898              cbi 0x15,0
 01EA                   .dbline 249
 01EA 04E6              ldi R16,100
 01EC 10E0              ldi R17,0
 01EE 08DF              xcall _Delay_us
 01F0                   .dbline 249
 01F0                   .dbline 249
 01F0                   .dbline 251
 01F0           ;       
 01F0           ;       SDA_1;
 01F0                   .dbline 251
 01F0 A99A              sbi 0x15,1
 01F2                   .dbline 251
 01F2 04E6              ldi R16,100
 01F4 10E0              ldi R17,0
 01F6 04DF              xcall _Delay_us
 01F8                   .dbline 251
 01F8                   .dbline 251
 01F8                   .dbline -2
 01F8           L37:
 01F8                   .dbline 0 ; func end
 01F8 0895              ret
 01FA                   .dbend
 01FA                   .dbfunc e IICNoAck _IICNoAck fV
                        .even
 01FA           _IICNoAck::
 01FA                   .dbline -1
 01FA                   .dbline 256
 01FA           ; }
 01FA           ; //=======================================================================
 01FA           ; //不对IIC总线产生应答。读I2C设备时,如果下一步不需要读则产生1应答(即不应答)。
 01FA           ; void IICNoAck(void)
 01FA           ; {
 01FA                   .dbline 257
 01FA           ;       SDA_1;
 01FA                   .dbline 257
 01FA A99A              sbi 0x15,1
 01FC                   .dbline 257
 01FC 04E6              ldi R16,100
 01FE 10E0              ldi R17,0
 0200 FFDE              xcall _Delay_us
 0202                   .dbline 257
 0202                   .dbline 257
 0202                   .dbline 258
 0202           ;       SCL_1;
 0202                   .dbline 258
 0202 A89A              sbi 0x15,0
 0204                   .dbline 258
 0204 04E6              ldi R16,100
 0206 10E0              ldi R17,0
 0208 FBDE              xcall _Delay_us
 020A                   .dbline 258
 020A                   .dbline 258
 020A                   .dbline 259
 020A           ;       SCL_0;
 020A                   .dbline 259
 020A A898              cbi 0x15,0
 020C                   .dbline 259
 020C 04E6              ldi R16,100
 020E 10E0              ldi R17,0
 0210 F7DE              xcall _Delay_us
 0212                   .dbline 259
 0212                   .dbline 259
 0212                   .dbline -2
 0212           L38:
 0212                   .dbline 0 ; func end
 0212 0895              ret
 0214                   .dbend
 0214                   .dbfunc e IICSendByte _IICSendByte fV
 0214           ;              j -> R20
 0214           ;       sendbyte -> R22
                        .even
 0214           _IICSendByte::
 0214 0E940000          xcall push_gset2
 0218 602F              mov R22,R16
 021A                   .dbline -1
 021A                   .dbline 264

⌨️ 快捷键说明

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