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