📄 rtc.lis
字号:
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 + -