📄 atmega16test.lst
字号:
(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 + -