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

📄 rtc.lis

📁 AVRkaifashili.rar
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0186 0895              ret
 0188                   .dbsym r j 20 c
 0188                   .dbsym r nn 22 c
 0188                   .dbend
 0188                   .dbfunc e Write_Nbyte _Write_Nbyte fV
 0188           ;              k -> R20
 0188           ;         Number -> R22
 0188           ;          Array -> R10,R11
 0188           ;        Address -> R12
 0188           ;          Slave -> R14
                        .even
 0188           _Write_Nbyte::
 0188 00D0              rcall push_gset5
 018A C22E              mov R12,R18
 018C E02E              mov R14,R16
 018E AA84              ldd R10,y+10
 0190 BB84              ldd R11,y+11
 0192 6C85              ldd R22,y+12
 0194                   .dbline -1
 0194                   .dbline 154
 0194           ; }
 0194           ; 
 0194           ; //****************************写N个字节子程序**********************//
 0194           ; //函数参数说明:
 0194           ; //Slave:IIC器件地址,如上文定义的SD2303
 0194           ; //Address:起始地址
 0194           ; //Array:读数据存放的数组
 0194           ; //Number:读取的字节数
 0194           ; void Write_Nbyte(uchar Slave,uchar Address,uchar *Array,uchar Number)
 0194           ; {uchar k;
 0194           L50:
 0194           L51:
 0194                   .dbline 156
 0194           ;  writ:do                     //开始->写IIC器件地址->检查应答位
 0194           ;     {Start();
 0194                   .dbline 156
 0194 72DF              rcall _Start
 0196                   .dbline 157
 0196           ;      Write_Byte(Slave);
 0196 0E2D              mov R16,R14
 0198 C8DF              rcall _Write_Byte
 019A                   .dbline 158
 019A           ;      Check_Ack();
 019A 9BDF              rcall _Check_Ack
 019C                   .dbline 159
 019C           L52:
 019C                   .dbline 159
 019C           ;     }while(F_Flag==1);
 019C 80910000          lds R24,_F_Flag
 01A0 8130              cpi R24,1
 01A2 C1F3              breq L51
 01A4           L54:
 01A4                   .dbline 161
 01A4           ;    do
 01A4           ;     {Write_Byte(Address<<4); //送起始地址->检查应答位
 01A4                   .dbline 161
 01A4 0C2D              mov R16,R12
 01A6 0F70              andi R16,#0x0F
 01A8 0295              swap R16
 01AA BFDF              rcall _Write_Byte
 01AC                   .dbline 162
 01AC           ;      Check_Ack();
 01AC 92DF              rcall _Check_Ack
 01AE                   .dbline 163
 01AE           L55:
 01AE                   .dbline 163
 01AE           ;     }while(F_Flag==1);
 01AE 80910000          lds R24,_F_Flag
 01B2 8130              cpi R24,1
 01B4 B9F3              breq L54
 01B6                   .dbline 164
 01B6           ;    for(k=0;k<Number;k++)     //写Number个数据
 01B6 4427              clr R20
 01B8 0BC0              rjmp L60
 01BA           L57:
 01BA                   .dbline 165
 01BA                   .dbline 165
 01BA EA2D              mov R30,R10
 01BC FB2D              mov R31,R11
 01BE 0081              ldd R16,z+0
 01C0 B4DF              rcall _Write_Byte
 01C2                   .dbline 166
 01C2 8A2D              mov R24,R10
 01C4 9B2D              mov R25,R11
 01C6 0196              adiw R24,1
 01C8 A82E              mov R10,R24
 01CA B92E              mov R11,R25
 01CC                   .dbline 167
 01CC 82DF              rcall _Check_Ack
 01CE                   .dbline 167
 01CE           L58:
 01CE                   .dbline 164
 01CE 4395              inc R20
 01D0           L60:
 01D0                   .dbline 164
 01D0 4617              cp R20,R22
 01D2 98F3              brlo L57
 01D4                   .dbline 168
 01D4           ;     {Write_Byte(*Array);
 01D4           ;        Array++;
 01D4           ;      Check_Ack();}           //检查应答位
 01D4           ;    Stop();                 
 01D4 5EDF              rcall _Stop
 01D6                   .dbline -2
 01D6                   .dbline 169
 01D6           ; }
 01D6           L49:
 01D6 00D0              rcall pop_gset5
 01D8                   .dbline 0 ; func end
 01D8 0895              ret
 01DA                   .dbsym r k 20 c
 01DA                   .dbsym r Number 22 c
 01DA                   .dbsym r Array 10 pc
 01DA                   .dbsym r Address 12 c
 01DA                   .dbsym r Slave 14 c
 01DA                   .dbend
 01DA                   .dbfunc e Write_1byte _Write_1byte fV
 01DA           ;           Data -> R20
 01DA           ;        Address -> R22
 01DA           ;          Slave -> R10
                        .even
 01DA           _Write_1byte::
 01DA 00D0              rcall push_gset3
 01DC 622F              mov R22,R18
 01DE A02E              mov R10,R16
 01E0 4E81              ldd R20,y+6
 01E2                   .dbline -1
 01E2                   .dbline 177
 01E2           ; 
 01E2           ; //****************************写一个字节子程序**********************//
 01E2           ; //函数参数说明:
 01E2           ; //Slave:IIC器件地址,如上文定义的SD2303
 01E2           ; //Address:IIC器件寄存器地址
 01E2           ; //Data:数据
 01E2           ; void Write_1byte(uchar Slave,uchar Address,uchar Data)
 01E2           ; {writ:do                     //开始->写IIC器件地址->检查应答位
 01E2           L62:
 01E2           L63:
 01E2                   .dbline 178
 01E2           ;     {Start();
 01E2                   .dbline 178
 01E2 4BDF              rcall _Start
 01E4                   .dbline 179
 01E4           ;      Write_Byte(Slave);
 01E4 0A2D              mov R16,R10
 01E6 A1DF              rcall _Write_Byte
 01E8                   .dbline 180
 01E8           ;      Check_Ack();
 01E8 74DF              rcall _Check_Ack
 01EA                   .dbline 181
 01EA           L64:
 01EA                   .dbline 181
 01EA           ;     }while(F_Flag==1);
 01EA 80910000          lds R24,_F_Flag
 01EE 8130              cpi R24,1
 01F0 C1F3              breq L63
 01F2           L66:
 01F2                   .dbline 183
 01F2           ;    do
 01F2           ;     {Write_Byte(Address<<4); //送起始地址->检查应答位
 01F2                   .dbline 183
 01F2 062F              mov R16,R22
 01F4 0F70              andi R16,#0x0F
 01F6 0295              swap R16
 01F8 98DF              rcall _Write_Byte
 01FA                   .dbline 184
 01FA           ;      Check_Ack();
 01FA 6BDF              rcall _Check_Ack
 01FC                   .dbline 185
 01FC           L67:
 01FC                   .dbline 185
 01FC           ;     }while(F_Flag==1);
 01FC 80910000          lds R24,_F_Flag
 0200 8130              cpi R24,1
 0202 B9F3              breq L66
 0204                   .dbline 186
 0204           ;    Write_Byte(Data);
 0204 042F              mov R16,R20
 0206 91DF              rcall _Write_Byte
 0208                   .dbline 187
 0208           ;    Check_Ack();              //检查应答位
 0208 64DF              rcall _Check_Ack
 020A                   .dbline 188
 020A           ;    Stop();                   //停止信号
 020A 43DF              rcall _Stop
 020C                   .dbline -2
 020C                   .dbline 189
 020C           ; }
 020C           L61:
 020C 00D0              rcall pop_gset3
 020E                   .dbline 0 ; func end
 020E 0895              ret
 0210                   .dbsym r Data 20 c
 0210                   .dbsym r Address 22 c
 0210                   .dbsym r Slave 10 c
 0210                   .dbend
 0210                   .dbfunc e Read_Nbyte _Read_Nbyte fV
 0210           ;          data0 -> R20
 0210           ;              x -> R22
 0210           ;         Number -> R10
 0210           ;          Array -> R12,R13
 0210           ;        Address -> R14
 0210           ;          Slave -> y+10
                        .even
 0210           _Read_Nbyte::
 0210 00D0              rcall push_arg4
 0212 00D0              rcall push_gset5
 0214 E22E              mov R14,R18
 0216 CE84              ldd R12,y+14
 0218 DF84              ldd R13,y+15
 021A A888              ldd R10,y+16
 021C                   .dbline -1
 021C                   .dbline 199
 021C           ; 
 021C           ; 
 021C           ; //***************************读N个字节子程序***********************//
 021C           ; //函数参数说明:
 021C           ; //Slave:IIC器件地址,如上文定义的SD2303
 021C           ; //Address:起始地址
 021C           ; //Array:读数据存放的数组
 021C           ; //Number:读取的字节数
 021C           ; void Read_Nbyte(uchar Slave,uchar Address,uchar *Array,uchar Number)
 021C           ; {uchar data0,x;
 021C           L70:
 021C                   .dbline 201
 021C                   .dbline 201
 021C 2EDF              rcall _Start
 021E                   .dbline 201
 021E 0A85              ldd R16,y+10
 0220 84DF              rcall _Write_Byte
 0222                   .dbline 201
 0222 57DF              rcall _Check_Ack
 0224                   .dbline 201
 0224           L71:
 0224                   .dbline 201
 0224           ;     //第一步:开始信号->写IIC器件地址->检查应答位
 0224           ;       do{Start();Write_Byte(Slave);Check_Ack();}while(F_Flag==1);
 0224 80910000          lds R24,_F_Flag
 0228 8130              cpi R24,1
 022A C1F3              breq L70
 022C           L73:
 022C                   .dbline 203
 022C                   .dbline 203
 022C 0E2D              mov R16,R14
 022E 0F70              andi R16,#0x0F
 0230 0295              swap R16
 0232 7BDF              rcall _Write_Byte
 0234                   .dbline 203
 0234 4EDF              rcall _Check_Ack
 0236                   .dbline 203
 0236           L74:
 0236                   .dbline 203
 0236           ;     //第二步:写起始地址->检查应答位
 0236           ;     do {Write_Byte(Address<<4);Check_Ack();}while(F_Flag==1);
 0236 80910000          lds R24,_F_Flag
 023A 8130              cpi R24,1
 023C B9F3              breq L73
 023E           L76:
 023E                   .dbline 205
 023E                   .dbline 205
 023E 1DDF              rcall _Start
 0240                   .dbline 205
 0240 0A85              ldd R16,y+10
 0242 0F5F              subi R16,255    ; addi 1
 0244 72DF              rcall _Write_Byte
 0246                   .dbline 205
 0246 45DF              rcall _Check_Ack
 0248                   .dbline 205
 0248           L77:
 0248                   .dbline 205
 0248           ;     //第三步:开始信号->写IIC器件地址+1(表示读)->检查应答位
 0248           ;     do{Start();Write_Byte(Slave+1);Check_Ack();}while(F_Flag==1);
 0248 80910000          lds R24,_F_Flag
 024C 8130              cpi R24,1
 024E B9F3              breq L76
 0250                   .dbline 207
 0250           ;     //第四步:读N字节,每读完一字节发一个Ack应答,最后一字节发Nack
 0250           ;     for(x=0;x<Number;x++)
 0250 6627              clr R22
 0252 10C0              rjmp L82
 0254           L79:
 0254                   .dbline 208
 0254           ;      {data0=Read_Byte();*Array=data0;Array++;
 0254                   .dbline 208
 0254 7CDF              rcall _Read_Byte
 0256 402F              mov R20,R16
 0258                   .dbline 208
 0258 EC2D              mov R30,R12
 025A FD2D              mov R31,R13
 025C 4083              std z+0,R20
 025E                   .dbline 208
 025E 8E2F              mov R24,R30
 0260 9F2F              mov R25,R31
 0262 0196              adiw R24,1
 0264 C82E              mov R12,R24
 0266 D92E              mov R13,R25
 0268                   .dbline 209
 0268 8A2D              mov R24,R10
 026A 8150              subi R24,1
 026C 6817              cp R22,R24
 026E 08F4              brsh L83
 0270                   .dbline 209
 0270                   .dbline 209
 0270 1CDF              rcall _Ack
 0272                   .dbline 209
 0272           L83:
 0272                   .dbline 209
 0272           L80:
 0272                   .dbline 207
 0272 6395              inc R22
 0274           L82:
 0274                   .dbline 207
 0274 6A15              cp R22,R10
 0276 70F3              brlo L79
 0278                   .dbline 210
 0278           ;         if(x<(Number-1)) { Ack(); }}
 0278           ;     Nack();
 0278 22DF              rcall _Nack
 027A                   .dbline 212
 027A           ;     //第五步:发停止信号,结束读操作
 027A           ;     Stop();
 027A 0BDF              rcall _Stop
 027C                   .dbline -2
 027C                   .dbline 213
 027C           ; }
 027C           L69:
 027C 00D0              rcall pop_gset5
 027E 2496              adiw R28,4
 0280                   .dbline 0 ; func end
 0280 0895              ret
 0282                   .dbsym r data0 20 c
 0282                   .dbsym r x 22 c
 0282                   .dbsym r Number 10 c
 0282                   .dbsym r Array 12 pc
 0282                   .dbsym r Address 14 c
 0282                   .dbsym l Slave 10 c
 0282                   .dbend
                        .area lit(rom, con, rel)

⌨️ 快捷键说明

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