📄 1302-162.lst
字号:
b --> R20
n --> R22
010C D452 RCALL push_gset2
010D 2F60 MOV R22,R16
(0041) ;
(0042) }
(0043) void delay_ns(uchar n)
(0044) { unsigned char b;
(0045) for(b=0;b<n;b++)
010E 2744 CLR R20
010F C003 RJMP 0x0113
(0046) delay_nms(200);
0110 EC08 LDI R16,0xC8
0111 DFED RCALL _delay_nms
0112 9543 INC R20
0113 1746 CP R20,R22
0114 F3D8 BCS 0x0110
0115 D43D RCALL pop_gset2
0116 9508 RET
_int0_isr:
t --> R20
store --> R20
user_code --> R12
data_code --> R22
i --> R10
0117 D460 RCALL push_lset
0118 D442 RCALL push_gset4
0119 9722 SBIW R28,2
(0047) }
(0048) #pragma interrupt_handler int0_isr:2
(0049) void int0_isr(void)
(0050) {
(0051) //external interupt on INT0
(0052) uchar i;
(0053) uint user_code=0;
011A 24CC CLR R12
011B 24DD CLR R13
(0054) uint data_code=0,store;
011C 2766 CLR R22
011D 2777 CLR R23
(0055) CLI(); //关闭中断
011E 94F8 BCLR 7
(0056) //**********************目的是检测在3毫秒内如果出现高电平就退出解码程序
(0057) for(i=0;i<3;i++)
011F 24AA CLR R10
0120 C007 RJMP 0x0128
(0058) {
(0059) delay_nms(90); //延时1ms
0121 E50A LDI R16,0x5A
0122 DFDC RCALL _delay_nms
(0060) if(PIND&0X04)
0123 B380 IN R24,0x10
0124 7084 ANDI R24,4
0125 F009 BEQ 0x0127
(0061) {
(0062) goto ret;
0126 C1C2 RJMP 0x02E9
0127 94A3 INC R10
0128 2D8A MOV R24,R10
0129 3083 CPI R24,3
012A F3B0 BCS 0x0121
(0063) }
(0064) }
(0065) //**********************等高电平出现,再延时4.7ms,跳过结果码
(0066) while(!(PIND&004));
012B B380 IN R24,0x10
012C 7084 ANDI R24,4
012D F3E9 BEQ 0x012B
(0067) while(PIND&0X04);
012E B380 IN R24,0x10
012F 7084 ANDI R24,4
0130 F7E9 BNE 0x012E
(0068) //**********************开始接收用户码
(0069) for(i=0;i<16;i++)
0131 24AA CLR R10
0132 C01C RJMP 0x014F
(0070) {
(0071) while(!(PIND&0X04));
0133 B380 IN R24,0x10
0134 7084 ANDI R24,4
0135 F3E9 BEQ 0x0133
(0072) delay_nms(90); //延时1.05ms
0136 E50A LDI R16,0x5A
0137 DFC7 RCALL _delay_nms
(0073) if(PIND&0X04)
0138 B380 IN R24,0x10
0139 7084 ANDI R24,4
013A F041 BEQ 0x0143
(0074) {
(0075) user_code|=(1<<i);
013B 2D2A MOV R18,R10
013C 2733 CLR R19
013D E001 LDI R16,1
013E E010 LDI R17,0
013F D466 RCALL lsl16
0140 2AC0 OR R12,R16
0141 2AD1 OR R13,R17
(0076)
(0077) }
0142 C00B RJMP 0x014E
(0078) else
(0079) {
(0080) user_code&=~(1<<i);
0143 2D2A MOV R18,R10
0144 2733 CLR R19
0145 E001 LDI R16,1
0146 E010 LDI R17,0
0147 D45E RCALL lsl16
0148 2E20 MOV R2,R16
0149 2E31 MOV R3,R17
014A 9420 COM R2
014B 9430 COM R3
014C 20C2 AND R12,R2
014D 20D3 AND R13,R3
014E 94A3 INC R10
014F 2D8A MOV R24,R10
0150 3180 CPI R24,0x10
0151 F308 BCS 0x0133
(0081) }
(0082) }
(0083)
(0084) //**********************开始接收数据
(0085) for(i=0;i<16;i++)
0152 24AA CLR R10
0153 C01C RJMP 0x0170
(0086) {
(0087) while(!(PIND&0X04));
0154 B380 IN R24,0x10
0155 7084 ANDI R24,4
0156 F3E9 BEQ 0x0154
(0088) delay_nms(90); //延时1.05ms
0157 E50A LDI R16,0x5A
0158 DFA6 RCALL _delay_nms
(0089) if(PIND&0X04)
0159 B380 IN R24,0x10
015A 7084 ANDI R24,4
015B F041 BEQ 0x0164
(0090) {
(0091) data_code|=(1<<i);
015C 2D2A MOV R18,R10
015D 2733 CLR R19
015E E001 LDI R16,1
015F E010 LDI R17,0
0160 D445 RCALL lsl16
0161 2B60 OR R22,R16
0162 2B71 OR R23,R17
(0092)
(0093) }
0163 C00B RJMP 0x016F
(0094) else
(0095) {
(0096) data_code&=~(1<<i);
0164 2D2A MOV R18,R10
0165 2733 CLR R19
0166 E001 LDI R16,1
0167 E010 LDI R17,0
0168 D43D RCALL lsl16
0169 2E20 MOV R2,R16
016A 2E31 MOV R3,R17
016B 9420 COM R2
016C 9430 COM R3
016D 2162 AND R22,R2
016E 2173 AND R23,R3
016F 94A3 INC R10
0170 2D8A MOV R24,R10
0171 3180 CPI R24,0x10
0172 F308 BCS 0x0154
(0097) }
(0098) }
(0099) store=data_code; //采集到数据码
0173 2F46 MOV R20,R22
0174 2F57 MOV R21,R23
(0100) delay_ns(240);
0175 EF00 LDI R16,0xF0
0176 DF95 RCALL _delay_ns
(0101) //延时50ms,不接收连续码
(0102) //设置开关
(0103) if(store==0x0901)
0177 3061 CPI R22,1
0178 E0E9 LDI R30,0x9
0179 077E CPC R23,R30
017A F431 BNE 0x0181
(0104) {
(0105) flag^=0X01;
017B E081 LDI R24,1
017C 90200060 LDS R2,flag
017E 2628 EOR R2,R24
017F 92200060 STS flag,R2
(0106) }
(0107) //设置时间
(0108) if(flag)
0181 90200060 LDS R2,flag
0183 2022 TST R2
0184 F409 BNE 0x0186
0185 C15E RJMP 0x02E4
(0109) {
(0110) uchar t;
(0111) LCD_write_string(8,1,"s");
0186 E98E LDI R24,0x9E
0187 E090 LDI R25,0
0188 8399 STD Y+1,R25
0189 8388 STD Y+0,R24
018A E021 LDI R18,1
018B E008 LDI R16,0x8
018C D2E0 RCALL _LCD_write_string
(0112) switch(store)
018D 3441 CPI R20,0x41
018E E0E2 LDI R30,2
018F 075E CPC R21,R30
0190 F409 BNE 0x0192
0191 C0A7 RJMP 0x0239
0192 E481 LDI R24,0x41
0193 E092 LDI R25,2
0194 1784 CP R24,R20
0195 0795 CPC R25,R21
0196 F40C BGE 0x0198
0197 C030 RJMP 0x01C8
0198 3041 CPI R20,1
0199 E8E2 LDI R30,0x82
019A 075E CPC R21,R30
019B F409 BNE 0x019D
019C C0A2 RJMP 0x023F
019D E081 LDI R24,1
019E E892 LDI R25,0x82
019F 1784 CP R24,R20
01A0 0795 CPC R25,R21
01A1 F084 BLT 0x01B2
01A2 3841 CPI R20,0x81
01A3 E8E0 LDI R30,0x80
01A4 075E CPC R21,R30
01A5 F409 BNE 0x01A7
01A6 C08C RJMP 0x0233
01A7 3841 CPI R20,0x81
01A8 E8E0 LDI R30,0x80
01A9 075E CPC R21,R30
01AA F40C BGE 0x01AC
01AB C094 RJMP 0x0240
01AC 3041 CPI R20,1
01AD E8E1 LDI R30,0x81
01AE 075E CPC R21,R30
01AF F409 BNE 0x01B1
01B0 C086 RJMP 0x0237
01B1 C08E RJMP 0x0240
01B2 3441 CPI R20,0x41
01B3 E0E0 LDI R30,0
01B4 075E CPC R21,R30
01B5 F409 BNE 0x01B7
01B6 C07A RJMP 0x0231
01B7 E481 LDI R24,0x41
01B8 E090 LDI R25,0
01B9 1784 CP R24,R20
01BA 0795 CPC R25,R21
01BB F034 BLT 0x01C2
01BC 3041 CPI R20,1
01BD E8E4 LDI R30,0x84
01BE 075E CPC R21,R30
01BF F409 BNE 0x01C1
01C0 C045 RJMP 0x0206
01C1 C07E RJMP 0x0240
01C2 3441 CPI R20,0x41
01C3 E0E1 LDI R30,1
01C4 075E CPC R21,R30
01C5 F409 BNE 0x01C7
01C6 C06E RJMP 0x0235
01C7 C078 RJMP 0x0240
01C8 3441 CPI R20,0x41
01C9 E0E5 LDI R30,5
01CA 075E CPC R21,R30
01CB F409 BNE 0x01CD
01CC C070 RJMP 0x023D
01CD E481 LDI R24,0x41
01CE E095 LDI R25,5
01CF 1784 CP R24,R20
01D0 0795 CPC R25,R21
01D1 F084 BLT 0x01E2
01D2 3841 CPI R20,0x81
01D3 E0E2 LDI R30,2
01D4 075E CPC R21,R30
01D5 F409 BNE 0x01D7
01D6 C064 RJMP 0x023B
01D7 3841 CPI R20,0x81
01D8 E0E2 LDI R30,2
01D9 075E CPC R21,R30
01DA F40C BGE 0x01DC
01DB C064 RJMP 0x0240
01DC 3441 CPI R20,0x41
01DD E0E4 LDI R30,4
01DE 075E CPC R21,R30
01DF F409 BNE 0x01E1
01E0 C04C RJMP 0x022D
01E1 C05E RJMP 0x0240
01E2 3041 CPI R20,1
01E3 E0E9 LDI R30,0x9
01E4 075E CPC R21,R30
01E5 F081 BEQ 0x01F6
01E6 E081 LDI R24,1
01E7 E099 LDI R25,0x9
01E8 1784 CP R24,R20
01E9 0795 CPC R25,R21
01EA F02C BLT 0x01F0
01EB 3441 CPI R20,0x41
01EC E0E8 LDI R30,0x8
01ED 075E CPC R21,R30
01EE F161 BEQ 0x021B
01EF C050 RJMP 0x0240
01F0 3041 CPI R20,1
01F1 E4E0 LDI R30,0x40
01F2 075E CPC R21,R30
01F3 F409 BNE 0x01F5
01F4 C03A RJMP 0x022F
01F5 C04A RJMP 0x0240
(0113) {
(0114) case 0x0901 :LCD_set_xy(8,1);LCD_write_char('s');n=0;LCD_set_xy(9,1);
01F6 E021 LDI R18,1
01F7 E008 LDI R16,0x8
01F8 D25C RCALL _LCD_set_xy
01F9 E703 LDI R16,0x73
01FA D26A RCALL _LCD_write_char
01FB 2422 CLR R2
01FC 92200061 STS n,R2
01FE E021 LDI R18,1
01FF E009 LDI R16,0x9
0200 D254 RCALL _LCD_set_xy
(0115) LCD_write_char(n+48);goto ret;break;
0201 91000061 LDS R16,n
0203 5D00 SUBI R16,0xD0
0204 D260 RCALL _LCD_write_char
0205 C0E3 RJMP 0x02E9
(0116) case 0x8401 :n++;if(n>10) n=0; LCD_set_xy(9,1);
0206 91800061 LDS R24,n
0208 5F8F SUBI R24,0xFF
0209 93800061 STS n,R24
020B E08A LDI R24,0xA
020C 90200061 LDS R2,n
020E 1582 CP R24,R2
020F F418 BCC 0x0213
0210 2422 CLR R2
0211 92200061 STS n,R2
0213 E021 LDI R18,1
0214 E009 LDI R16,0x9
0215 D23F RCALL _LCD_set_xy
(0117) LCD_write_char(n+48); goto ret;break;
0216 91000061 LDS R16,n
0218 5D00 SUBI R16,0xD0
0219 D24B RCALL _LCD_write_char
021A C0CE RJMP 0x02E9
(0118) case 0x0841 :n=n-1;if(n==0) n=10; LCD_set_xy(9,1);
021B 91800061 LDS R24,n
021D 5081 SUBI R24,1
021E 93800061 STS n,R24
0220 2388 TST R24
0221 F419 BNE 0x0225
0222 E08A LDI R24,0xA
0223 93800061 STS n,R24
0225 E021 LDI R18,1
0226 E009 LDI R16,0x9
0227 D22D RCALL _LCD_set_xy
(0119) LCD_write_char(n+48); goto ret;break;
0228 91000061 LDS R16,n
022A 5D00 SUBI R16,0xD0
022B D239 RCALL _LCD_write_char
022C C0BC RJMP 0x02E9
(0120) case 0x0441 :t=0;break;
022D 2744 CLR R20
022E C011 RJMP 0x0240
(0121) case 0x4001 :t=1;break;
022F E041 LDI R20,1
0230 C00F RJMP 0x0240
(0122) case 0x0041 :t=2;break;
0231 E042 LDI R20,2
0232 C00D RJMP 0x0240
(0123) case 0x8081 :t=3;break;
0233 E043 LDI R20,3
0234 C00B RJMP 0x0240
(0124) case 0x0141 :t=4;break;
0235 E044 LDI R20,4
0236 C009 RJMP 0x0240
(0125) case 0x8101 :t=5;break;
0237 E045 LDI R20,5
0238 C007 RJMP 0x0240
(0126) case 0x0241 :t=6;break;
0239 E046 LDI R20,6
023A C005 RJMP 0x0240
(0127) case 0x0281 :t=7;break;
023B E047 LDI R20,7
023C C003 RJMP 0x0240
(0128) case 0x0541 :t=8;break;
023D E048 LDI R20,0x8
023E C001 RJMP 0x0240
(0129) case 0x8201 :t=9;break;
023F E049 LDI R20,0x9
(0130) }
(0131)
(0132) switch(n)
0240 91600061 LDS R22,n
0242 2777 CLR R23
0243 3060 CPI R22,0
0244 0767 CPC R22,R23
0245 F409 BNE 0x0247
0246 C033 RJMP 0x027A
0247 3061 CPI R22,1
0248 E0E0 LDI R30,0
0249 077E CPC R23,R30
024A F409 BNE 0x024C
024B C039 RJMP 0x0285
024C 3062 CPI R22,2
024D E0E0 LDI R30,0
024E 077E CPC R23,R30
024F F409 BNE 0x0251
0250 C03C RJMP 0x028D
0251 3063 CPI R22,3
0252 E0E0 LDI R30,0
0253 077E CPC R23,R30
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -