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

📄 24c01a.lst

📁 AVR 24c02 f
💻 LST
📖 第 1 页 / 共 3 页
字号:
    01BD F411      BNE	0x01C0
(0390)   return I2C_ERR;
    01BE 2700      CLR	R16
    01BF C029      RJMP	0x01E9
(0391) 
(0392)  if( I2C_Restart()==I2C_ERR )//重启动
    01C0 DEBB      RCALL	_I2C_Restart
    01C1 2300      TST	R16
    01C2 F411      BNE	0x01C5
(0393)   return I2C_ERR;
    01C3 2700      CLR	R16
    01C4 C024      RJMP	0x01E9
(0394) 
(0395)   //rdDAdr &=0xfffe;
(0396)  if( I2C_SendRdDAdr((rdDAdr&0xfffe)|I2C_READ)==I2C_ERR )//保证读控制位正确
    01C5 2F04      MOV	R16,R20
    01C6 7F0E      ANDI	R16,0xFE
    01C7 6001      ORI	R16,1
    01C8 DEF0      RCALL	_I2C_SendRdDAdr
    01C9 2300      TST	R16
    01CA F411      BNE	0x01CD
(0397)   return I2C_ERR;
    01CB 2700      CLR	R16
    01CC C01C      RJMP	0x01E9
(0398) 
(0399)  for(i=0;i<num-1;i++)								   //接收数据
    01CD 2744      CLR	R20
    01CE C00A      RJMP	0x01D9
(0400)   if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
    01CF 2F04      MOV	R16,R20
    01D0 2711      CLR	R17
    01D1 0D0A      ADD	R16,R10
    01D2 1D1B      ADC	R17,R11
    01D3 DF3E      RCALL	_I2C_RcvAckDat
    01D4 2300      TST	R16
    01D5 F411      BNE	0x01D8
(0401)    return I2C_ERR;
    01D6 2700      CLR	R16
    01D7 C011      RJMP	0x01E9
    01D8 9543      INC	R20
    01D9 2F86      MOV	R24,R22
    01DA 5081      SUBI	R24,1
    01DB 1748      CP	R20,R24
    01DC F390      BCS	0x01CF
(0402)  
(0403)  if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
    01DD 2F04      MOV	R16,R20
    01DE 2711      CLR	R17
    01DF 0D0A      ADD	R16,R10
    01E0 1D1B      ADC	R17,R11
    01E1 DF19      RCALL	_I2C_RcvNAckDat
    01E2 2300      TST	R16
    01E3 F411      BNE	0x01E6
(0404)    return I2C_ERR;
    01E4 2700      CLR	R16
    01E5 C003      RJMP	0x01E9
(0405) 
(0406)  I2CStop();
    01E6 E984      LDI	R24,0x94
    01E7 BF86      OUT	0x36,R24
(0407)  
(0408)  return I2C_CRR;
    01E8 E001      LDI	R16,1
    01E9 940E0295  CALL	pop_gset4
    01EB 9508      RET
_I2C_Write_direct:
  dat                  --> R20
  wrDAdr               --> R22
    01EC 940E029E  CALL	push_gset2
    01EE 2F42      MOV	R20,R18
    01EF 01B8      MOVW	R22,R16
(0409) }
(0410) /*--------------------------------------------------------------------
(0411) 函数名称:I2C_Write_direct
(0412) 函数功能:I2C写无从地址器件,写一个字节
(0413) 注意事项:
(0414) 提示说明:
(0415) 输    入:wrDAdr : write device-address 写器件地址
(0416)           dat: data 数据
(0417) 返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
(0418) --------------------------------------------------------------------*/
(0419) unsigned char I2C_Write_direct(unsigned int wrDAdr,unsigned char dat)
(0420) {
(0421)  if( I2C_Start()==I2C_ERR )
    01F0 DE7C      RCALL	_I2C_Start
    01F1 2300      TST	R16
    01F2 F411      BNE	0x01F5
(0422)   return I2C_ERR;
    01F3 2700      CLR	R16
    01F4 C010      RJMP	0x0205
(0423)  //wrDAdr &=0xfffe;
(0424)  if( I2C_SendWrDAdr_((wrDAdr&0xfffe)|I2C_WRITE)==I2C_ERR )//保证写控制位正确
    01F5 018B      MOVW	R16,R22
    01F6 7F0E      ANDI	R16,0xFE
    01F7 DEA7      RCALL	_I2C_SendWrDAdr_
    01F8 2300      TST	R16
    01F9 F411      BNE	0x01FC
(0425)   return I2C_ERR;
    01FA 2700      CLR	R16
    01FB C009      RJMP	0x0205
(0426) 
(0427)  if( I2C_SendDat(dat)==I2C_ERR )//直接写数据
    01FC 2F04      MOV	R16,R20
    01FD DEE9      RCALL	_I2C_SendDat
    01FE 2300      TST	R16
    01FF F411      BNE	0x0202
(0428)   return I2C_ERR;
    0200 2700      CLR	R16
    0201 C003      RJMP	0x0205
(0429) 
(0430)  I2CStop();
    0202 E984      LDI	R24,0x94
    0203 BF86      OUT	0x36,R24
(0431) 
(0432)  return I2C_CRR;
    0204 E001      LDI	R16,1
    0205 940E0292  CALL	pop_gset2
    0207 9508      RET
_I2C_Read_direct:
  pRdDat               --> Y+4
  wordAdr              --> R22
  rdDAdr               --> R20
    0208 940E029E  CALL	push_gset2
    020A 2F62      MOV	R22,R18
    020B 01A8      MOVW	R20,R16
(0433) }
(0434) /*--------------------------------------------------------------------
(0435) 函数名称:I2C_Read_direct
(0436) 函数功能:I2C读无从地址器件,读一个数据
(0437) 注意事项:
(0438) 提示说明:
(0439) 输    入:rdDAdr : read device-address 读器件地址
(0440)    		  *pRdDat: p->read data 读取数据指针
(0441) 返    回:运行状况  I2C_ERR :错误   I2C_CRR :正确
(0442) --------------------------------------------------------------------*/
(0443) unsigned char I2C_Read_direct(unsigned int rdDAdr,unsigned char wordAdr,unsigned char *pRdDat)
(0444) {
(0445)  if( I2C_Start()==I2C_ERR )
    020C DE60      RCALL	_I2C_Start
    020D 2300      TST	R16
    020E F411      BNE	0x0211
(0446)   return I2C_ERR;
    020F 2700      CLR	R16
    0210 C011      RJMP	0x0222
(0447) 
(0448)    //rdDAdr &=0xfffe;
(0449)  if( I2C_SendWrDAdr_((rdDAdr&0xfffe)|I2C_WRITE)==I2C_ERR )
    0211 018A      MOVW	R16,R20
    0212 7F0E      ANDI	R16,0xFE
    0213 DE8B      RCALL	_I2C_SendWrDAdr_
    0214 2300      TST	R16
    0215 F411      BNE	0x0218
(0450)   return I2C_ERR;
    0216 2700      CLR	R16
    0217 C00A      RJMP	0x0222
(0451) 
(0452)  if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )//直接读数据
    0218 810C      LDD	R16,Y+4
    0219 811D      LDD	R17,Y+5
    021A DEE0      RCALL	_I2C_RcvNAckDat
    021B 2300      TST	R16
    021C F411      BNE	0x021F
(0453)   return I2C_ERR;
    021D 2700      CLR	R16
    021E C003      RJMP	0x0222
(0454) 
(0455)  I2CStop();
    021F E984      LDI	R24,0x94
    0220 BF86      OUT	0x36,R24
(0456) 
(0457)  return I2C_CRR;
    0221 E001      LDI	R16,1
    0222 940E0292  CALL	pop_gset2
    0224 9508      RET
FILE: D:\24C01A\24C01A.c
(0001) 
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) #include "I2C.h"
(0005) 
(0006) void delay_1ms(void)                 //1ms延时函数
(0007) {
(0008)    unsigned int i;
(0009)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    0225 2700      CLR	R16
    0226 2711      CLR	R17
    0227 C002      RJMP	0x022A
    0228 5F0F      SUBI	R16,0xFF
    0229 4F1F      SBCI	R17,0xFF
    022A 3704      CPI	R16,0x74
    022B E0E4      LDI	R30,4
    022C 071E      CPC	R17,R30
    022D F3D0      BCS	0x0228
    022E 9508      RET
_main:
  temp3                --> Y+19
  temp2                --> Y+11
  p                    --> R22
  temp1                --> Y+3
  i                    --> R20
    022F 9769      SBIW	R28,0x19
(0010) }
(0011) 
(0012) void main()
(0013) {
(0014) unsigned char temp1[8]={18,17,16,15,14,13,12,11};
    0230 E584      LDI	R24,0x54
    0231 E090      LDI	R25,0
    0232 01FE      MOVW	R30,R28
    0233 9633      ADIW	R30,3
    0234 E008      LDI	R16,0x8
    0235 E010      LDI	R17,0
    0236 93FA      ST	R31,-Y
    0237 93EA      ST	R30,-Y
    0238 939A      ST	R25,-Y
    0239 938A      ST	R24,-Y
    023A 940E02B7  CALL	asgncblk
(0015) unsigned char temp2[8]={0};
    023C E58C      LDI	R24,0x5C
    023D E090      LDI	R25,0
    023E 01FE      MOVW	R30,R28
    023F 963B      ADIW	R30,0xB
    0240 E008      LDI	R16,0x8
    0241 E010      LDI	R17,0
    0242 93FA      ST	R31,-Y
    0243 93EA      ST	R30,-Y
    0244 939A      ST	R25,-Y
    0245 938A      ST	R24,-Y
    0246 940E02B7  CALL	asgncblk
(0016) unsigned char temp3[6]={0};
    0248 E684      LDI	R24,0x64
    0249 E090      LDI	R25,0
    024A 01FE      MOVW	R30,R28
    024B 9673      ADIW	R30,0x13
    024C E006      LDI	R16,6
    024D E010      LDI	R17,0
    024E 93FA      ST	R31,-Y
    024F 93EA      ST	R30,-Y
    0250 939A      ST	R25,-Y
    0251 938A      ST	R24,-Y
    0252 940E02B7  CALL	asgncblk
(0017) unsigned char i=0,*p;
    0254 2744      CLR	R20
(0018) 
(0019) I2C_Init();
    0255 DE00      RCALL	_I2C_Init
(0020) 
(0021) I2C_Write_(0xa0,0,temp1,8);//一次写入8个字节
    0256 E088      LDI	R24,0x8
    0257 838A      STD	Y+2,R24
    0258 01CE      MOVW	R24,R28
    0259 9603      ADIW	R24,3
    025A 8399      STD	Y+1,R25
    025B 8388      STD	Y+0,R24
    025C 2722      CLR	R18
    025D EA00      LDI	R16,0xA0
    025E E010      LDI	R17,0
    025F DEEB      RCALL	_I2C_Write_
(0022)   delay_1ms();
    0260 DFC4      RCALL	_delay_1ms
(0023)   delay_1ms();
    0261 DFC3      RCALL	_delay_1ms
(0024) 
(0025) I2C_Read_(0xa0,0,temp2,8);//一次读取8个字节
    0262 E088      LDI	R24,0x8
    0263 838A      STD	Y+2,R24
    0264 01CE      MOVW	R24,R28
    0265 960B      ADIW	R24,0xB
    0266 8399      STD	Y+1,R25
    0267 8388      STD	Y+0,R24
    0268 2722      CLR	R18
    0269 EA00      LDI	R16,0xA0
    026A E010      LDI	R17,0
    026B DF3B      RCALL	_I2C_Read_
(0026) 
(0027) for(i=10;i<16;i++)        //循环6次,写入6个字节
    026C E04A      LDI	R20,0xA
    026D C00E      RJMP	0x027C
(0028) {
(0029)   I2C_Write(0xa0,i,temp1[i-10]);
    026E 01CE      MOVW	R24,R28
    026F 9707      SBIW	R24,7
    0270 2FE4      MOV	R30,R20
    0271 27FF      CLR	R31
    0272 0FE8      ADD	R30,R24
    0273 1FF9      ADC	R31,R25
    0274 8020      LDD	R2,Z+0
    0275 8228      STD	Y+0,R2
    0276 2F24      MOV	R18,R20
    0277 EA00      LDI	R16,0xA0
    0278 E010      LDI	R17,0
    0279 DEAF      RCALL	_I2C_Write
(0030)   delay_1ms();			 //延时不可缺少
    027A DFAA      RCALL	_delay_1ms
    027B 9543      INC	R20
    027C 3140      CPI	R20,0x10
    027D F380      BCS	0x026E
(0031)   //delay_1ms();
(0032) }
(0033) 
(0034) p=temp3;
    027E 01BE      MOVW	R22,R28
    027F 5E6D      SUBI	R22,0xED
    0280 4F7F      SBCI	R23,0xFF
(0035) for(i=10;i<16;i++)		 //循环6次,读取6个字节至temp3
    0281 E04A      LDI	R20,0xA
    0282 C00A      RJMP	0x028D
(0036) {I2C_Read(0xa0,i,p++);
    0283 011B      MOVW	R2,R22
    0284 5F6F      SUBI	R22,0xFF
    0285 4F7F      SBCI	R23,0xFF
    0286 8239      STD	Y+1,R3
    0287 8228      STD	Y+0,R2
    0288 2F24      MOV	R18,R20
    0289 EA00      LDI	R16,0xA0
    028A E010      LDI	R17,0
    028B DEEB      RCALL	_I2C_Read
    028C 9543      INC	R20
    028D 3140      CPI	R20,0x10
    028E F3A0      BCS	0x0283
(0037) //delay_1ms();
(0038)   //delay_1ms();
(0039)   }
(0040) 
(0041) while(1);
FILE: <library>
    028F CFFF      RJMP	0x028F
    0290 9669      ADIW	R28,0x19
    0291 9508      RET
pop_gset2:
    0292 E0E2      LDI	R30,2
    0293 940C02A4  JMP	pop
pop_gset4:
    0295 E0E8      LDI	R30,0x8
    0296 940C02A4  JMP	pop
push_gset5:
    0298 92FA      ST	R15,-Y
    0299 92EA      ST	R14,-Y
push_gset4:
    029A 92DA      ST	R13,-Y
    029B 92CA      ST	R12,-Y
push_gset3:
    029C 92BA      ST	R11,-Y
    029D 92AA      ST	R10,-Y
push_gset2:
    029E 937A      ST	R23,-Y
    029F 936A      ST	R22,-Y
push_gset1:
    02A0 935A      ST	R21,-Y
    02A1 934A      ST	R20,-Y
    02A2 9508      RET
pop_gset1:
    02A3 E0E1      LDI	R30,1
pop:
    02A4 9149      LD	R20,Y+
    02A5 9159      LD	R21,Y+
    02A6 FDE0      SBRC	R30,0
    02A7 9508      RET
    02A8 9169      LD	R22,Y+
    02A9 9179      LD	R23,Y+
    02AA FDE1      SBRC	R30,1
    02AB 9508      RET
    02AC 90A9      LD	R10,Y+
    02AD 90B9      LD	R11,Y+
    02AE FDE2      SBRC	R30,2
    02AF 9508      RET
    02B0 90C9      LD	R12,Y+
    02B1 90D9      LD	R13,Y+
    02B2 FDE3      SBRC	R30,3
    02B3 9508      RET
    02B4 90E9      LD	R14,Y+
    02B5 90F9      LD	R15,Y+
    02B6 9508      RET
asgncblk:
    02B7 93AA      ST	R26,-Y
    02B8 93BA      ST	R27,-Y
    02B9 93EA      ST	R30,-Y
    02BA 93FA      ST	R31,-Y
    02BB 920A      ST	R0,-Y
    02BC 81AF      LDD	R26,Y+7
    02BD 85B8      LDD	R27,Y+8
    02BE 81ED      LDD	R30,Y+5
    02BF 81FE      LDD	R31,Y+6
    02C0 3000      CPI	R16,0
    02C1 0701      CPC	R16,R17
    02C2 F031      BEQ	0x02C9
    02C3 95C8      LPM
    02C4 920D      ST	R0,X+
    02C5 9631      ADIW	R30,1
    02C6 5001      SUBI	R16,1
    02C7 4010      SBCI	R17,0
    02C8 CFF7      RJMP	0x02C0
    02C9 9009      LD	R0,Y+
    02CA 91F9      LD	R31,Y+
    02CB 91E9      LD	R30,Y+
    02CC 91B9      LD	R27,Y+
    02CD 91A9      LD	R26,Y+
    02CE 9624      ADIW	R28,4
    02CF 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -