📄 doorc.lst
字号:
(0437) void timer1_ovf_isr(void)
(0438) {
(0439) //TIMER1 has overflowed
(0440) TCNT1H = 0xFD; //reload counter high value 50ms
1113 EF8D LDI R24,0xFD
1114 BD8D OUT 0x2D,R24
(0441) TCNT1L = 0xE5; //reload counter low value 50ms
1115 EE85 LDI R24,0xE5
1116 BD8C OUT 0x2C,R24
(0442) displaycount++;
1117 918001FD LDS R24,displaycount
1119 5F8F SUBI R24,0xFF
111A 938001FD STS displaycount,R24
(0443) timecounter++;
111C 918001A5 LDS R24,timecounter
111E 919001A6 LDS R25,timecounter+1
1120 9601 ADIW R24,1
1121 939001A6 STS timecounter+1,R25
1123 938001A5 STS timecounter,R24
(0444) timer++;
1125 9180012F LDS R24,timer
1127 91900130 LDS R25,timer+1
1129 9601 ADIW R24,1
112A 93900130 STS timer+1,R25
112C 9380012F STS timer,R24
(0445) if(displaycount>34)
112E E282 LDI R24,0x22
112F 902001FD LDS R2,displaycount
1131 1582 CP R24,R2
1132 F418 BCC 0x1136
(0446) {
(0447) displaycount=0;
1133 2422 CLR R2
1134 922001FD STS displaycount,R2
(0448) // WDR();
(0449) }
(0450)
(0451)
(0452) checktime++; //报警检查时间
1136 91800111 LDS R24,checktime
1138 5F8F SUBI R24,0xFF
1139 93800111 STS checktime,R24
(0453) if(checktime>2)
113B E082 LDI R24,2
113C 90200111 LDS R2,checktime
113E 1582 CP R24,R2
113F F570 BCC 0x116E
(0454) {
(0455) checktime=0;
1140 2422 CLR R2
1141 92200111 STS checktime,R2
(0456) alarm_time++;
1143 9180021C LDS R24,alarm_time
1145 9190021D LDS R25,alarm_time+1
1147 9601 ADIW R24,1
1148 9390021D STS alarm_time+1,R25
114A 9380021C STS alarm_time,R24
(0457) if(alarm_time>300)
114C E28C LDI R24,0x2C
114D E091 LDI R25,1
114E 9020021C LDS R2,alarm_time
1150 9030021D LDS R3,alarm_time+1
1152 1582 CP R24,R2
1153 0593 CPC R25,R3
1154 F420 BCC 0x1159
(0458) {
(0459) alarm_flag=0;
1155 2422 CLR R2
1156 92200112 STS alarm_flag,R2
(0460) SET_SDA(); //高电平清除报警
1158 9889 CBI 0x11,1
(0461) }
(0462) if(zone_flag==1)
1159 91800113 LDS R24,zone_flag
115B 3081 CPI R24,1
115C F469 BNE 0x116A
(0463) {
(0464) if((PIND&0x01)==0x00)
115D 9980 SBIC 0x10,0
115E C00F RJMP 0x116E
(0465) {
(0466) alarm_flag=1;
115F E081 LDI R24,1
1160 93800112 STS alarm_flag,R24
(0467) CLEAR_SDA(); //报警输出低电平有效。
1162 9A89 SBI 0x11,1
(0468) alarm_time=0;
1163 2422 CLR R2
1164 2433 CLR R3
1165 9230021D STS alarm_time+1,R3
1167 9220021C STS alarm_time,R2
(0469) }
(0470) else
(0471) ;
(0472) }
1169 C004 RJMP 0x116E
(0473) else
(0474) {
(0475) alarm_flag=0;
116A 2422 CLR R2
116B 92200112 STS alarm_flag,R2
(0476) SET_SDA();
116D 9889 CBI 0x11,1
(0477) }
(0478)
(0479) }
(0480) if(timer>2)
116E E082 LDI R24,2
116F E090 LDI R25,0
1170 9020012F LDS R2,timer
1172 90300130 LDS R3,timer+1
1174 1582 CP R24,R2
1175 0593 CPC R25,R3
1176 F538 BCC 0x119E
(0481) {
(0482) if(beep_second==0)
1177 90200131 LDS R2,beep_second
1179 2022 TST R2
117A F449 BNE 0x1184
(0483) {
(0484) SET_BELL();
117B 98BD CBI 0x17,5
(0485) SET_LED0();
117C 988F CBI 0x11,7
(0486) timer=0;
117D 2422 CLR R2
117E 2433 CLR R3
117F 92300130 STS timer+1,R3
1181 9220012F STS timer,R2
(0487) }
1183 C01A RJMP 0x119E
(0488) else
(0489) {
(0490) if(beep_flag==1)
1184 91800132 LDS R24,beep_flag
1186 3081 CPI R24,1
1187 F431 BNE 0x118E
(0491) {
(0492) SET_BELL();
1188 98BD CBI 0x17,5
(0493) SET_LED0();
1189 988F CBI 0x11,7
(0494) beep_flag=0;
118A 2422 CLR R2
118B 92200132 STS beep_flag,R2
(0495) }
118D C005 RJMP 0x1193
(0496) else
(0497) {
(0498) CLEAR_BELL();
118E 9ABD SBI 0x17,5
(0499) CLEAR_LED0();
118F 9A8F SBI 0x11,7
(0500) beep_flag=1;
1190 E081 LDI R24,1
1191 93800132 STS beep_flag,R24
(0501) }
(0502) timer=0;
1193 2422 CLR R2
1194 2433 CLR R3
1195 92300130 STS timer+1,R3
1197 9220012F STS timer,R2
(0503) beep_second--;
1199 91800131 LDS R24,beep_second
119B 5081 SUBI R24,1
119C 93800131 STS beep_second,R24
(0504) }
(0505) }
119E 9029 LD R2,Y+
119F BE2F OUT 0x3F,R2
11A0 9199 LD R25,Y+
11A1 9189 LD R24,Y+
11A2 9039 LD R3,Y+
11A3 9029 LD R2,Y+
11A4 9518 RETI
(0506) }
(0507) void beep11(void)
(0508) {
(0509) unsigned int i;
(0510) CLEAR_BELL();
_beep11:
i --> R16
11A5 9ABD SBI 0x17,5
(0511) for(i=0;i<65000;i++);
11A6 2700 CLR R16
11A7 2711 CLR R17
11A8 C002 RJMP 0x11AB
11A9 5F0F SUBI R16,0xFF
11AA 4F1F SBCI R17,0xFF
11AB 3E08 CPI R16,0xE8
11AC EFED LDI R30,0xFD
11AD 071E CPC R17,R30
11AE F3D0 BCS 0x11A9
(0512) SET_BELL();
11AF 98BD CBI 0x17,5
11B0 9508 RET
_delay:
j --> R20
i --> R22
count --> R16
11B1 940E4869 CALL push_gset2
(0513) }
(0514) void delay(unsigned char count)
(0515) {
(0516) unsigned int i;
(0517) unsigned char j;
(0518) for(j=0;j<count;j++)
11B3 2744 CLR R20
11B4 C00A RJMP 0x11BF
(0519) {
(0520) for(i=0;i<65000;i++);
11B5 2766 CLR R22
11B6 2777 CLR R23
11B7 C002 RJMP 0x11BA
11B8 5F6F SUBI R22,0xFF
11B9 4F7F SBCI R23,0xFF
11BA 3E68 CPI R22,0xE8
11BB EFED LDI R30,0xFD
11BC 077E CPC R23,R30
11BD F3D0 BCS 0x11B8
11BE 9543 INC R20
11BF 1740 CP R20,R16
11C0 F3A0 BCS 0x11B5
11C1 940E4857 CALL pop_gset2
11C3 9508 RET
_value_time:
timedata1 --> R20
timedata --> R22
data --> R20
minutes --> R20
hour --> R22
11C4 940E4869 CALL push_gset2
11C6 2F42 MOV R20,R18
11C7 2F60 MOV R22,R16
(0521) }
(0522) }
(0523)
(0524) unsigned int value_time(unsigned char hour,unsigned char minutes)
(0525) {
(0526) unsigned int data;
(0527) unsigned int timedata,timedata1;
(0528) timedata=(hour/16)*10+hour%16;
11C8 E120 LDI R18,0x10
11C9 E030 LDI R19,0
11CA 2F06 MOV R16,R22
11CB 2711 CLR R17
11CC 940E47F5 CALL mod16s
11CE 2F86 MOV R24,R22
11CF 9582 SWAP R24
11D0 708F ANDI R24,0xF
11D1 E09A LDI R25,0xA
11D2 9F98 MUL R25,R24
11D3 01B0 MOVW R22,R0
11D4 0F60 ADD R22,R16
11D5 1F71 ADC R23,R17
(0529) timedata1=(minutes/16)*10+minutes%16;
11D6 E120 LDI R18,0x10
11D7 E030 LDI R19,0
11D8 2F04 MOV R16,R20
11D9 2711 CLR R17
11DA 940E47F5 CALL mod16s
11DC 2F84 MOV R24,R20
11DD 9582 SWAP R24
11DE 708F ANDI R24,0xF
11DF E09A LDI R25,0xA
11E0 9F98 MUL R25,R24
11E1 01A0 MOVW R20,R0
11E2 0F40 ADD R20,R16
11E3 1F51 ADC R21,R17
(0530) data=timedata*60+timedata1;
11E4 E30C LDI R16,0x3C
11E5 E010 LDI R17,0
11E6 019B MOVW R18,R22
11E7 940E4847 CALL empy16s
11E9 0118 MOVW R2,R16
11EA 0E24 ADD R2,R20
11EB 1E35 ADC R3,R21
11EC 01A1 MOVW R20,R2
(0531) return data;
11ED 0181 MOVW R16,R2
11EE 940E4857 CALL pop_gset2
11F0 9508 RET
(0532) }
(0533)
(0534) void setup_time(void)
(0535) {
(0536) display_setuptime();
_setup_time:
11F1 940E1EA3 CALL _display_setuptime
(0537) delay(20);
11F3 E104 LDI R16,0x14
11F4 DFBC RCALL _delay
(0538) update_time();
11F5 940E1EC6 CALL _update_time
11F7 C023 RJMP 0x121B
(0539) // timecounter=0;
(0540) while(1)
(0541) {
(0542) if(u_year()==1)return;
11F8 940E1F37 CALL _u_year
11FA 3001 CPI R16,1
11FB F409 BNE 0x11FD
11FC C01F RJMP 0x121C
(0543) if(u_month()==1)return;
11FD 940E1FA0 CALL _u_month
11FF 3001 CPI R16,1
1200 F409 BNE 0x1202
1201 C01A RJMP 0x121C
(0544) if(u_day()==1)return;
1202 940E2031 CALL _u_day
1204 3001 CPI R16,1
1205 F409 BNE 0x1207
1206 C015 RJMP 0x121C
(0545) if(u_week()==1)return;
1207 940E20D7 CALL _u_week
1209 3001 CPI R16,1
120A F409 BNE 0x120C
120B C010 RJMP 0x121C
(0546) if(u_hour()==1)return;
120C 940E2126 CALL _u_hour
120E 3001 CPI R16,1
120F F409 BNE 0x1211
1210 C00B RJMP 0x121C
(0547) if(u_minute()==1)return;
1211 940E21C7 CALL _u_minute
1213 3001 CPI R16,1
1214 F409 BNE 0x1216
1215 C006 RJMP 0x121C
(0548) u_second();
1216 940E2234 CALL _u_second
(0549) delay(12);
1218 E00C LDI R16,0xC
1219 DF97 RCALL _delay
(0550) return;
121A C001 RJMP 0x121C
121B CFDC RJMP 0x11F8
121C 9508 RET
_readxinghaokey:
status4 --> R20
status3 --> R22
ttt3 --> R10
i --> R20
121D 940E4867 CALL push_gset3
(0551) }
(0552) }
(0553)
(0554) unsigned char readxinghaokey(void)
(0555) {
(0556) unsigned char status4,ttt3,status3;
(0557) unsigned int i;
(0558) status4=scankey();
121F 940E4605 CALL _scankey
1221 2F40 MOV R20,R16
(0559) if(status4==0)
1222 2300 TST R16
1223 F4C9 BNE 0x123D
(0560) {
(0561) for(i=0;i<10000;i++);
1224 2744 CLR R20
1225 2755 CLR R21
1226 C002 RJMP 0x1229
1227 5F4F SUBI R20,0xFF
1228 4F5F SBCI R21,0xFF
1229 3140 CPI R20,0x10
122A E2E7 LDI R30,0x27
122B 075E CPC R21,R30
122C F3D0 BCS 0x1227
(0562) status3=keyvalue();
122D 940E46A9 CALL _keyvalue
122F 2F60 MOV R22,R16
(0563) if(status3==0x0a)
1230 300A CPI R16,0xA
1231 F451 BNE 0x123C
(0564) {
1232 C006 RJMP 0x1239
(0565) while(1)
(0566) {
(0567) ttt3=keyvalue();
1233 940E46A9 CALL _keyvalue
1235 2EA0 MOV R10,R16
(0568) if(status3!=ttt3)break;
1236 1760 CP R22,R16
1237 F009 BEQ 0x1239
1238 C001 RJMP 0x123A
1239 CFF9 RJMP 0x1233
(0569) }
(0570) return 0;
123A 2700 CLR R16
123B C001 RJMP 0x123D
(0571) }
(0572) else
(0573) {
(0574) return 1;
123C E001 LDI R16,1
123D 940E485A CALL pop_gset3
123F 9508 RET
_readnumberkey:
status4 --> R22
status3 --> R20
ttt3 --> R22
i --> R10
1240 940E4867 CALL push_gset3
(0575) }
(0576) }
(0577) }
(0578) unsigned char readnumberkey(void)
(0579) {
(0580) unsigned char status4,ttt3,status3;
(0581) unsigned int i;
(0582) status4=scankey();
1242 940E4605 CALL _scankey
1244 2F60 MOV R22,R16
(0583) if(status4==0)
1245 2300 TST R16
1246 F4D1 BNE 0x1261
(0584) {
(0585) for(i=0;i<10000;i++);
1247 24AA CLR R10
1248 24BB CLR R11
1249 C003 RJMP 0x124D
124A 01C5 MOVW R24,R10
124B 9601 ADIW R24,1
124C 015C MOVW R10,R24
124D 01C5 MOVW R24,R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -