📄 doorc.lst
字号:
124E 3180 CPI R24,0x10
124F E2E7 LDI R30,0x27
1250 079E CPC R25,R30
1251 F3C0 BCS 0x124A
(0586) status3=keyvalue();
1252 940E46A9 CALL _keyvalue
1254 2F40 MOV R20,R16
(0587) if(status3==0x0a);
1255 300A CPI R16,0xA
1256 F439 BNE 0x125E
1257 C00A RJMP 0x1262
(0588) else
(0589) {
(0590) while(1)
(0591) {
(0592) ttt3=keyvalue();
1258 940E46A9 CALL _keyvalue
125A 2F60 MOV R22,R16
(0593) if(status3!=ttt3)break;
125B 1740 CP R20,R16
125C F009 BEQ 0x125E
125D C001 RJMP 0x125F
125E CFF9 RJMP 0x1258
(0594) }
(0595) return status3;
125F 2F04 MOV R16,R20
1260 C001 RJMP 0x1262
(0596) }
(0597) }
(0598) else
(0599) return 40;
1261 E208 LDI R16,0x28
1262 940E485A CALL pop_gset3
1264 9508 RET
_read0key:
status4 --> R20
status3 --> R20
ttt3 --> R22
i --> R22
1265 940E4869 CALL push_gset2
(0600) }
(0601) unsigned char read0key(void)
(0602) {
(0603) unsigned char status4,ttt3,status3;
(0604) unsigned int i;
(0605) status4=scankey();
1267 940E4605 CALL _scankey
1269 2F40 MOV R20,R16
(0606) if(status4==0)
126A 2300 TST R16
126B F529 BNE 0x1291
(0607) {
(0608) for(i=0;i<10000;i++);
126C 2766 CLR R22
126D 2777 CLR R23
126E C002 RJMP 0x1271
126F 5F6F SUBI R22,0xFF
1270 4F7F SBCI R23,0xFF
1271 3160 CPI R22,0x10
1272 E2E7 LDI R30,0x27
1273 077E CPC R23,R30
1274 F3D0 BCS 0x126F
(0609) status3=keyvalue();
1275 940E46A9 CALL _keyvalue
1277 2F40 MOV R20,R16
(0610) if(status3==0)
1278 2300 TST R16
1279 F4C1 BNE 0x1292
(0611) {
(0612) if(timenum>13)timenum=0;
127A E08D LDI R24,0xD
127B 90200110 LDS R2,timenum
127D 1582 CP R24,R2
127E F418 BCC 0x1282
127F 2422 CLR R2
1280 92200110 STS timenum,R2
(0613) timenum++;
1282 91800110 LDS R24,timenum
1284 5F8F SUBI R24,0xFF
1285 93800110 STS timenum,R24
1287 C006 RJMP 0x128E
(0614) while(1)
(0615) {
(0616) ttt3=keyvalue();
1288 940E46A9 CALL _keyvalue
128A 2F60 MOV R22,R16
(0617) if(status3!=ttt3)break;
128B 1740 CP R20,R16
128C F009 BEQ 0x128E
128D C001 RJMP 0x128F
128E CFF9 RJMP 0x1288
(0618) }
(0619) return 0;
128F 2700 CLR R16
1290 C001 RJMP 0x1292
(0620) }
(0621) }
(0622) else
(0623) return 99;
1291 E603 LDI R16,0x63
1292 940E4857 CALL pop_gset2
1294 9508 RET
_write_time:
i --> R20
time --> R22
addr --> R10
1295 940E4867 CALL push_gset3
1297 01B9 MOVW R22,R18
1298 2EA0 MOV R10,R16
(0624) }
(0625) void write_time(unsigned char addr,unsigned char *time)
(0626) {
(0627) unsigned char i;
(0628) for(i=0;i<7;i++)
1299 2744 CLR R20
129A C00F RJMP 0x12AA
(0629) EEPROMwrite(addr*16+i,time[i]);
129B 2FE4 MOV R30,R20
129C 27FF CLR R31
129D 0FE6 ADD R30,R22
129E 1FF7 ADC R31,R23
129F 8120 LDD R18,Z+0
12A0 E180 LDI R24,0x10
12A1 9D8A MUL R24,R10
12A2 0180 MOVW R16,R0
12A3 2E24 MOV R2,R20
12A4 2433 CLR R3
12A5 0D02 ADD R16,R2
12A6 1D13 ADC R17,R3
12A7 940E48B2 CALL _EEPROMwrite
12A9 9543 INC R20
12AA 3047 CPI R20,7
12AB F378 BCS 0x129B
12AC 940E485A CALL pop_gset3
12AE 9508 RET
_main:
now_time --> Y+1
status2 --> Y+1
yyj --> Y+4
modecounter --> Y+3
status4 --> Y+2
status3 --> R12
ttt3 --> R14
i --> R20
12AF 9725 SBIW R28,5
(0630) }
(0631) void main(void)
(0632) {
(0633) unsigned char status2,status3,status4,ttt3;
(0634) unsigned int i,now_time;
(0635) unsigned char modecounter=0;
12B0 2400 CLR R0
12B1 820B STD Y+3,R0
(0636) unsigned char yyj;
(0637)
(0638) CLI();
12B2 94F8 BCLR 7
(0639) // WDTCR=0x18;
(0640) // WDTCR=0x10;
(0641)
(0642) MCUCR = 0x30; //进入掉电休眠模式 SE=1,SM0,SM1,SM2 :0,1,0
12B3 E380 LDI R24,0x30
12B4 BF85 OUT 0x35,R24
(0643) EICRA = 0x03; //外部中断0的中断模式,上升沿触发中断
12B5 E083 LDI R24,3
12B6 9380006A STS 0x6A,R24
(0644) EICRB = 0x80; //外部中断7的中断模式,下降沿触发中断
12B8 E880 LDI R24,0x80
12B9 BF8A OUT 0x3A,R24
(0645) EIMSK = 0x81; //外部中断0和外部中断7的中断任务.
12BA E881 LDI R24,0x81
12BB BF89 OUT 0x39,R24
(0646) TIMSK = 0x04; //timer interrupt sources
12BC E084 LDI R24,4
12BD BF87 OUT 0x37,R24
(0647) ETIMSK = 0x00; //extended timer interrupt sources
12BE 2422 CLR R2
12BF 9220007D STS 0x7D,R2
(0648) PORTF=0x00;
12C1 92200062 STS 0x62,R2
(0649) DDRF=0xFF;
12C3 EF8F LDI R24,0xFF
12C4 93800061 STS 0x61,R24
(0650) SEI();
12C6 9478 BSET 7
(0651) timer0_init();
12C7 DB2C RCALL _timer0_init
(0652) timer1_init();
12C8 DB21 RCALL _timer1_init
(0653) uart0_init();
12C9 DA46 RCALL _uart0_init
(0654) displaycount=0;
12CA 2422 CLR R2
12CB 922001FD STS displaycount,R2
(0655) CLEAR_LIGHT();
12CD 9ABE SBI 0x17,6
(0656) init_par(); //init ds1302
12CE DAD0 RCALL _init_par
(0657) // init_val(); //init var
(0658) lcd_init(); //lcd init
12CF 940E1C8C CALL _lcd_init
(0659) clear_lcd();
12D1 940E1CC3 CALL _clear_lcd
(0660) display_1();
12D3 940E1DBF CALL _display_1
(0661) CLEAR_BELL();
12D5 9ABD SBI 0x17,5
(0662) SET_LED0();
12D6 988F CBI 0x11,7
(0663) beep(5);
12D7 E005 LDI R16,5
12D8 DB49 RCALL _beep
(0664) delay(100);
12D9 E604 LDI R16,0x64
12DA DED6 RCALL _delay
(0665) beep(5);
12DB E005 LDI R16,5
12DC DB45 RCALL _beep
12DD C721 RJMP 0x19FF
(0666)
(0667)
(0668) while(1)
(0669) {
(0670)
(0671) lcd_init();
12DE 940E1C8C CALL _lcd_init
(0672) if(sio_flag==1)COMM_RX();
12E0 918001A3 LDS R24,sio_flag
12E2 3081 CPI R24,1
12E3 F409 BNE 0x12E5
12E4 DB4B RCALL _COMM_RX
(0673) Get_1302(time_data);
12E5 E00C LDI R16,0xC
12E6 E012 LDI R17,2
12E7 940E1AC9 CALL _Get_1302
(0674) if(modemstatus==0) //显示正常的日期时间
12E9 90200102 LDS R2,modemstatus
12EB 2022 TST R2
12EC F429 BNE 0x12F2
(0675) {
(0676) display_time1(time_data);
12ED E00C LDI R16,0xC
12EE E012 LDI R17,2
12EF 940E240E CALL _display_time1
(0677) }
12F1 C6E0 RJMP 0x19D2
(0678) else if(modemstatus==2) //事件录入状态
12F2 91800102 LDS R24,modemstatus
12F4 3082 CPI R24,2
12F5 F009 BEQ 0x12F7
12F6 C158 RJMP 0x144F
(0679) {
(0680) if(readxinghaokey()==0)
12F7 DF25 RCALL _readxinghaokey
12F8 2300 TST R16
12F9 F4F1 BNE 0x1318
(0681) {
(0682) if(lockkey_flag==1)lockkey_flag=0;
12FA 91800103 LDS R24,lockkey_flag
12FC 3081 CPI R24,1
12FD F421 BNE 0x1302
12FE 2422 CLR R2
12FF 92200103 STS lockkey_flag,R2
1301 C016 RJMP 0x1318
(0683) else if(lockkey_flag==0)
1302 90200103 LDS R2,lockkey_flag
1304 2022 TST R2
1305 F491 BNE 0x1318
(0684) {
(0685) lockkey_flag=1;
1306 E081 LDI R24,1
1307 93800103 STS lockkey_flag,R24
(0686) for(i=0;i<16;i++)
1309 2744 CLR R20
130A 2755 CLR R21
130B C008 RJMP 0x1314
(0687) {
(0688) EEPROMwrite(0x200+i,1);
130C E021 LDI R18,1
130D 018A MOVW R16,R20
130E 5000 SUBI R16,0
130F 4F1E SBCI R17,0xFE
1310 940E48B2 CALL _EEPROMwrite
1312 5F4F SUBI R20,0xFF
1313 4F5F SBCI R21,0xFF
1314 3140 CPI R20,0x10
1315 E0E0 LDI R30,0
1316 075E CPC R21,R30
1317 F3A0 BCS 0x130C
(0689) }
(0690) }
(0691) }
(0692) if(lockkey_flag==1)
1318 91800103 LDS R24,lockkey_flag
131A 3081 CPI R24,1
131B F009 BEQ 0x131D
131C C12F RJMP 0x144C
(0693) {
(0694) yyj=readnumberkey();
131D DF22 RCALL _readnumberkey
131E 830C STD Y+4,R16
(0695) switch(yyj)
131F 2EA0 MOV R10,R16
1320 24BB CLR R11
1321 20AA TST R10
1322 F419 BNE 0x1326
1323 20BB TST R11
1324 F409 BNE 0x1326
1325 C0F8 RJMP 0x141E
1326 01C5 MOVW R24,R10
1327 3081 CPI R24,1
1328 E0E0 LDI R30,0
1329 079E CPC R25,R30
132A F409 BNE 0x132C
132B C02E RJMP 0x135A
132C 3082 CPI R24,2
132D E0E0 LDI R30,0
132E 079E CPC R25,R30
132F F409 BNE 0x1331
1330 C03F RJMP 0x1370
1331 3083 CPI R24,3
1332 E0E0 LDI R30,0
1333 079E CPC R25,R30
1334 F409 BNE 0x1336
1335 C050 RJMP 0x1386
1336 3084 CPI R24,4
1337 E0E0 LDI R30,0
1338 079E CPC R25,R30
1339 F409 BNE 0x133B
133A C060 RJMP 0x139B
133B 3085 CPI R24,5
133C E0E0 LDI R30,0
133D 079E CPC R25,R30
133E F409 BNE 0x1340
133F C071 RJMP 0x13B1
1340 3086 CPI R24,6
1341 E0E0 LDI R30,0
1342 079E CPC R25,R30
1343 F409 BNE 0x1345
1344 C082 RJMP 0x13C7
1345 3087 CPI R24,7
1346 E0E0 LDI R30,0
1347 079E CPC R25,R30
1348 F409 BNE 0x134A
1349 C092 RJMP 0x13DC
134A 3088 CPI R24,0x8
134B E0E0 LDI R30,0
134C 079E CPC R25,R30
134D F409 BNE 0x134F
134E C0A3 RJMP 0x13F2
134F 3089 CPI R24,0x9
1350 E0E0 LDI R30,0
1351 079E CPC R25,R30
1352 F409 BNE 0x1354
1353 C0B4 RJMP 0x1408
1354 308B CPI R24,0xB
1355 E0E0 LDI R30,0
1356 079E CPC R25,R30
1357 F409 BNE 0x1359
1358 C0DB RJMP 0x1434
1359 C0EF RJMP 0x1449
(0696) {
(0697) case 1:
(0698) keynum=0;
135A 2422 CLR R2
135B 92200104 STS keynum,R2
(0699) if(key1mode>2)key1mode=0;
135D E082 LDI R24,2
135E 90200105 LDS R2,key1mode
1360 1582 CP R24,R2
1361 F418 BCC 0x1365
1362 2422 CLR R2
1363 92200105 STS key1mode,R2
(0700) key1mode++;
1365 91800105 LDS R24,key1mode
1367 5F8F SUBI R24,0xFF
1368 93800105 STS key1mode,R24
(0701) EEPROMwrite(0x200,key1mode);
136A 2F28 MOV R18,R24
136B E000 LDI R16,0
136C E012 LDI R17,2
136D 940E48B2 CALL _EEPROMwrite
(0702) break;
136F C0D9 RJMP 0x1449
(0703)
(0704) case 2:
(0705) keynum=1;
1370 E081 LDI R24,1
1371 93800104 STS keynum,R24
(0706) if(key2mode>2)key2mode=0;
1373 E082 LDI R24,2
1374 90200106 LDS R2,key2mode
1376 1582 CP R24,R2
1377 F418 BCC 0x137B
1378 2422 CLR R2
1379 92200106 STS key2mode,R2
(0707) key2mode++;
137B 91800106 LDS R24,key2mode
137D 5F8F SUBI R24,0xFF
137E 93800106 STS key2mode,R24
(0708) EEPROMwrite(0x200+1,key2mode);
1380 2F28 MOV R18,R24
1381 E001 LDI R16,1
1382 E012 LDI R17,2
1383 940E48B2 CALL _EEPROMwrite
(0709) break;
1385 C0C3 RJMP 0x1449
(0710)
(0711) case 3:
(0712) keynum=2;
1386 E082 LDI R24,2
1387 93800104 STS keynum,R24
(0713) if(key3mode>2)key3mode=0;
1389 90200107 LDS R2,key3mode
138B 1582 CP R24,R2
138C F418 BCC 0x1390
138D 2422 CLR R2
138E 92200107 STS key3mode,R2
(0714) key3mode++;
1390 91800107 LDS R24,key3mode
1392 5F8F SUBI R24,0xFF
1393 93800107 STS key3mode,R24
(0715) EEPROMwrite(0x
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -