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

📄 rtc.lst

📁 AVRkaifashili.rar
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0241 2FF7      MOV	R31,R23
    0242 8180      LDD	R24,Z+0
    0243 778F      ANDI	R24,0x7F
    0244 8380      STD	Z+0,R24
(0258) 					 Flag=temp1+13;
    0245 2F6C      MOV	R22,R28
    0246 2F7D      MOV	R23,R29
    0247 5F60      SUBI	R22,0xF0
    0248 4F7F      SBCI	R23,0xFF
(0259) 					 (*Flag)|=0x80;} 
    0249 2FE6      MOV	R30,R22
    024A 2FF7      MOV	R31,R23
    024B 8180      LDD	R24,Z+0
    024C 6880      ORI	R24,0x80
    024D 8380      STD	Z+0,R24
    024E C002      RJMP	0x0251
(0260) 				else Flag--;           
    024F 5061      SUBI	R22,1
    0250 4070      SBCI	R23,0
(0261) 				(*Flag)|=0x80;         //当前位加上小数点显示
    0251 2FE6      MOV	R30,R22
    0252 2FF7      MOV	R31,R23
    0253 8180      LDD	R24,Z+0
    0254 6880      ORI	R24,0x80
    0255 8380      STD	Z+0,R24
(0262) 				(*(Flag+1))&=0x7f;     //下一位去掉点小数点显示
    0256 9631      ADIW	R30,1
    0257 8180      LDD	R24,Z+0
    0258 778F      ANDI	R24,0x7F
    0259 8380      STD	Z+0,R24
(0263) 				break;
    025A C003      RJMP	0x025E
(0264) 		  case 0x40:Enter_Flag=1;break;//"确定"键处理
    025B E081      LDI	R24,1
    025C 93800071  STS	_Enter_Flag,R24
    025E 90200071  LDS	R2,_Enter_Flag
    0260 2022      TST	R2
    0261 F409      BNE	0x0263
    0262 CF5B      RJMP	0x01BE
(0265) 	//	  case 0x80:Enter_Flag=1;break;  //测试用
(0266) 		  default:break;}
(0267) 	    
(0268) 	   }
(0269) 	 Enter_Flag=0;                     //按键状态恢复
    0263 2422      CLR	R2
    0264 92200071  STS	_Enter_Flag,R2
(0270)      temp2[0]=0x00;                    //秒,默认从00开始计时
    0266 8A2C      STD	Y+20,R2
(0271) 	 temp2[1]=(temp1[11]<<4)|temp1[12];//分
    0267 842F      LDD	R2,Y+15
    0268 858E      LDD	R24,Y+14
    0269 708F      ANDI	R24,0xF
    026A 9582      SWAP	R24
    026B 2982      OR	R24,R2
    026C 8B8D      STD	Y+21,R24
(0272) 	 temp2[2]=(temp1[9]<<4)|temp1[10]; //时
    026D 842D      LDD	R2,Y+13
    026E 858C      LDD	R24,Y+12
    026F 708F      ANDI	R24,0xF
    0270 9582      SWAP	R24
    0271 2982      OR	R24,R2
    0272 8B8E      STD	Y+22,R24
(0273) 	 temp2[3]=temp1[8];                //周
    0273 842B      LDD	R2,Y+11
    0274 8A2F      STD	Y+23,R2
(0274) 	 temp2[4]=(temp1[6]<<4)|temp1[7];  //日
    0275 842A      LDD	R2,Y+10
    0276 8589      LDD	R24,Y+9
    0277 708F      ANDI	R24,0xF
    0278 9582      SWAP	R24
    0279 2982      OR	R24,R2
    027A 8F88      STD	Y+24,R24
(0275) 	 temp2[5]=(temp1[4]<<4)|temp1[5];  //月
    027B 8428      LDD	R2,Y+8
    027C 818F      LDD	R24,Y+7
    027D 708F      ANDI	R24,0xF
    027E 9582      SWAP	R24
    027F 2982      OR	R24,R2
    0280 8F89      STD	Y+25,R24
(0276) 	 temp2[6]=(temp1[2]<<4)|temp1[3];  //年
    0281 802E      LDD	R2,Y+6
    0282 818D      LDD	R24,Y+5
    0283 708F      ANDI	R24,0xF
    0284 9582      SWAP	R24
    0285 2982      OR	R24,R2
    0286 8F8A      STD	Y+26,R24
(0277) 	 Write_Nbyte(SD2303,0x00,temp2,7); //初始化设定时间
    0287 E087      LDI	R24,7
    0288 838A      STD	Y+2,R24
    0289 2F8C      MOV	R24,R28
    028A 2F9D      MOV	R25,R29
    028B 9644      ADIW	R24,0x14
    028C 8399      STD	Y+1,R25
    028D 8388      STD	Y+0,R24
    028E 2722      CLR	R18
    028F E604      LDI	R16,0x64
    0290 DE74      RCALL	_Write_Nbyte
(0278)     }
(0279)    if(Key==0xfd)                       //"闹铃设置"键按下
    0291 2D8A      MOV	R24,R10
    0292 3F8D      CPI	R24,0xFD
    0293 F009      BEQ	0x0295
    0294 C0DD      RJMP	0x0372
(0280)     {temp1[9]|=0x80;
    0295 858C      LDD	R24,Y+12
    0296 6880      ORI	R24,0x80
    0297 878C      STD	Y+12,R24
(0281) 	 Flag=temp1+9;                     //定时小时高位设置提示
    0298 2F6C      MOV	R22,R28
    0299 2F7D      MOV	R23,R29
    029A 5F64      SUBI	R22,0xF4
    029B 4F7F      SBCI	R23,0xFF
    029C C09F      RJMP	0x033C
(0282) 	 while(!Enter_Flag)                //直到按下确定键方停止
(0283)        {for(i=0;i<50;i++)
    029D 2744      CLR	R20
    029E C006      RJMP	0x02A5
(0284) 	      Display(temp1);
    029F 2F0C      MOV	R16,R28
    02A0 2F1D      MOV	R17,R29
    02A1 5F0D      SUBI	R16,0xFD
    02A2 4F1F      SBCI	R17,0xFF
    02A3 DDA9      RCALL	_Display
    02A4 9543      INC	R20
    02A5 3342      CPI	R20,0x32
    02A6 F3C0      BCS	0x029F
(0285) 		Key=~PINB;
    02A7 B2A6      IN	R10,0x16
    02A8 94A0      COM	R10
(0286) 		switch(Key)
    02A9 2CCA      MOV	R12,R10
    02AA 24DD      CLR	R13
    02AB 2D8C      MOV	R24,R12
    02AC 2D9D      MOV	R25,R13
    02AD 3180      CPI	R24,0x10
    02AE E0E0      LDI	R30,0
    02AF 079E      CPC	R25,R30
    02B0 F409      BNE	0x02B2
    02B1 C043      RJMP	0x02F5
    02B2 E180      LDI	R24,0x10
    02B3 158C      CP	R24,R12
    02B4 059D      CPC	R25,R13
    02B5 F094      BLT	0x02C8
    02B6 2D8C      MOV	R24,R12
    02B7 2D9D      MOV	R25,R13
    02B8 3084      CPI	R24,4
    02B9 E0E0      LDI	R30,0
    02BA 079E      CPC	R25,R30
    02BB F101      BEQ	0x02DC
    02BC 3084      CPI	R24,4
    02BD E0E0      LDI	R30,0
    02BE 079E      CPC	R25,R30
    02BF F40C      BGE	0x02C1
    02C0 C07B      RJMP	0x033C
    02C1 2D8C      MOV	R24,R12
    02C2 2D9D      MOV	R25,R13
    02C3 3088      CPI	R24,0x8
    02C4 E0E0      LDI	R30,0
    02C5 079E      CPC	R25,R30
    02C6 F109      BEQ	0x02E8
    02C7 C074      RJMP	0x033C
    02C8 2D8C      MOV	R24,R12
    02C9 2D9D      MOV	R25,R13
    02CA 3280      CPI	R24,0x20
    02CB E0E0      LDI	R30,0
    02CC 079E      CPC	R25,R30
    02CD F409      BNE	0x02CF
    02CE C049      RJMP	0x0318
    02CF 3280      CPI	R24,0x20
    02D0 E0E0      LDI	R30,0
    02D1 079E      CPC	R25,R30
    02D2 F40C      BGE	0x02D4
    02D3 C068      RJMP	0x033C
    02D4 2D8C      MOV	R24,R12
    02D5 2D9D      MOV	R25,R13
    02D6 3480      CPI	R24,0x40
    02D7 E0E0      LDI	R30,0
    02D8 079E      CPC	R25,R30
    02D9 F409      BNE	0x02DB
    02DA C05E      RJMP	0x0339
    02DB C060      RJMP	0x033C
(0287) 		 {case 0x04:                   //"+"按键处理
(0288) 		       (*Flag)++;
    02DC 2FE6      MOV	R30,R22
    02DD 2FF7      MOV	R31,R23
    02DE 8180      LDD	R24,Z+0
    02DF 5F8F      SUBI	R24,0xFF
    02E0 8380      STD	Z+0,R24
(0289) 			   if(((*Flag)&0x7f)==10) *Flag=0|0x80;
    02E1 778F      ANDI	R24,0x7F
    02E2 308A      CPI	R24,0xA
    02E3 F009      BEQ	0x02E5
    02E4 C057      RJMP	0x033C
    02E5 E880      LDI	R24,0x80
    02E6 8380      STD	Z+0,R24
(0290) 		       break;
    02E7 C054      RJMP	0x033C
(0291) 		  case 0x08:                   //"-"按键处理
(0292) 		        if(((*Flag)&0x7f)==0)	*Flag=10|0x80; 
    02E8 2FE6      MOV	R30,R22
    02E9 2FF7      MOV	R31,R23
    02EA 8180      LDD	R24,Z+0
    02EB 778F      ANDI	R24,0x7F
    02EC F411      BNE	0x02EF
    02ED E88A      LDI	R24,0x8A
    02EE 8380      STD	Z+0,R24
(0293) 				(*Flag)--;
    02EF 2FE6      MOV	R30,R22
    02F0 2FF7      MOV	R31,R23
    02F1 8180      LDD	R24,Z+0
    02F2 5081      SUBI	R24,1
    02F3 8380      STD	Z+0,R24
(0294) 				break;
    02F4 C047      RJMP	0x033C
(0295) 		  case 0x10:                   //"下一位"按键处理
(0296) 		        Flag++;
    02F5 5F6F      SUBI	R22,0xFF
    02F6 4F7F      SBCI	R23,0xFF
(0297) 				(*(Flag-1))&=0x7f;     //上一位去掉小数点显示
    02F7 2F86      MOV	R24,R22
    02F8 2F97      MOV	R25,R23
    02F9 9701      SBIW	R24,1
    02FA 2FE8      MOV	R30,R24
    02FB 2FF9      MOV	R31,R25
    02FC 8180      LDD	R24,Z+0
    02FD 778F      ANDI	R24,0x7F
    02FE 8380      STD	Z+0,R24
(0298) 				(*Flag)|=0x80;         //当前位加上小数点显示
    02FF 2FE6      MOV	R30,R22
    0300 2FF7      MOV	R31,R23
    0301 8180      LDD	R24,Z+0
    0302 6880      ORI	R24,0x80
    0303 8380      STD	Z+0,R24
(0299) 				if(Flag==temp1+13) 
    0304 2F8C      MOV	R24,R28
    0305 2F9D      MOV	R25,R29
    0306 9640      ADIW	R24,0x10
    0307 17E8      CP	R30,R24
    0308 07F9      CPC	R31,R25
    0309 F009      BEQ	0x030B
    030A C031      RJMP	0x033C
(0300) 				 {(*Flag)&=0x7f;
    030B 8180      LDD	R24,Z+0
    030C 778F      ANDI	R24,0x7F
    030D 8380      STD	Z+0,R24
(0301) 				  Flag=temp1+9;
    030E 2F6C      MOV	R22,R28
    030F 2F7D      MOV	R23,R29
    0310 5F64      SUBI	R22,0xF4
    0311 4F7F      SBCI	R23,0xFF
(0302) 				  (*Flag)|=0x80;}
    0312 2FE6      MOV	R30,R22
    0313 2FF7      MOV	R31,R23
    0314 8180      LDD	R24,Z+0
    0315 6880      ORI	R24,0x80
    0316 8380      STD	Z+0,R24
(0303) 				break;
    0317 C024      RJMP	0x033C
(0304) 		  case 0x20:                   //"上一位"按键处理
(0305) 		        if(Flag==temp1+9) 
    0318 2F8C      MOV	R24,R28
    0319 2F9D      MOV	R25,R29
    031A 960C      ADIW	R24,0xC
    031B 1768      CP	R22,R24
    031C 0779      CPC	R23,R25
    031D F479      BNE	0x032D
(0306) 				 {(*Flag)&=0x7f;
    031E 2FE6      MOV	R30,R22
    031F 2FF7      MOV	R31,R23
    0320 8180      LDD	R24,Z+0
    0321 778F      ANDI	R24,0x7F
    0322 8380      STD	Z+0,R24
(0307) 				  Flag=temp1+13;
    0323 2F6C      MOV	R22,R28
    0324 2F7D      MOV	R23,R29
    0325 5F60      SUBI	R22,0xF0
    0326 4F7F      SBCI	R23,0xFF
(0308) 				  (*Flag)|=0x80;}
    0327 2FE6      MOV	R30,R22
    0328 2FF7      MOV	R31,R23
    0329 8180      LDD	R24,Z+0
    032A 6880      ORI	R24,0x80
    032B 8380      STD	Z+0,R24
    032C C002      RJMP	0x032F
(0309) 				else Flag--;
    032D 5061      SUBI	R22,1
    032E 4070      SBCI	R23,0
(0310) 				(*Flag)|=0x80;         //当前位加上小数点显示
    032F 2FE6      MOV	R30,R22
    0330 2FF7      MOV	R31,R23
    0331 8180      LDD	R24,Z+0
    0332 6880      ORI	R24,0x80
    0333 8380      STD	Z+0,R24
(0311) 				(*(Flag+1))&=0x7f;     //下一位去掉小数点显示
    0334 9631      ADIW	R30,1
    0335 8180      LDD	R24,Z+0
    0336 778F      ANDI	R24,0x7F
    0337 8380      STD	Z+0,R24
(0312) 				break;
    0338 C003      RJMP	0x033C
(0313) 		  case 0x40:Enter_Flag=1;break;//"确定"键处理
    0339 E081      LDI	R24,1
    033A 93800071  STS	_Enter_Flag,R24
    033C 90200071  LDS	R2,_Enter_Flag
    033E 2022      TST	R2
    033F F409      BNE	0x0341
    0340 CF5C      RJMP	0x029D
(0314) 		//  case 0x80:Enter_Flag=1;break;//测试用
(0315) 		  default:break;}
(0316) 	    
(0317) 	   }
(0318) 	 Enter_Flag=0;
    0341 2422      CLR	R2
    0342 92200071  STS	_Enter_Flag,R2
(0319)      temp3[0]=((temp1[11]<<4)|temp1[12])&0x7f; //分数据处理,去掉小数点
    0344 842F      LDD	R2,Y+15
    0345 858E      LDD	R24,Y+14
    0346 708F      ANDI	R24,0xF
    0347 9582      SWAP	R24
    0348 2982      OR	R24,R2
    0349 778F      ANDI	R24,0x7F
    034A 8F8B      STD	Y+27,R24
(0320) 	 temp3[1]=((temp1[9]<<4)|temp1[10])&0x7f;  //时数据处理,去掉小数点
    034B 842D      LDD	R2,Y+13
    034C 858C      LDD	R24,Y+12
    034D 708F      ANDI	R24,0xF
    034E 9582      SWAP	R24
    034F 2982      OR	R24,R2
    0350 778F      ANDI	R24,0x7F
    0351 8F8C      STD	Y+28,R24
(0321) 	 if((temp3[0]<0x60)&&(temp3[1]<0x24))      //判断是否为合法时间
    0352 8D8B      LDD	R24,Y+27
    0353 3680      CPI	R24,0x60
    0354 F4C0      BCC	0x036D
    0355 8D8C      LDD	R24,Y+28
    0356 3284      CPI	R24,0x24
    0357 F4A8      BCC	0x036D
(0322) 	   {Write_1byte(SD2303,0x0e,0b10110000);   //开启闹铃使能
    0358 EB80      LDI	R24,0xB0
    0359 8388      STD	Y+0,R24
    035A E02E      LDI	R18,0xE
    035B E604      LDI	R16,0x64
    035C DDD1      RCALL	_Write_1byte
(0323) 	    Write_1byte(SD2303,0x0f,0b00101000);   //开始中断使能
    035D E288      LDI	R24,0x28
    035E 8388      STD	Y+0,R24
    035F E02F      LDI	R18,0xF
    0360 E604      LDI	R16,0x64
    0361 DDCC      RCALL	_Write_1byte
(0324) 		Write_Nbyte(SD2303,0x08,temp3,3);}     //初始化闹铃设置
    0362 E083      LDI	R24,3
    0363 838A      STD	Y+2,R24
    0364 2F8C      MOV	R24,R28
    0365 2F9D      MOV	R25,R29
    0366 964B      ADIW	R24,0x1B
    0367 8399      STD	Y+1,R25
    0368 8388      STD	Y+0,R24
    0369 E028      LDI	R18,0x8
    036A E604      LDI	R16,0x64
    036B DD99      RCALL	_Write_Nbyte
    036C C005      RJMP	0x0372
(0325) 	 else  
(0326) 	    Write_1byte(SD2303,0x0e,0b00110000);   //取消闹铃功能
    036D E380      LDI	R24,0x30
    036E 8388      STD	Y+0,R24
    036F E02E      LDI	R18,0xE
    0370 E604      LDI	R16,0x64
    0371 DDBC      RCALL	_Write_1byte
(0327)     }
(0328)   }
(0329) }
    0372 966E      ADIW	R28,0x1E
    0373 D101      RCALL	pop_gset4
    0374 9508      RET
_Convert:
  temp                 --> Y+1
  p2                   --> R20
  p1                   --> R22
    0375 D11A      RCALL	push_gset2
    0376 2F42      MOV	R20,R18
    0377 2F53      MOV	R21,R19
    0378 2F60      MOV	R22,R16
(0330)  
(0331)  
(0332) //***************************DS1722函数开始************************//
(0333) 
(0334) void Convert(uchar p1,uchar *p2)
(0335) {uchar temp;
(0336)  if(p1&0x80)   
    0379 FF67      SBRS	R22,7
    037A C00A      RJMP	0x0385
(0337)    {p2[13]=10;               //零下温度用10表示                    
    037B E08A      LDI	R24,0xA
    037C 2FE4      MOV	R30,R20
    037D 2FF5      MOV	R31,R21
    037E 8785      STD	Z+13,R24
(0338)     p1=0xff-p1;}             //温度绝对值
    037F 2E26      MOV	R2,R22
    0380 2433      CLR	R3
    0381 EF6F      LDI	R22,0xFF
    0382 1962      SUB	R22,R2
    0383 0973      SBC	R23,R3
    0384 C004      RJMP	0x0389
(0339)  else
(0340)    p2[13]=11;                //零上温度用11表示
    0385 E08B      LDI	R24,0xB
    0386 2FE4      MOV	R30,R20
    0387 2FF5      MOV	R31,R21
    0388 8785      STD	Z+13,R24
(0341)    p2[14]=p1/10;             //温度十位
    0389 E01A      LDI	R17,0xA
    038A 2F06      MOV	R16,R22
    038B D0CF      RCALL	div8u
    038C 2FE4      MOV	R30,R20
    038D 2FF5      MOV	R31,R21
    038E 8706      STD	Z+14,R16
(0342)    p2[15]=p1-p2[14]*10;      //温度个位
    038F 2FE4      MOV	R30,R20
    0390 2FF5      MOV	R31,R21
    0391 8516      LDD	R17,Z+14
    0392 E00A      LDI	R16,0xA
    0393 D108      RCALL	mpy8s
    0394 2E26      MOV	R2,R22

⌨️ 快捷键说明

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