📄 cw1.s
字号:
.dbline 114
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 115
; GICR = 0x00;
out 0x3b,R2
.dbline 116
; TIMSK = 0x40; //timer interrupt sources
ldi R24,64
out 0x39,R24
.dbline 117
; SEI(); //re-enable interrupts
sei
.dbline -2
L31:
.dbline 0 ; func end
ret
.dbend
.dbfunc e decode _decode fc
; j -> R10
; i -> R12
; data -> y+0
; flag -> R10
; pin_var -> R14
.even
_decode::
xcall push_gset5
sbiw R28,4
.dbline -1
.dbline 121
; //all peripherals are now initialized
; }
; uchar decode(void)
; {
.dbline 123
; uchar pin_var,i;
; uchar flag=0;
clr R10
.dbline 125
; signed char j;
; ulong data=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
std z+0,R20
std z+1,R21
std z+2,R22
std z+3,R23
.dbline 126
; count1=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _count1+1,R21
sts _count1,R20
sts _count1+2+1,R23
sts _count1+2,R22
.dbline 127
; DDRA&=~(1<<wuxian_js);PORTA|=(1<<wuxian_js);
cbi 0x1a,3
.dbline 127
sbi 0x1b,3
xjmp L34
L33:
.dbline 129
; while(1)
; {
.dbline 130
; if(count1>250){return(0xff);}
ldi R20,250
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_count1+2
lds R5,_count1+2+1
lds R2,_count1
lds R3,_count1+1
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brsh L36
.dbline 130
.dbline 130
ldi R16,255
xjmp L32
L36:
.dbline 131
; pin_var=PINA&(1<<wuxian_js);
in R24,0x19
andi R24,8
mov R14,R24
.dbline 132
; if(flag==1){break;}
mov R24,R10
cpi R24,1
breq X1
xjmp L41
X1:
.dbline 132
.dbline 132
xjmp L35
L40:
.dbline 134
; while(pin_var==0)
; {
.dbline 135
; count=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _count+1,R21
sts _count,R20
sts _count+2+1,R23
sts _count+2,R22
.dbline 136
; if(count1>250){return(0xff);}
ldi R20,250
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_count1+2
lds R5,_count1+2+1
lds R2,_count1
lds R3,_count1+1
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brsh L46
.dbline 136
.dbline 136
ldi R16,255
xjmp L32
L45:
.dbline 138
; while(1)
; {
.dbline 139
; pin_var=PINA&(1<<wuxian_js);if(count1>250){return(0xff);}
in R24,0x19
andi R24,8
mov R14,R24
.dbline 139
ldi R20,250
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_count1+2
lds R5,_count1+2+1
lds R2,_count1
lds R3,_count1+1
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brsh L48
.dbline 139
.dbline 139
ldi R16,255
xjmp L32
L48:
.dbline 140
; if(pin_var!=0)
tst R14
breq L50
.dbline 141
; {
.dbline 142
; if((count>130)&&(count<155)) {flag=1;break;}
ldi R20,130
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_count+2
lds R5,_count+2+1
lds R2,_count
lds R3,_count+1
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brsh L52
ldi R20,155
ldi R21,0
ldi R22,0
ldi R23,0
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brsh L52
.dbline 142
.dbline 142
clr R10
inc R10
.dbline 142
xjmp L42
L52:
.dbline 143
; else {flag=0;break;}
.dbline 143
clr R10
.dbline 143
xjmp L42
L50:
.dbline 145
L46:
.dbline 137
xjmp L45
X0:
.dbline 146
xjmp L42
L41:
.dbline 133
tst R14
brne X2
xjmp L40
X2:
L42:
.dbline 148
; }
; }
; break;
; }
; if(flag==1) break;
mov R24,R10
cpi R24,1
brne L54
.dbline 148
xjmp L35
L54:
.dbline 149
L34:
.dbline 128
xjmp L33
L35:
.dbline 151
; }
;
; for(i=0;i<24;i++)
clr R12
xjmp L59
L56:
.dbline 152
; {
.dbline 154
;
; count=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _count+1,R21
sts _count,R20
sts _count+2+1,R23
sts _count+2,R22
.dbline 155
; data<<=1; //数据左移
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
lsl R2
rol R3
rol R4
rol R5
movw R30,R28
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
xjmp L61
L60:
.dbline 157
; while (1) //高位计数
; {
.dbline 158
; pin_var=PINA&(1<<wuxian_js);
in R24,0x19
andi R24,8
mov R14,R24
.dbline 159
; if(pin_var==0) {break;}
tst R24
brne L63
.dbline 159
.dbline 159
xjmp L62
L63:
.dbline 160
; if(count>200) return 0xff;
ldi R20,200
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_count+2
lds R5,_count+2+1
lds R2,_count
lds R3,_count+1
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brsh L65
.dbline 160
ldi R16,255
xjmp L32
L65:
.dbline 161
L61:
.dbline 156
xjmp L60
L62:
.dbline 162
; }
; if(count>1&&count<8) data+=0;
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_count+2
lds R5,_count+2+1
lds R2,_count
lds R3,_count+1
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brsh L67
ldi R20,8
ldi R21,0
ldi R22,0
ldi R23,0
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brsh L67
.dbline 162
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
movw R30,R28
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
xjmp L68
L67:
.dbline 164
; else //if(count>13&&count<15)
; data|=1;
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
or R2,R20
or R3,R21
or R4,R22
or R5,R23
movw R30,R28
std z+0,R2
std z+1,R3
std z+2,R4
std z+3,R5
L68:
.dbline 166
;
; count=0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
sts _count+1,R21
sts _count,R20
sts _count+2+1,R23
sts _count+2,R22
xjmp L70
L69:
.dbline 168
; while(1)
; {
.dbline 169
; WDR();
wdr
.dbline 170
; pin_var=PINA&(1<<wuxian_js);
in R24,0x19
andi R24,8
mov R14,R24
.dbline 171
; if(pin_var!=0){break;}
tst R24
breq L72
.dbline 171
.dbline 171
xjmp L71
L72:
.dbline 172
; if(count>200)
ldi R20,200
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_count+2
lds R5,_count+2+1
lds R2,_count
lds R3,_count+1
cp R20,R2
cpc R21,R3
cpc R22,R4
cpc R23,R5
brsh L74
.dbline 173
; {
.dbline 174
; return(0xff);
ldi R16,255
xjmp L32
L74:
.dbline 176
L70:
.dbline 167
xjmp L69
L71:
.dbline 177
L57:
.dbline 151
inc R12
L59:
.dbline 151
mov R24,R12
cpi R24,24
brsh X3
xjmp L56
X3:
.dbline 178
; }
; }
; }
; if(i==24)
cpi R24,24
brne L76
.dbline 179
; {
.dbline 180
; for(j=2;j>=0;j--)
ldi R24,2
mov R10,R24
xjmp L81
L78:
.dbline 181
.dbline 182
ldi R24,<_code
ldi R25,>_code
mov R30,R10
clr R31
sbrc R30,7
com R31
add R30,R24
adc R31,R25
movw R26,R28
ld R2,x+
ld R3,x+
ld R4,x+
ld R5,x
std z+0,R2
.dbline 183
ldi R24,8
ldi R25,0
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
st -y,R24
movw R16,R2
movw R18,R4
xcall lsr32
movw R30,R28
std z+0,R16
std z+1,R17
std z+2,R18
std z+3,R19
.dbline 184
L79:
.dbline 180
dec R10
L81:
.dbline 180
mov R24,R10
cpi R24,0
brge L78
.dbline 185
; {
; code[j]=data;
; data>>=8;
; }
; }
L76:
.dbline 186
; return 1;
ldi R16,1
.dbline -2
L32:
adiw R28,4
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r j 10 C
.dbsym r i 12 c
.dbsym l data 0 l
.dbsym r flag 10 c
.dbsym r pin_var 14 c
.dbend
.dbfunc e ana_decode _ana_decode fV
; key_var -> R20
; code_buf -> y+0
; flag -> R22
; i -> R20
.even
_ana_decode::
xcall push_gset2
sbiw R28,7
.dbline -1
.dbline 190
; }
;
; void ana_decode(void)
; {
.dbline 192
; uchar key_var;
; uchar i,flag=0;
clr R22
.dbline 194
; uchar code_buf[7];
; DDRC&=~(1<<study_key);PORTC|=(1<<study_key);
cbi 0x14,1
.dbline 194
sbi 0x15,1
.dbline 195
; key_var=PINC&(1<<study_key);
in R20,0x13
andi R20,2
.dbline 196
; if(key_var==0)
breq X6
xjmp L83
X6:
.dbline 197
; {
xjmp L86
X4:
.dbline 199
; while(1)
; {
L88:
.dbline 201
; while(1)
; {
.dbline 202
; flag=decode();
xcall _decode
mov R22,R16
.dbline 203
; if(flag==1) {flag=0;break;}
cpi R16,1
brne L91
.dbline 203
.dbline 203
clr R22
.dbline 203
xjmp L90
L91:
.dbline 204
L89:
.dbline 200
xjmp L88
L90:
.dbline 205
clr R20
xjmp L96
L93:
.dbline 205
.dbline 205
ldi R24,<_code
ldi R25,>_code
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_code1
ldi R25,>_code1
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 205
L94:
.dbline 205
inc R20
L96:
.dbline 205
; }
; for(i=0;i<2;++i){code1[i]=code[i];}
cpi R20,2
brlo L93
xjmp L98
L97:
.dbline 207
; while(1)
; {
.dbline 208
; flag=decode();
xcall _decode
mov R22,R16
.dbline 209
; if(flag==1) {flag=0;break;}
cpi R16,1
brne L100
.dbline 209
.dbline 209
clr R22
.dbline 209
xjmp L99
L100:
.dbline 211
L98:
.dbline 206
xjmp L97
L99:
.dbline 212
clr R20
xjmp L105
L102:
.dbline 212
.dbline 212
ldi R24,<_code
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -