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

📄 pproject.lis

📁 AVRkaifashili.rar
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -