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

📄 rtc.lis

📁 AVRkaifashili.rar
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0180                   .dbline 175
 0180 04C0              rjmp L48
 0182           L47:
 0182                   .dbline 177
 0182           ;      else 
 0182           ;         {nn<<=1;
 0182                   .dbline 177
 0182 660F              lsl R22
 0184                   .dbline 178
 0184           ;          nn=(nn|0x01);                 
 0184 6160              ori R22,1
 0186                   .dbline 179
 0186           ;          SetSCL(0);}//SCL=0;}
 0186 0027              clr R16
 0188 70DF              rcall _SetSCL
 018A                   .dbline 179
 018A           L48:
 018A                   .dbline 180
 018A           L44:
 018A                   .dbline 167
 018A 4395              inc R20
 018C           L46:
 018C                   .dbline 167
 018C 4830              cpi R20,8
 018E 58F3              brlo L43
 0190                   .dbline 181
 0190           ;     }
 0190           ;   DDRC=DDRC|0x02;//设置SDA为输出线
 0190 A19A              sbi 0x14,1
 0192                   .dbline 182
 0192           ;  return(nn);                 //返回读出的字节
 0192 062F              mov R16,R22
 0194                   .dbline -2
 0194           L42:
 0194 00D0              rcall pop_gset2
 0196                   .dbline 0 ; func end
 0196 0895              ret
 0198                   .dbsym r j 20 c
 0198                   .dbsym r nn 22 c
 0198                   .dbend
 0198                   .dbfunc e Write_Nbyte _Write_Nbyte fV
 0198           ;              k -> R20
 0198           ;         Number -> R22
 0198           ;          Array -> R10,R11
 0198           ;        Address -> R12
 0198           ;          Slave -> R14
                        .even
 0198           _Write_Nbyte::
 0198 00D0              rcall push_gset5
 019A C22E              mov R12,R18
 019C E02E              mov R14,R16
 019E AA84              ldd R10,y+10
 01A0 BB84              ldd R11,y+11
 01A2 6C85              ldd R22,y+12
 01A4                   .dbline -1
 01A4                   .dbline 192
 01A4           ; }
 01A4           ; 
 01A4           ; //********************写N个字节子程序************************//
 01A4           ; //函数参数说明:
 01A4           ; //Slave:IIC器件地址,如上文定义的SD2303
 01A4           ; //Address:起始地址
 01A4           ; //Array:读数据存放的数组
 01A4           ; //Number:读取的字节数
 01A4           ; void Write_Nbyte(uchar Slave,uchar Address,uchar *Array,uchar Number)
 01A4           ; {uchar k;
 01A4           L50:
 01A4           L51:
 01A4                   .dbline 194
 01A4           ;  writ:do                     //开始->写IIC器件地址->检查应答位
 01A4           ;     {Start();
 01A4                   .dbline 194
 01A4 72DF              rcall _Start
 01A6                   .dbline 195
 01A6           ;      Write_Byte(Slave);
 01A6 0E2D              mov R16,R14
 01A8 C8DF              rcall _Write_Byte
 01AA                   .dbline 196
 01AA           ;      Check_Ack();
 01AA 9BDF              rcall _Check_Ack
 01AC                   .dbline 197
 01AC           L52:
 01AC                   .dbline 197
 01AC           ;     }while(F_Flag==1);//while(F0==1);
 01AC 80910000          lds R24,_F_Flag
 01B0 8130              cpi R24,1
 01B2 C1F3              breq L51
 01B4           L54:
 01B4                   .dbline 199
 01B4           ;    do
 01B4           ;     {Write_Byte(Address<<4);   //送起始地址->检查应答位
 01B4                   .dbline 199
 01B4 0C2D              mov R16,R12
 01B6 0F70              andi R16,#0x0F
 01B8 0295              swap R16
 01BA BFDF              rcall _Write_Byte
 01BC                   .dbline 200
 01BC           ;      Check_Ack();
 01BC 92DF              rcall _Check_Ack
 01BE                   .dbline 201
 01BE           L55:
 01BE                   .dbline 201
 01BE           ;     }while(F_Flag==1);//while(F0==1);
 01BE 80910000          lds R24,_F_Flag
 01C2 8130              cpi R24,1
 01C4 B9F3              breq L54
 01C6                   .dbline 202
 01C6           ;    for(k=0;k<Number;k++)    //写Number个数据
 01C6 4427              clr R20
 01C8 0BC0              rjmp L60
 01CA           L57:
 01CA                   .dbline 203
 01CA                   .dbline 203
 01CA EA2D              mov R30,R10
 01CC FB2D              mov R31,R11
 01CE 0081              ldd R16,z+0
 01D0 B4DF              rcall _Write_Byte
 01D2                   .dbline 204
 01D2 8A2D              mov R24,R10
 01D4 9B2D              mov R25,R11
 01D6 0196              adiw R24,1
 01D8 A82E              mov R10,R24
 01DA B92E              mov R11,R25
 01DC                   .dbline 205
 01DC 82DF              rcall _Check_Ack
 01DE                   .dbline 207
 01DE           L58:
 01DE                   .dbline 202
 01DE 4395              inc R20
 01E0           L60:
 01E0                   .dbline 202
 01E0 4617              cp R20,R22
 01E2 98F3              brlo L57
 01E4                   .dbline 208
 01E4           ;     {Write_Byte(*Array);
 01E4           ;        Array++;
 01E4           ;      Check_Ack();           //检查应答位
 01E4           ;      //if(F0==1) goto writ;
 01E4           ;        } //若任意一个应答位不对,重新开始整个过程
 01E4           ;    Stop();                  //停止信号
 01E4 5EDF              rcall _Stop
 01E6                   .dbline -2
 01E6                   .dbline 209
 01E6           ; }
 01E6           L49:
 01E6 00D0              rcall pop_gset5
 01E8                   .dbline 0 ; func end
 01E8 0895              ret
 01EA                   .dbsym r k 20 c
 01EA                   .dbsym r Number 22 c
 01EA                   .dbsym r Array 10 pc
 01EA                   .dbsym r Address 12 c
 01EA                   .dbsym r Slave 14 c
 01EA                   .dbend
 01EA                   .dbfunc e Write_1byte _Write_1byte fV
 01EA           ;           Data -> R20
 01EA           ;        Address -> R22
 01EA           ;          Slave -> R10
                        .even
 01EA           _Write_1byte::
 01EA 00D0              rcall push_gset3
 01EC 622F              mov R22,R18
 01EE A02E              mov R10,R16
 01F0 4E81              ldd R20,y+6
 01F2                   .dbline -1
 01F2                   .dbline 213
 01F2           ; 
 01F2           ; //***********写一个字节******************************//
 01F2           ; void Write_1byte(uchar Slave,uchar Address,uchar Data)
 01F2           ; {writ:do                     //开始->写IIC器件地址->检查应答位
 01F2           L62:
 01F2           L63:
 01F2                   .dbline 214
 01F2           ;     {Start();
 01F2                   .dbline 214
 01F2 4BDF              rcall _Start
 01F4                   .dbline 215
 01F4           ;      Write_Byte(Slave);
 01F4 0A2D              mov R16,R10
 01F6 A1DF              rcall _Write_Byte
 01F8                   .dbline 216
 01F8           ;      Check_Ack();
 01F8 74DF              rcall _Check_Ack
 01FA                   .dbline 217
 01FA           L64:
 01FA                   .dbline 217
 01FA           ;     }while(F_Flag==1);//while(F0==1);
 01FA 80910000          lds R24,_F_Flag
 01FE 8130              cpi R24,1
 0200 C1F3              breq L63
 0202           L66:
 0202                   .dbline 219
 0202           ;    do
 0202           ;     {Write_Byte(Address<<4);   //送起始地址->检查应答位
 0202                   .dbline 219
 0202 062F              mov R16,R22
 0204 0F70              andi R16,#0x0F
 0206 0295              swap R16
 0208 98DF              rcall _Write_Byte
 020A                   .dbline 220
 020A           ;      Check_Ack();
 020A 6BDF              rcall _Check_Ack
 020C                   .dbline 221
 020C           L67:
 020C                   .dbline 221
 020C           ;     }while(F_Flag==1);//while(F0==1);
 020C 80910000          lds R24,_F_Flag
 0210 8130              cpi R24,1
 0212 B9F3              breq L66
 0214                   .dbline 222
 0214           ;    Write_Byte(Data);
 0214 042F              mov R16,R20
 0216 91DF              rcall _Write_Byte
 0218                   .dbline 223
 0218           ;    Check_Ack();           //检查应答位
 0218 64DF              rcall _Check_Ack
 021A                   .dbline 225
 021A           ;   // if(F0==1) goto writ; //若应答位不对,重新开始整个过程
 021A           ;    Stop();                  //停止信号
 021A 43DF              rcall _Stop
 021C                   .dbline -2
 021C                   .dbline 226
 021C           ; }
 021C           L61:
 021C 00D0              rcall pop_gset3
 021E                   .dbline 0 ; func end
 021E 0895              ret
 0220                   .dbsym r Data 20 c
 0220                   .dbsym r Address 22 c
 0220                   .dbsym r Slave 10 c
 0220                   .dbend
 0220                   .dbfunc e Read_Nbyte _Read_Nbyte fV
 0220           ;          data0 -> R20
 0220           ;              x -> R22
 0220           ;         Number -> R10
 0220           ;          Array -> R12,R13
 0220           ;        Address -> R14
 0220           ;          Slave -> y+10
                        .even
 0220           _Read_Nbyte::
 0220 00D0              rcall push_arg4
 0222 00D0              rcall push_gset5
 0224 E22E              mov R14,R18
 0226 CE84              ldd R12,y+14
 0228 DF84              ldd R13,y+15
 022A A888              ldd R10,y+16
 022C                   .dbline -1
 022C                   .dbline 236
 022C           ; 
 022C           ; 
 022C           ; //***************读N个字节子程序*********************//
 022C           ; //函数参数说明:
 022C           ; //Slave:IIC器件地址,如上文定义的SD2303
 022C           ; //Address:起始地址
 022C           ; //Array:读数据存放的数组
 022C           ; //Number:读取的字节数
 022C           ; void Read_Nbyte(uchar Slave,uchar Address,uchar *Array,uchar Number)
 022C           ; {uchar data0,x;
 022C           L70:
 022C                   .dbline 238
 022C                   .dbline 238
 022C 2EDF              rcall _Start
 022E                   .dbline 238
 022E 0A85              ldd R16,y+10
 0230 84DF              rcall _Write_Byte
 0232                   .dbline 238
 0232 57DF              rcall _Check_Ack
 0234                   .dbline 238
 0234           L71:
 0234                   .dbline 238
 0234           ;     //第一步:开始信号->写IIC器件地址->检查应答位
 0234           ;       do{Start();Write_Byte(Slave);Check_Ack();}while(F_Flag==1);//while(F0==1);
 0234 80910000          lds R24,_F_Flag
 0238 8130              cpi R24,1
 023A C1F3              breq L70
 023C           L73:
 023C                   .dbline 240
 023C                   .dbline 240
 023C 0E2D              mov R16,R14
 023E 0F70              andi R16,#0x0F
 0240 0295              swap R16
 0242 7BDF              rcall _Write_Byte
 0244                   .dbline 240
 0244 4EDF              rcall _Check_Ack
 0246                   .dbline 240
 0246           L74:
 0246                   .dbline 240
 0246           ;     //第二步:写起始地址->检查应答位
 0246           ;     do {Write_Byte(Address<<4);Check_Ack();}while(F_Flag==1);// while(F0==1);
 0246 80910000          lds R24,_F_Flag
 024A 8130              cpi R24,1
 024C B9F3              breq L73
 024E           L76:
 024E                   .dbline 242
 024E                   .dbline 242
 024E 1DDF              rcall _Start
 0250                   .dbline 242
 0250 0A85              ldd R16,y+10
 0252 0F5F              subi R16,255    ; addi 1
 0254 72DF              rcall _Write_Byte
 0256                   .dbline 242
 0256 45DF              rcall _Check_Ack
 0258                   .dbline 242
 0258           L77:
 0258                   .dbline 242
 0258           ;     //第三步:开始信号->写IIC器件地址+1(表示读)->检查应答位
 0258           ;     do{Start();Write_Byte(Slave+1);Check_Ack();}while(F_Flag==1);//while(F0==1);
 0258 80910000          lds R24,_F_Flag
 025C 8130              cpi R24,1
 025E B9F3              breq L76
 0260                   .dbline 244
 0260           ;     //第四步:读N字节,每读完一字节发一个Ack应答,最后一字节发Nack
 0260           ;     for(x=0;x<Number;x++)
 0260 6627              clr R22
 0262 10C0              rjmp L82
 0264           L79:
 0264                   .dbline 245
 0264           ;      {data0=Read_Byte();*Array=data0;Array++;
 0264                   .dbline 245
 0264 7CDF              rcall _Read_Byte
 0266 402F              mov R20,R16
 0268                   .dbline 245
 0268 EC2D              mov R30,R12
 026A FD2D              mov R31,R13
 026C 4083              std z+0,R20
 026E                   .dbline 245
 026E 8E2F              mov R24,R30
 0270 9F2F              mov R25,R31
 0272 0196              adiw R24,1
 0274 C82E              mov R12,R24
 0276 D92E              mov R13,R25
 0278                   .dbline 246
 0278 8A2D              mov R24,R10
 027A 8150              subi R24,1
 027C 6817              cp R22,R24
 027E 08F4              brsh L83

⌨️ 快捷键说明

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