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

📄 project.lis

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