📄 pproject.lis
字号:
00E0 ; }
00E0 L18:
00E0 .dbline 138
00E0 ; DDRA |=0xff; //重新设置SDA为输出
00E0 8AB3 in R24,0x1a
00E2 8F6F ori R24,255
00E4 8ABB out 0x1a,R24
00E6 .dbline -2
00E6 .dbline 139
00E6 ; }
00E6 L16:
00E6 .dbline 0 ; func end
00E6 0895 ret
00E8 .dbend
00E8 .dbfunc e Write_Bit0 _Write_Bit0 fV
.even
00E8 _Write_Bit0::
00E8 .dbline -1
00E8 .dbline 143
00E8 ;
00E8 ; //写1bit数据:0
00E8 ; void Write_Bit0()
00E8 ; {
00E8 .dbline 144
00E8 ; Set_SDA(0); //SDA=0;
00E8 0027 clr R16
00EA 98DF rcall _Set_SDA
00EC .dbline 145
00EC ; Set_SCL(1); //SCL=1;
00EC 01E0 ldi R16,1
00EE 8EDF rcall _Set_SCL
00F0 .dbline 146
00F0 ; delay(100);
00F0 04E6 ldi R16,100
00F2 86DF rcall _delay
00F4 .dbline 147
00F4 ; Set_SCL(0); //SCL=0;
00F4 0027 clr R16
00F6 .dbline -2
00F6 .dbline 148
00F6 ; }
00F6 L19:
00F6 .dbline 0 ; func end
00F6 8ACF rjmp _Set_SCL
00F8 .dbend
00F8 .dbfunc e Write_Bit1 _Write_Bit1 fV
.even
00F8 _Write_Bit1::
00F8 .dbline -1
00F8 .dbline 152
00F8 ;
00F8 ; //写1bit数据:1
00F8 ; void Write_Bit1()
00F8 ; {
00F8 .dbline 153
00F8 ; Set_SDA(1); //SDA=1;
00F8 01E0 ldi R16,1
00FA 90DF rcall _Set_SDA
00FC .dbline 154
00FC ; Set_SCL(1); //SCL=1;
00FC 01E0 ldi R16,1
00FE 86DF rcall _Set_SCL
0100 .dbline 155
0100 ; delay(100);
0100 04E6 ldi R16,100
0102 7EDF rcall _delay
0104 .dbline 156
0104 ; Set_SCL(0); //SCL=0;
0104 0027 clr R16
0106 82DF rcall _Set_SCL
0108 .dbline 157
0108 ; Set_SDA(0); //SDA=0;
0108 0027 clr R16
010A .dbline -2
010A .dbline 158
010A ; }
010A L20:
010A .dbline 0 ; func end
010A 88CF rjmp _Set_SDA
010C .dbend
010C .dbfunc e Write_Byte _Write_Byte fV
010C ; i -> R20
010C ; Data -> R22
.even
010C _Write_Byte::
010C 00D0 rcall push_gset2
010E 602F mov R22,R16
0110 .dbline -1
0110 .dbline 162
0110 ;
0110 ; //写一字节数据Data
0110 ; void Write_Byte(uchar Data)
0110 ; {
0110 .dbline 164
0110 ; uchar i;
0110 ; for(i=0;i<8;i++)
0110 4427 clr R20
0112 07C0 rjmp L25
0114 L22:
0114 .dbline 165
0114 ; {
0114 .dbline 166
0114 ; if(Data & 0x80) //传输位从高位到低位,先传最高位
0114 67FF sbrs R22,7
0116 02C0 rjmp L26
0118 .dbline 167
0118 ; Write_Bit1();
0118 EFDF rcall _Write_Bit1
011A 01C0 rjmp L27
011C L26:
011C .dbline 169
011C ; else
011C ; Write_Bit0();
011C E5DF rcall _Write_Bit0
011E L27:
011E .dbline 170
011E 660F lsl R22
0120 .dbline 171
0120 L23:
0120 .dbline 164
0120 4395 inc R20
0122 L25:
0122 .dbline 164
0122 4830 cpi R20,8
0124 B8F3 brlo L22
0126 .dbline -2
0126 .dbline 172
0126 ; Data <<=1; //数据左移
0126 ; }
0126 ; }
0126 L21:
0126 00D0 rcall pop_gset2
0128 .dbline 0 ; func end
0128 0895 ret
012A .dbsym r i 20 c
012A .dbsym r Data 22 c
012A .dbend
012A .dbfunc e Read_Byte _Read_Byte fc
012A ; j -> R20
012A ; Read_Data -> R22
.even
012A _Read_Byte::
012A 00D0 rcall push_gset2
012C .dbline -1
012C .dbline 176
012C ;
012C ; //读一字节数据:返回值即读的数据
012C ; uchar Read_Byte()
012C ; {
012C .dbline 177
012C ; uchar Read_Data=0xff; // Read_Data为读入的数据,初始值为0xff
012C 6FEF ldi R22,255
012E .dbline 179
012E ; uchar j;
012E ; for (j=0;j<8;j++)
012E 4427 clr R20
0130 13C0 rjmp L32
0132 L29:
0132 .dbline 180
0132 ; {
0132 .dbline 181
0132 ; Set_SDA(1); //SDA=1;
0132 01E0 ldi R16,1
0134 73DF rcall _Set_SDA
0136 .dbline 182
0136 ; Set_SCL(1); //SCL=1;
0136 01E0 ldi R16,1
0138 69DF rcall _Set_SCL
013A .dbline 183
013A ; DDRA &=0xbf; //设置SDA为输入线
013A 8AB3 in R24,0x1a
013C 8F7B andi R24,191
013E 8ABB out 0x1a,R24
0140 .dbline 185
0140 ; //数据读出,若是0则移位;若是1则与0x01或
0140 ; if((PINA & 0x40)==0)
0140 CE99 sbic 0x19,6
0142 05C0 rjmp L33
0144 .dbline 186
0144 ; {
0144 .dbline 187
0144 ; Read_Data <<=1;
0144 660F lsl R22
0146 .dbline 188
0146 ; Read_Data=(Read_Data & 0xfe);
0146 6E7F andi R22,254
0148 .dbline 189
0148 ; Set_SCL(0); //SCL=0;
0148 0027 clr R16
014A 60DF rcall _Set_SCL
014C .dbline 190
014C ; }
014C 04C0 rjmp L34
014E L33:
014E .dbline 192
014E ; else
014E ; {
014E .dbline 193
014E ; Read_Data <<=1;
014E 660F lsl R22
0150 .dbline 194
0150 ; Read_Data =( Read_Data | 0x01);
0150 6160 ori R22,1
0152 .dbline 195
0152 ; Set_SCL(0); //SCL=0
0152 0027 clr R16
0154 5BDF rcall _Set_SCL
0156 .dbline 196
0156 ; }
0156 L34:
0156 .dbline 197
0156 L30:
0156 .dbline 179
0156 4395 inc R20
0158 L32:
0158 .dbline 179
0158 4830 cpi R20,8
015A 58F3 brlo L29
015C .dbline 198
015C ; }
015C ; DDRA |=0x40; //设置SDA为输出线
015C D69A sbi 0x1a,6
015E .dbline 199
015E ; return(Read_Data); //返回读出的字节
015E 062F mov R16,R22
0160 .dbline -2
0160 L28:
0160 00D0 rcall pop_gset2
0162 .dbline 0 ; func end
0162 0895 ret
0164 .dbsym r j 20 c
0164 .dbsym r Read_Data 22 c
0164 .dbend
0164 .dbfunc e Write_1byte _Write_1byte fV
0164 ; Data -> R20
0164 ; Address -> R22
0164 ; Slave -> R10
.even
0164 _Write_1byte::
0164 00D0 rcall push_gset3
0166 622F mov R22,R18
0168 A02E mov R10,R16
016A 4E81 ldd R20,y+6
016C .dbline -1
016C .dbline 204
016C ; }
016C ;
016C ; //写一字节数据
016C ; void Write_1byte(uchar Slave,uchar Address,uchar Data)
016C ; {
016C .dbline 205
016C ; Start(); //开始
016C 5FDF rcall _Start
016E .dbline 206
016E ; Write_Byte(Slave); //写I2C器件地址
016E 0A2D mov R16,R10
0170 CDDF rcall _Write_Byte
0172 L36:
0172 .dbline 208
0172 ; do
0172 ; {
0172 .dbline 209
0172 ; Check_Ack(); //检查应答位
0172 92DF rcall _Check_Ack
0174 .dbline 210
0174 ; }
0174 L37:
0174 .dbline 211
0174 ; while(Ack_Flag==1);
0174 80914600 lds R24,_Ack_Flag
0178 8130 cpi R24,1
017A D9F3 breq L36
017C .dbline 212
017C ; Write_Byte(Address); //送寄存器地址
017C 062F mov R16,R22
017E C6DF rcall _Write_Byte
0180 L39:
0180 .dbline 214
0180 ; do
0180 ; {
0180 .dbline 215
0180 ; Check_Ack(); //检查应答位
0180 8BDF rcall _Check_Ack
0182 .dbline 216
0182 ; }
0182 L40:
0182 .dbline 217
0182 ; while(Ack_Flag==1);
0182 80914600 lds R24,_Ack_Flag
0186 8130 cpi R24,1
0188 D9F3 breq L39
018A .dbline 218
018A ; Write_Byte(Data); //写入一字节数据
018A 042F mov R16,R20
018C BFDF rcall _Write_Byte
018E L42:
018E .dbline 220
018E ; do
018E ; {
018E .dbline 221
018E ; Check_Ack(); //检查应答位
018E 84DF rcall _Check_Ack
0190 .dbline 222
0190 ; }
0190 L43:
0190 .dbline 223
0190 ; while(Ack_Flag==1);
0190 80914600 lds R24,_Ack_Flag
0194 8130 cpi R24,1
0196 D9F3 breq L42
0198 .dbline 224
0198 ; Stop(); //停止
0198 55DF rcall _Stop
019A .dbline -2
019A .dbline 225
019A ; }
019A L35:
019A 00D0 rcall pop_gset3
019C .dbline 0 ; func end
019C 0895 ret
019E .dbsym r Data 20 c
019E .dbsym r Address 22 c
019E .dbsym r Slave 10 c
019E .dbend
019E .dbfunc e Write_2byte _Write_2byte fV
019E ; Data1 -> R20
019E ; Data0 -> R22
019E ; Address -> R10
019E ; Slave -> R12
.even
019E _Write_2byte::
019E 00D0 rcall push_gset4
01A0 A22E mov R10,R18
01A2 C02E mov R12,R16
01A4 6885 ldd R22,y+8
01A6 4A85
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -