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

📄 atmega16test.lst

📁 用AVR atmega16做的一个完整彩色LED控制程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0587)    	spi_init(); //初始化SPI接口
    01B8 D6F8      RCALL	_spi_init
(0588) 
(0589)    	MCUCR  = 0x00;
    01B9 2422      CLR	R2
    01BA BE25      OUT	0x35,R2
(0590)    	GICR     = 0x00;
    01BB BE2B      OUT	0x3B,R2
(0591)    	TIMSK    = 0x00; //timer interrupt sources
    01BC BE29      OUT	0x39,R2
    01BD 9508      RET
_PasswordProcess:
  val                  --> R20
    01BE 940E1BEA  CALL	push_gset1
(0592) //   SEI(); //re-enable interrupts
(0593) //all peripherals are now initialized
(0594) }
(0595) 
(0596) void		PasswordProcess(void)
(0597) {
(0598) 	int		val;
(0599) 	   	EepromDayDataRd();
    01C0 940E1943  CALL	_EepromDayDataRd
(0600) 		if(DayData[0]==0)
    01C2 902000AC  LDS	R2,DayData
    01C4 2022      TST	R2
    01C5 F421      BNE	0x01CA
(0601) 		{
(0602) 	  		Password_alarm=TRUE;
    01C6 E081      LDI	R24,1
    01C7 93800138  STS	Password_alarm,R24
(0603) 		}
    01C9 C045      RJMP	0x020F
(0604) 		else
(0605) 		{
(0606) 			ReadTime();
    01CA 940E1A27  CALL	_ReadTime
(0607) 	   		EepromDateValueRd();
    01CC 940E195D  CALL	_EepromDateValueRd
(0608) //			if((year0==0 && year1==0 &&month1==0 &&month0==1 &&date1==0&&date0==1)||(year0==0xf && year1==0xf &&month1==0x1 &&month0==0xf &&date1==0x3&&date0==0xf))
(0609) 			if((year1==0 && month1==0 && date1==0)||(year1==0xa5 && month1==0x1f && date1==0x3f)) //070616 modify
    01CE 90200060  LDS	R2,year1
    01D0 2022      TST	R2
    01D1 F441      BNE	0x01DA
    01D2 90200062  LDS	R2,month1
    01D4 2022      TST	R2
    01D5 F421      BNE	0x01DA
    01D6 90200065  LDS	R2,date1
    01D8 2022      TST	R2
    01D9 F061      BEQ	0x01E6
    01DA 91800060  LDS	R24,year1
    01DC 3A85      CPI	R24,0xA5
    01DD F461      BNE	0x01EA
    01DE 91800062  LDS	R24,month1
    01E0 318F      CPI	R24,0x1F
    01E1 F441      BNE	0x01EA
    01E2 91800065  LDS	R24,date1
    01E4 338F      CPI	R24,0x3F
    01E5 F421      BNE	0x01EA
(0610) 			{
(0611) 		  		Password_alarm=TRUE;
    01E6 E081      LDI	R24,1
    01E7 93800138  STS	Password_alarm,R24
(0612) 			}
    01E9 C025      RJMP	0x020F
(0613) 			else
(0614) 			{
(0615) 				val=CompareDate();
    01EA 940E1ACE  CALL	_CompareDate
    01EC 01A8      MOVW	R20,R16
(0616) 				if((val==-1) ||( val > DayData[0]))	Password_alarm=TRUE;
    01ED 3F0F      CPI	R16,0xFF
    01EE EFEF      LDI	R30,0xFF
    01EF 071E      CPC	R17,R30
    01F0 F031      BEQ	0x01F7
    01F1 902000AC  LDS	R2,DayData
    01F3 2433      CLR	R3
    01F4 1620      CP	R2,R16
    01F5 0631      CPC	R3,R17
    01F6 F424      BGE	0x01FB
    01F7 E081      LDI	R24,1
    01F8 93800138  STS	Password_alarm,R24
    01FA C014      RJMP	0x020F
(0617) 				else
(0618) 				{
(0619) 					if(val!=Oneday)
    01FB 902000AB  LDS	R2,Oneday
    01FD 2433      CLR	R3
    01FE 1542      CP	R20,R2
    01FF 0553      CPC	R21,R3
    0200 F059      BEQ	0x020C
(0620) 					{
(0621) 						Oneday=val;
    0201 934000AB  STS	Oneday,R20
(0622) 						DayData[0]=DayData[0]-val;
    0203 902000AC  LDS	R2,DayData
    0205 2433      CLR	R3
    0206 1A24      SUB	R2,R20
    0207 0A35      SBC	R3,R21
    0208 922000AC  STS	DayData,R2
(0623) 						EepromDayDataWr();
    020A 940E1950  CALL	_EepromDayDataWr
(0624) 					}
(0625) 					Password_alarm=FALSE;
    020C 2422      CLR	R2
    020D 92200138  STS	Password_alarm,R2
(0626) 				}
(0627) 			}
(0628) 		}
    020F 940E1BED  CALL	pop_gset1
    0211 9508      RET
_main:
  KK                   --> Y+13
  tempPW               --> Y+0
  kind                 --> Y+12
  pwloop               --> Y+10
  i                    --> Y+9
  bit                  --> Y+8
  loop                 --> Y+6
    0212 9761      SBIW	R28,0x11
(0629) }
(0630) 
(0631) void   main(void)
(0632) {
(0633)  	   char		 bit,i=0,kind=0;
    0213 2400      CLR	R0
    0214 8609      STD	Y+9,R0
    0215 860C      STD	Y+12,R0
(0634) 	   uint		 loop=0,KK=0,pwloop=0;
    0216 2411      CLR	R1
    0217 821F      STD	Y+7,R1
    0218 820E      STD	Y+6,R0
    0219 861E      STD	Y+14,R1
    021A 860D      STD	Y+13,R0
    021B 861B      STD	Y+11,R1
    021C 860A      STD	Y+10,R0
(0635) 	   uchar		tempPW[PASSWORDLENGHT];
(0636)  	   val=0;
    021D E040      LDI	R20,0
    021E E050      LDI	R21,0
    021F E060      LDI	R22,0
    0220 E070      LDI	R23,0
    0221 93500070  STS	val+1,R21
    0223 9340006F  STS	val,R20
    0225 93700072  STS	val+3,R23
    0227 93600071  STS	val+2,R22
(0637) 	   KeyCode=0;
    0229 2422      CLR	R2
    022A 9220006E  STS	KeyCode,R2
(0638) 	   DispBuffer[0]=CharFont[16];
    022C EFE4      LDI	R30,0xF4
    022D E0F1      LDI	R31,1
    022E 91E4      LPM	R30,0(Z)
    022F 93E00073  STS	DispBuffer,R30
(0639) 	   DispBuffer[1]=CharFont[16];
    0231 EFE4      LDI	R30,0xF4
    0232 E0F1      LDI	R31,1
    0233 91E4      LPM	R30,0(Z)
    0234 93E00074  STS	DispBuffer+1,R30
(0640) 	   DispBuffer[2]=CharFont[0];
    0236 EEE4      LDI	R30,0xE4
    0237 E0F1      LDI	R31,1
    0238 91E4      LPM	R30,0(Z)
    0239 93E00075  STS	DispBuffer+2,R30
(0641) 	   DispBuffer[3]=CharFont[0];
    023B EEE4      LDI	R30,0xE4
    023C E0F1      LDI	R31,1
    023D 91E4      LPM	R30,0(Z)
    023E 93E00076  STS	DispBuffer+3,R30
(0642) 	   DispBuffer[4]=CharFont[0];
    0240 EEE4      LDI	R30,0xE4
    0241 E0F1      LDI	R31,1
    0242 91E4      LPM	R30,0(Z)
    0243 93E00077  STS	0x77,R30
(0643) 	   DispBuffer[5]=0x00;
    0245 92200078  STS	0x78,R2
(0644) 	   SI_Count=0;
    0247 922000A8  STS	SI_Count,R2
(0645)   	   CLI(); //关中断 
    0249 94F8      BCLR	7
(0646) 	   init_devices();
    024A DF6C      RCALL	_init_devices
(0647) 
(0648) //	   timer0_init();
(0649) 	   
(0650) //	   FactorySetup();
(0651) 	  ModeStatus=MODE_NOMALE;
    024B E081      LDI	R24,1
    024C 9380013F  STS	ModeStatus,R24
(0652) 	  CurrentKey=KEY_FUNCTION;
    024E E483      LDI	R24,0x43
    024F 9380013E  STS	CurrentKey,R24
(0653) 	  BackKey=KEY_FUNCTION;
    0251 9380013D  STS	BackKey,R24
(0654) 	  CurrentKind=KIND0;
    0253 2422      CLR	R2
    0254 9220013A  STS	CurrentKind,R2
(0655) 	  K1Count=0;
    0256 9220013C  STS	K1Count,R2
(0656) 	  val_kind=0;	  	
    0258 92200139  STS	val_kind,R2
(0657) 	  Password_alarm=FALSE;
    025A 92200138  STS	Password_alarm,R2
(0658) 
(0659) 	  EepromDateValueRd();
    025C 940E195D  CALL	_EepromDateValueRd
(0660) #ifdef   VERSION_CONTROL
(0661) 	if(DateValue[0]==0xff && DateValue[1]==0xff && DateValue[2]==0xff && DateValue[3]==0xff ) //070617 mask
    025E 918000AE  LDS	R24,DateValue
    0260 3F8F      CPI	R24,0xFF
    0261 F4F9      BNE	0x0281
    0262 918000AF  LDS	R24,DateValue+1
    0264 3F8F      CPI	R24,0xFF
    0265 F4D9      BNE	0x0281
    0266 918000B0  LDS	R24,DateValue+2
    0268 3F8F      CPI	R24,0xFF
    0269 F4B9      BNE	0x0281
    026A 918000B1  LDS	R24,DateValue+3
    026C 3F8F      CPI	R24,0xFF
    026D F499      BNE	0x0281
(0662) #endif
(0663) 	{
(0664) 	  FactorySetup();
    026E 940E18D0  CALL	_FactorySetup
(0665) 	  val_lenght=MINVAL_LENGHT;
    0270 E084      LDI	R24,4
    0271 E090      LDI	R25,0
    0272 93900135  STS	val_lenght+1,R25
    0274 93800134  STS	val_lenght,R24
(0666) 	  EepromICnumberWr();
    0276 940E17E9  CALL	_EepromICnumberWr
(0667) 	  EepromViewModeWr();
    0278 940E18F6  CALL	_EepromViewModeWr
(0668) 	  DS1302_Init();
    027A 940E1A05  CALL	_DS1302_Init
(0669) 	  EepromDateValueWr();
    027C 940E196A  CALL	_EepromDateValueWr
(0670) 	  EepromDayDataWr();
    027E 940E1950  CALL	_EepromDayDataWr
(0671) 	  PasswordCannel();
    0280 DF15      RCALL	_PasswordCannel
(0672) 	}
(0673) 	   EepromICnumberRd();
    0281 940E189D  CALL	_EepromICnumberRd
(0674) 	   EepromViewModeRd();
    0283 940E1903  CALL	_EepromViewModeRd
(0675) 	for(i=MAXVAL_KIND-1;i>=0;i--)
    0285 E68F      LDI	R24,0x6F
    0286 8789      STD	Y+9,R24
    0287 C010      RJMP	0x0298
(0676) 	{
(0677) 		if(KindData[i]!=0)
    0288 EB88      LDI	R24,0xB8
    0289 E090      LDI	R25,0
    028A 85E9      LDD	R30,Y+9
    028B 27FF      CLR	R31
    028C 0FE8      ADD	R30,R24
    028D 1FF9      ADC	R31,R25
    028E 8020      LDD	R2,Z+0
    028F 2022      TST	R2
    0290 F021      BEQ	0x0295
(0678) 		{
(0679) 			i=i+1;
    0291 8409      LDD	R0,Y+9
    0292 9403      INC	R0
    0293 8609      STD	Y+9,R0
(0680) 			break;
    0294 C006      RJMP	0x029B
    0295 8409      LDD	R0,Y+9
    0296 940A      DEC	R0
    0297 8609      STD	Y+9,R0
    0298 8589      LDD	R24,Y+9
    0299 3080      CPI	R24,0
    029A F768      BCC	0x0288
(0681) 		}
(0682) 	}
(0683) 	val_kind=i;
    029B 8409      LDD	R0,Y+9
    029C 92000139  STS	val_kind,R0
(0684) 	   EepromPasswordRd();
    029E 940E1910  CALL	_EepromPasswordRd
(0685) 	   if(Password_Enable==TRUE)
    02A0 91800137  LDS	R24,Password_Enable
    02A2 3081      CPI	R24,1
    02A3 F409      BNE	0x02A5
(0686)    	   {
(0687)    	   	PasswordProcess();
    02A4 DF19      RCALL	_PasswordProcess
(0688) 	   }
(0689) 
(0690)   	   SEI(); //开中断 
    02A5 9478      BSET	7
(0691) #ifdef   VERSION_CONTROL
(0692) 	WatchDog(7);
    02A6 E007      LDI	R16,7
    02A7 D615      RCALL	_WatchDog
    02A8 C540      RJMP	0x07E9
(0693) #endif	   
(0694) 	   while(1)
(0695) 	   {            if(KeyCode==0)	   KeyCode=PressKeyProcess();
    02A9 9020006E  LDS	R2,KeyCode
    02AB 2022      TST	R2
    02AC F419      BNE	0x02B0
    02AD D588      RCALL	_PressKeyProcess
    02AE 9300006E  STS	KeyCode,R16
(0696) 			   if(KeyCode!=0){
    02B0 9020006E  LDS	R2,KeyCode
    02B2 2022      TST	R2
    02B3 F409      BNE	0x02B5
    02B4 C46B      RJMP	0x0720
(0697) 			   	   switch(KeyCode)
    02B5 2433      CLR	R3
    02B6 8A38      STD	Y+16,R3
    02B7 862F      STD	Y+15,R2
    02B8 01C1      MOVW	R24,R2
    02B9 3883      CPI	R24,0x83
    02BA E0E0      LDI	R30,0
    02BB 079E      CPC	R25,R30
    02BC F121      BEQ	0x02E1
    02BD E883      LDI	R24,0x83
    02BE 0101      MOVW	R0,R2
    02BF 1582      CP	R24,R2
    02C0 0593      CPC	R25,R3
    02C1 F06C      BLT	0x02CF
    02C2 858F      LDD	R24,Y+15
    02C3 8998      LDD	R25,Y+16
    02C4 3481      CPI	R24,0x41
    02C5 E0E0      LDI	R30,0
    02C6 079E      CPC	R25,R30
    02C7 F409      BNE	0x02C9
    02C8 C214      RJMP	0x04DD
    02C9 3483      CPI	R24,0x43
    02CA E0E0      LDI	R30,0
    02CB 079E      CPC	R25,R30
    02CC F409      BNE	0x02CE
    02CD C0A9      RJMP	0x0377
    02CE C259      RJMP	0x0528
    02CF 858F      LDD	R24,Y+15
    02D0 8998      LDD	R25,Y+16
    02D1 3C80      CPI	R24,0xC0
    02D2 E0E0      LDI	R30,0
    02D3 079E      CPC	R25,R30
    02D4 F409      BNE	0x02D6
    02D5 C211      RJMP	0x04E7
    02D6 3C81      CPI	R24,0xC1
    02D7 E0E0      LDI	R30,0
    02D8 079E      CPC	R25,R30
    02D9 F409      BNE	0x02DB
    02DA C105      RJMP	0x03E0
    02DB 3C82      CPI	R24,0xC2
    02DC E0E0      LDI	R30,0
    02DD 079E      CPC	R25,R30
    02DE F409      BNE	0x02E0
    02DF C051      RJMP	0x0331
    02E0 C247      RJMP	0x0528
(0698) 			       {
(0699) 			   	   case	KEY_UP://k2
(0700) 				   		if(ModeStatus==MODE_LENGHT)
    02E1 9180013F  LDS	R24,ModeStatus
    02E3 3082      CPI	R24,2
    02E4 F489      BNE	0x02F6
(0701) 				   		{
(0702) 			   				if(val_lenght<MAXVAL_LENGHT)
    02E5 91800134  LDS	R24,val_lenght
    02E7 91900135  LDS	R25,val_lenght+1
    02E9 308F      CPI	R24,0xF
    02EA E2E7      LDI	R30,0x27
    02EB 079E      CPC	R25,R30
    02EC F428      BCC	0x02F2
(0703) 			   		   	  	val_lenght++;
    02ED 9601      ADIW	R24,1
    02EE 93900135  STS	val_lenght+1,R25
    02F0 93800134  STS	val_lenght,R24
(0704) 							K1Count=5;							
    02F2 E085      LDI	R24,5
    02F3 9380013C  STS	K1Count,R24
(0705) 			   		   	 }
    02F5 C232      RJMP	0x0528
(0706) 						else if(ModeStatus==MODE_KIND)
    02F6 9180013F  LDS	R24,ModeStatus
    02F8 3083      CPI	R24,3
    02F9 F4B9      BNE	0x0311
(0707) 						{
(0708) 			   				if(val_kind<MAXVAL_KIND)
    02FA 91800139  LDS	R24,val_kind
    02FC 3780      CPI	R24,0x70
    02FD F478      BCC	0x030D

⌨️ 快捷键说明

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