📄 project.lis
字号:
02BA ; {if(Data & 0x80) Write_Bit1(); //传输位从高位到低位,先传最高位
02BA .dbline 225
02BA 67FF sbrs R22,7
02BC 02C0 rjmp L69
02BE .dbline 225
02BE EEDF rcall _Write_Bit1
02C0 01C0 rjmp L70
02C2 L69:
02C2 .dbline 226
02C2 ; else Write_Bit0();
02C2 E3DF rcall _Write_Bit0
02C4 L70:
02C4 .dbline 227
02C4 660F lsl R22
02C6 .dbline 227
02C6 L66:
02C6 .dbline 224
02C6 4395 inc R20
02C8 L68:
02C8 .dbline 224
02C8 4830 cpi R20,8
02CA B8F3 brlo L65
02CC .dbline -2
02CC .dbline 228
02CC ; Data <<=1;} //数据左移
02CC ; }
02CC L64:
02CC 00D0 rcall pop_gset2
02CE .dbline 0 ; func end
02CE 0895 ret
02D0 .dbsym r i 20 c
02D0 .dbsym r Data 22 c
02D0 .dbend
02D0 .dbfunc e Read_Byte _Read_Byte fc
02D0 ; j -> R20
02D0 ; Read_Data -> R22
.even
02D0 _Read_Byte::
02D0 00D0 rcall push_gset2
02D2 .dbline -1
02D2 .dbline 231
02D2 ;
02D2 ; uchar Read_Byte() //读一字节数据:返回值即读的数据
02D2 ; {uchar Read_Data=0xff; // Read_Data为读入的数据,初始值为0xff
02D2 .dbline 231
02D2 6FEF ldi R22,255
02D4 .dbline 233
02D4 ; uchar j;
02D4 ; for (j=0;j<8;j++)
02D4 4427 clr R20
02D6 13C0 rjmp L75
02D8 L72:
02D8 .dbline 234
02D8 ; {Set_SDA(1);
02D8 .dbline 234
02D8 01E0 ldi R16,1
02DA 62DF rcall _Set_SDA
02DC .dbline 235
02DC ; Set_SCL(1);
02DC 01E0 ldi R16,1
02DE 58DF rcall _Set_SCL
02E0 .dbline 236
02E0 ; DDRA &=0xbf;
02E0 8AB3 in R24,0x1a
02E2 8F7B andi R24,191
02E4 8ABB out 0x1a,R24
02E6 .dbline 237
02E6 ; if((PINA & 0x40)==0)
02E6 CE99 sbic 0x19,6
02E8 05C0 rjmp L76
02EA .dbline 238
02EA ; {Read_Data <<=1;
02EA .dbline 238
02EA 660F lsl R22
02EC .dbline 239
02EC ; Read_Data=(Read_Data & 0xfe);
02EC 6E7F andi R22,254
02EE .dbline 240
02EE ; Set_SCL(0);}
02EE 0027 clr R16
02F0 4FDF rcall _Set_SCL
02F2 .dbline 240
02F2 04C0 rjmp L77
02F4 L76:
02F4 .dbline 242
02F4 ; else
02F4 ; {Read_Data <<=1;
02F4 .dbline 242
02F4 660F lsl R22
02F6 .dbline 243
02F6 ; Read_Data =( Read_Data | 0x01);
02F6 6160 ori R22,1
02F8 .dbline 244
02F8 0027 clr R16
02FA 4ADF rcall _Set_SCL
02FC .dbline 244
02FC L77:
02FC .dbline 244
02FC L73:
02FC .dbline 233
02FC 4395 inc R20
02FE L75:
02FE .dbline 233
02FE 4830 cpi R20,8
0300 58F3 brlo L72
0302 .dbline 245
0302 ; Set_SCL(0);}}
0302 ; DDRA |=0x40;
0302 D69A sbi 0x1a,6
0304 .dbline 246
0304 ; return(Read_Data);
0304 062F mov R16,R22
0306 .dbline -2
0306 L71:
0306 00D0 rcall pop_gset2
0308 .dbline 0 ; func end
0308 0895 ret
030A .dbsym r j 20 c
030A .dbsym r Read_Data 22 c
030A .dbend
030A .dbfunc e Write_1byte _Write_1byte fV
030A ; Data -> R20
030A ; Address -> R22
030A ; Slave -> R10
.even
030A _Write_1byte::
030A 00D0 rcall push_gset3
030C 622F mov R22,R18
030E A02E mov R10,R16
0310 4E81 ldd R20,y+6
0312 .dbline -1
0312 .dbline 252
0312 ; }
0312 ;
0312 ; //***************************写一字节数据****************************//
0312 ; //向从地址为Slave的IIC器件的Address地址写一字节数据Data
0312 ; void Write_1byte(uchar Slave,uchar Address,uchar Data)
0312 ; {Start(); //开始
0312 .dbline 252
0312 4EDF rcall _Start
0314 .dbline 253
0314 ; Write_Byte(Slave); //写I2C器件地址
0314 0A2D mov R16,R10
0316 CDDF rcall _Write_Byte
0318 L79:
0318 .dbline 254
0318 ; do Check_Ack(); //检查应答位
0318 8CDF rcall _Check_Ack
031A L80:
031A .dbline 255
031A ; while(Ack_Flag==1);
031A 80914600 lds R24,_Ack_Flag
031E 8130 cpi R24,1
0320 D9F3 breq L79
0322 .dbline 256
0322 ; Write_Byte(Address); //送寄存器地址
0322 062F mov R16,R22
0324 C6DF rcall _Write_Byte
0326 L82:
0326 .dbline 257
0326 ; do Check_Ack(); //检查应答位
0326 85DF rcall _Check_Ack
0328 L83:
0328 .dbline 258
0328 ; while(Ack_Flag==1);
0328 80914600 lds R24,_Ack_Flag
032C 8130 cpi R24,1
032E D9F3 breq L82
0330 .dbline 259
0330 ; Write_Byte(Data); //写入一字节数据
0330 042F mov R16,R20
0332 BFDF rcall _Write_Byte
0334 L85:
0334 .dbline 260
0334 ; do Check_Ack(); //检查应答位
0334 7EDF rcall _Check_Ack
0336 L86:
0336 .dbline 261
0336 ; while(Ack_Flag==1);
0336 80914600 lds R24,_Ack_Flag
033A 8130 cpi R24,1
033C D9F3 breq L85
033E .dbline 262
033E ; Stop(); //停止
033E 46DF rcall _Stop
0340 .dbline -2
0340 .dbline 263
0340 ; }
0340 L78:
0340 00D0 rcall pop_gset3
0342 .dbline 0 ; func end
0342 0895 ret
0344 .dbsym r Data 20 c
0344 .dbsym r Address 22 c
0344 .dbsym r Slave 10 c
0344 .dbend
0344 .dbfunc e Write_2byte _Write_2byte fV
0344 ; Data1 -> R20
0344 ; Data0 -> R22
0344 ; Address -> R10
0344 ; Slave -> R12
.even
0344 _Write_2byte::
0344 00D0 rcall push_gset4
0346 A22E mov R10,R18
0348 C02E mov R12,R16
034A 6885 ldd R22,y+8
034C 4A85 ldd R20,y+10
034E .dbline -1
034E .dbline 268
034E ;
034E ; //***************************写两字节数据****************************//
034E ; //向从地址为Slave的IIC器件的Address地址开始写两字节数据Data0,Data1
034E ; void Write_2byte(uchar Slave,uchar Address,uchar Data0,uchar Data1)
034E ; {Start(); //开始
034E .dbline 268
034E 30DF rcall _Start
0350 .dbline 269
0350 ; Write_Byte(Slave); //写I2C器件地址
0350 0C2D mov R16,R12
0352 AFDF rcall _Write_Byte
0354 L89:
0354 .dbline 270
0354 ; do Check_Ack(); //检查应答位
0354 6EDF rcall _Check_Ack
0356 L90:
0356 .dbline 271
0356 ; while(Ack_Flag==1);
0356 80914600 lds R24,_Ack_Flag
035A 8130 cpi R24,1
035C D9F3 breq L89
035E .dbline 272
035E ; Write_Byte(Address); //送寄存器地址
035E 0A2D mov R16,R10
0360 A8DF rcall _Write_Byte
0362 L92:
0362 .dbline 273
0362 ; do Check_Ack(); //检查应答位
0362 67DF rcall _Check_Ack
0364 L93:
0364 .dbline 274
0364 ; while(Ack_Flag==1);
0364 80914600 lds R24,_Ack_Flag
0368 8130 cpi R24,1
036A D9F3 breq L92
036C .dbline 275
036C ; Write_Byte(Data0);
036C 062F mov R16,R22
036E A1DF rcall _Write_Byte
0370 L95:
0370 .dbline 276
0370 ; do Check_Ack(); //检查应答位
0370 60DF rcall _Check_Ack
0372 L96:
0372 .dbline 277
0372 ; while(Ack_Flag==1);
0372 80914600 lds R24,_Ack_Flag
0376 8130 cpi R24,1
0378 D9F3 breq L95
037A .dbline 278
037A ; Write_Byte(Data1);
037A 042F mov R16,R20
037C 9ADF rcall _Write_Byte
037E L98:
037E .dbline 279
037E ; do Check_Ack(); //检查应答位
037E 59DF rcall _Check_Ack
0380 L99:
0380 .dbline 280
0380 ; while(Ack_Flag==1);
0380 80914600 lds R24,_Ack_Flag
0384 8130 cpi R24,1
0386 D9F3 breq L98
0388 .dbline 281
0388 ; Stop(); //停止信号
0388 21DF rcall _Stop
038A .dbline -2
038A .dbline 282
038A ; }
038A L88:
038A 00D0 rcall pop_gset4
038C .dbline 0 ; func end
038C 0895 ret
038E .dbsym r Data1 20 c
038E .dbsym r Data0 22 c
038E .dbsym r Address 10 c
038E .dbsym r Slave 12 c
038E .dbend
038E .dbfunc e Read_1byte _Read_1byte fc
038E ; x -> <dead>
038E ; data0 -> R22
038E ; Address -> R10
038E ; Slave -> R20
.even
038E _Read_1byte::
038E 00D0 rcall push_gset3
0390 A22E mov R10,R18
0392 402F mov R20,R16
0394 .dbline -1
0394 .dbline 287
0394 ;
0394 ; //***************************读一字节数据****************************//
0394 ; //从从地址为Slave的IIC器件的Address地址处读一字节数据
0394 ; uchar Read_1byte(uchar Slave,uchar Address)
0394 ; {uchar data0,x;
0394 L102:
0394 .dbline 288
0394 ; do{
0394 .dbline 289
0394 ; Start(); //开始信号
0394 0DDF rcall _Start
0396 .dbline 290
0396 ; Write_Byte(Slave); //写I2C器件地址
0396 042F mov R16,R20
0398 8CDF rcall _Write_Byte
039A .dbline 291
039A ; Check_Ack(); //检查应答位
039A 4BDF rcall _Check_Ack
039C .dbline 292
039C L103:
039C .dbline 292
039C ; }whi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -