📄 h4001.s
字号:
.dbline 197
; decode[j]=0;
ldi R24,<_decode
ldi R25,>_decode
ldd R30,y+1
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 198
; }
.dbline 199
; }
.dbline 200
; }
xjmp L63
L62:
.dbline 202
; else
; {
.dbline 203
; decode[j]=0x0E;
ldi R24,<_decode
ldi R25,>_decode
ldd R30,y+1
clr R31
add R30,R24
adc R31,R25
ldi R24,14
std z+0,R24
.dbline 204
; if (j<127) {
ldd R24,y+1
cpi R24,127
brsh L33
.dbline 204
.dbline 205
; bits=0;
clr R22
clr R23
.dbline 206
; }
.dbline 208
; else
; break;
L69:
.dbline 209
; }
L63:
.dbline 210
; j++;
ldd R0,y+1
inc R0
std y+1,R0
.dbline 211
; half=1;
ldi R24,1
sts _half,R24
.dbline 212
; }
L55:
.dbline 213
; }
L44:
.dbline 214
ldi R24,1
lds R2,_lastbit
eor R2,R24
sts _lastbit,R2
.dbline 215
L32:
.dbline 171
subi R22,255 ; offset = 1
sbci R23,255
L34:
.dbline 171
cpi R22,0
ldi R30,1
cpc R23,R30
brsh X9
xjmp L36
X9:
L33:
.dbline 217
; lastbit^=0x01;
; }
;
; j=0;
clr R0
std y+1,R0
.dbline 218
; head=0;
clr R2
sts _head,R2
.dbline 219
; post=0;
sts _post,R2
.dbline 220
; error=0;
sts _error,R2
.dbline 221
; for (i=0;i<128;i++)
std y+0,R0
xjmp L73
L70:
.dbline 222
; { //查找最后一个终止位(0),及9位(1)引导位
.dbline 223
; if ((decode[i]==0)&(decode[i+1]==1)&(decode[i+2]==1)&(decode[i+3]==1)&(decode[i+4]==1)&(decode[i+5]==1)&(decode[i+6]==1)&(decode[i+7]==1)&(decode[i+8]==1)&(decode[i+9]==1)) {
ldi R24,<_decode
ldi R25,>_decode
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
tst R2
brne L85
ldi R24,1
ldi R25,0
std y+5,R25
std y+4,R24
xjmp L86
L85:
clr R0
clr R1
std y+5,R1
std y+4,R0
L86:
ldi R24,<_decode+1
ldi R25,>_decode+1
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L87
ldi R24,1
ldi R25,0
std y+3,R25
std y+2,R24
xjmp L88
L87:
clr R0
clr R1
std y+3,R1
std y+2,R0
L88:
ldi R24,<_decode+2
ldi R25,>_decode+2
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L89
ldi R24,1
ldi R25,0
std y+7,R25
std y+6,R24
xjmp L90
L89:
clr R0
clr R1
std y+7,R1
std y+6,R0
L90:
ldi R24,<_decode+3
ldi R25,>_decode+3
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L91
ldi R24,1
ldi R25,0
std y+9,R25
std y+8,R24
xjmp L92
L91:
clr R0
clr R1
std y+9,R1
std y+8,R0
L92:
ldi R24,<_decode+4
ldi R25,>_decode+4
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L93
ldi R24,1
ldi R25,0
std y+11,R25
std y+10,R24
xjmp L94
L93:
clr R0
clr R1
std y+11,R1
std y+10,R0
L94:
ldi R24,<_decode+5
ldi R25,>_decode+5
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L95
ldi R20,1
ldi R21,0
xjmp L96
L95:
clr R20
clr R21
L96:
ldi R24,<_decode+6
ldi R25,>_decode+6
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L97
ldi R24,1
ldi R25,0
movw R14,R24
xjmp L98
L97:
clr R14
clr R15
L98:
ldi R24,<_decode+7
ldi R25,>_decode+7
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L99
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L100
L99:
clr R12
clr R13
L100:
ldi R24,<_decode+8
ldi R25,>_decode+8
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L101
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L102
L101:
clr R10
clr R11
L102:
ldi R24,<_decode+9
ldi R25,>_decode+9
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,1
brne L103
ldi R22,1
ldi R23,0
xjmp L104
L103:
clr R22
clr R23
L104:
ldd R2,y+4
ldd R3,y+5
ldd R0,y+2
ldd R1,y+3
and R2,R0
and R3,R1
ldd R0,y+6
ldd R1,y+7
and R2,R0
and R3,R1
ldd R0,y+8
ldd R1,y+9
and R2,R0
and R3,R1
ldd R0,y+10
ldd R1,y+11
and R2,R0
and R3,R1
and R2,R20
and R3,R21
and R2,R14
and R3,R15
and R2,R12
and R3,R13
and R2,R10
and R3,R11
and R2,R22
and R3,R23
tst R2
brne X5
tst R3
breq L74
X5:
.dbline 223
.dbline 224
; head=1;
ldi R24,1
sts _head,R24
.dbline 225
; post=i+10;
ldd R24,y+0
subi R24,246 ; addi 10
sts _post,R24
.dbline 226
; break;
xjmp L72
L74:
.dbline 228
L71:
.dbline 221
ldd R0,y+0
inc R0
std y+0,R0
L73:
.dbline 221
ldd R24,y+0
cpi R24,128
brsh X10
xjmp L70
X10:
L72:
.dbline 229
; }
; }
; if (head==1) {
lds R24,_head
cpi R24,1
breq X11
xjmp L105
X11:
.dbline 229
.dbline 230
clr R0
std y+0,R0
xjmp L110
L107:
.dbline 230
; for (i=0;i<54;i++) {
.dbline 231
; if (decode[post+i]==0x0e) error++;
ldd R2,y+0
clr R3
lds R30,_post
clr R31
add R30,R2
adc R31,R3
ldi R24,<_decode
ldi R25,>_decode
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,14
brne L111
.dbline 231
lds R24,_error
subi R24,255 ; addi 1
sts _error,R24
L111:
.dbline 232
ldd R2,y+0
clr R3
lds R30,_post
clr R31
add R30,R2
adc R31,R3
ldi R24,<_decode
ldi R25,>_decode
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_rfiddata
ldi R25,>_rfiddata
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 233
L108:
.dbline 230
ldd R0,y+0
inc R0
std y+0,R0
L110:
.dbline 230
ldd R24,y+0
cpi R24,54
brlo L107
.dbline 234
; rfiddata[i]=decode[post+i];
; }
; if (error==0) { //H4001卡采用的二维行列偶校验码
lds R2,_error
tst R2
breq X12
xjmp L113
X12:
.dbline 234
.dbline 235
clr R0
std y+0,R0
xjmp L118
L115:
.dbline 235
; for (i=0;i<10;i++) { //先对10行数据进行校验
.dbline 236
; if (!(rfiddata[i*5]^rfiddata[i*5+1]^rfiddata[i*5+2]^rfiddata[i*5+3]==rfiddata[i*5+4])) error++;
ldi R24,5
ldd R0,y+0
mul R24,R0
movw R2,R0
ldi R24,<_rfiddata+4
ldi R25,>_rfiddata+4
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
ldi R24,<_rfiddata+3
ldi R25,>_rfiddata+3
movw R30,R2
add R30,R24
adc R31,R25
ldd R5,z+0
cp R5,R4
brne L125
ldi R22,1
ldi R23,0
xjmp L126
L125:
clr R22
clr R23
L126:
ldi R24,<_rfiddata+1
ldi R25,>_rfiddata+1
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
ldi R24,<_rfiddata
ldi R25,>_rfiddata
movw R30,R2
add R30,R24
adc R31,R25
ldd R6,z+0
clr R7
eor R6,R4
eor R7,R5
ldi R24,<_rfiddata+2
ldi R25,>_rfiddata+2
movw R30,R2
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
eor R6,R4
eor R7,R5
eor R6,R22
eor R7,R23
tst R6
brne L119
tst R7
brne L119
X6:
.dbline 236
lds R24,_error
subi R24,255 ; addi 1
sts _error,R24
L119:
.dbline 237
L116:
.dbline 235
ldd R0,y+0
inc R0
std y+0,R0
L118:
.dbline 235
ldd R24,y+0
cpi R24,10
brsh X13
xjmp L115
X13:
.dbline 238
clr R0
std y+0,R0
xjmp L130
L127:
.dbline 238
; }
; for (i=0;i<4;i++) { //再对4列数据进行校验
.dbline 239
; if (!(rfiddata[i]^rfiddata[i+5]^rfiddata[i+10]^rfiddata[i+15]^rfiddata[i+20]^rfiddata[i+25]^rfiddata[i+30]^rfiddata[i+35]^rfiddata[i+40]^rfiddata[i+45]==rfiddata[i+50])) error++;
ldi R24,<_rfiddata+50
ldi R25,>_rfiddata+50
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R4,z+0
ldi R24,<_rfiddata+45
ldi R25,>_rfiddata+45
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R5,z+0
cp R5,R4
brne L143
ldi R22,1
ldi R23,0
xjmp L144
L143:
clr R22
clr R23
L144:
ldi R24,<_rfiddata+5
ldi R25,>_rfiddata+5
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
ldi R24,<_rfiddata
ldi R25,>_rfiddata
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R6,z+0
clr R7
eor R6,R4
eor R7,R5
ldi R24,<_rfiddata+10
ldi R25,>_rfiddata+10
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
eor R6,R4
eor R7,R5
ldi R24,<_rfiddata+15
ldi R25,>_rfiddata+15
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
eor R6,R4
eor R7,R5
ldi R24,<_rfiddata+20
ldi R25,>_rfiddata+20
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
eor R6,R4
eor R7,R5
ldi R24,<_rfiddata+25
ldi R25,>_rfiddata+25
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
eor R6,R4
eor R7,R5
ldi R24,<_rfiddata+30
ldi R25,>_rfiddata+30
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
eor R6,R4
eor R7,R5
ldi R24,<_rfiddata+35
ldi R25,>_rfiddata+35
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
eor R6,R4
eor R7,R5
ldi R24,<_rfiddata+40
ldi R25,>_rfiddata+40
ldd R30,y+0
clr R31
add R30,R24
adc R31,R25
ldd R4,z+0
clr R5
eor R6,R4
eor R7,R5
eor R6,R22
eor R7,R23
tst R6
brne L131
tst R7
brne L131
X7:
.dbline 239
lds R24,_error
subi R24,255 ; addi 1
sts _error,R24
L131:
.dbline 240
L128:
.dbline 238
ldd R0,y+0
inc R0
std y+0,R0
L130:
.dbline 238
ldd R24,y+0
cpi R24,4
brsh X14
xjmp L127
X14:
.dbline 241
; }
; if (error==0) {
lds R4,_error
tst R4
breq X15
xjmp L145
X15:
.dbline 241
.dbline 242
; beeps(1);
ldi R16,1
xcall _beeps
.dbline 243
; UDR=10;
ldi R24,10
out 0xc,R24
.dbline 244
; wait_tx();
xcall _wait_tx
.dbline 245
; UDR=13;
ldi R24,13
out 0xc,R24
.dbline 246
; wait_tx();
xcall _wait_tx
.dbline 247
clr R0
std y+0,R0
xjmp L150
L147:
.dbline 247
.dbline 248
ldi R24,5
ldd R0,y+0
mul R24,R0
movw R4,R0
ldi R24,<_rfiddata+1
ldi R25,>_rfiddata+1
movw R30,R4
add R30,R24
adc R31,R25
ldd R6,z+0
ldi R24,4
mul R24,R6
movw R6,R0
ldi R24,<_rfiddata
ldi R25,>_rfiddata
movw R30,R4
add R30,R24
adc R31,R25
ldd R8,z+0
ldi R24,8
mul R24,R8
mov R8,R0
add R8,R6
ldi R24,<_rfiddata+2
ldi R25,>_rfiddata+2
movw R30,R4
add R30,R24
adc R31,R25
ldd R6,z+0
ldi R24,2
mul R24,R6
add R8,R0
ldi R24,<_rfiddata+3
ldi R25,>_rfiddata+3
movw R30,R4
add R30,R24
adc R31,R25
ldd R4,z+0
add R8,R4
sts _data1,R8
.dbline 249
ldi R18,16
ldi R19,0
mov R16,R8
clr R17
xcall mod16s
movw R30,R16
ldi R24,<_ascii
ldi R25,>_ascii
add R30,R24
adc R31,R25
lpm R30,Z
out 0xc,R30
.dbline 250
xcall _wait_tx
.dbline 251
L148:
.dbline 247
ldd R0,y+0
inc R0
std y+0,R0
L150:
.dbline 247
; for (i=0;i<10;i++) { //对10行数据进行校验
ldd R24,y+0
cpi R24,10
brsh X16
xjmp L147
X16:
.dbline 252
; data1=(rfiddata[i*5]*8)+(rfiddata[i*5+1]*4)+(rfiddata[i*5+2]*2)+rfiddata[i*5+3];
; UDR=ascii[data1%16];
; wait_tx();
; }
; }
L145:
.dbline 253
; }
L113:
.dbline 254
L105:
.dbline -2
L22:
adiw R28,12
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l j 1 c
.dbsym r bits 22 i
.dbsym l i 0 c
.dbend
.dbfunc e int0_isr _int0_isr fV
.even
_int0_isr::
.dbline -1
.dbline 259
; }
; }
;
;
; void int0_isr(void)
; {
.dbline -2
L154:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; t_i -> <dead>
; j -> <dead>
; i -> <dead>
.even
_main::
.dbline -1
.dbline 265
; //external interupt on INT0
; }
;
;
; void main(void)
; {
.dbline 267
; unsigned char i,j,t_i;
; init_devices();
xcall _init_devices
.dbline 268
; RFW_1();
sbi 0x15,6
.dbline 269
; okled0();
cbi 0x15,0
xjmp L157
L156:
.dbline 270
; while (1) {
.dbline 271
; if (run==1) {
lds R24,_run
cpi R24,1
brne L159
.dbline 271
.dbline 272
; R_H4001();
xcall _R_H4001
.dbline 273
; led();
ldi R24,128
ldi R25,0
in R2,0x12
clr R3
eor R2,R24
eor R3,R25
out 0x12,R2
.dbline 274
; run=0;
clr R2
sts _run,R2
.dbline 275
; }
L159:
.dbline 276
L157:
.dbline 270
xjmp L156
X17:
.dbline -2
L155:
.dbline 0 ; func end
ret
.dbsym l t_i 1 c
.dbsym l j 1 c
.dbsym l i 1 c
.dbend
.area bss(ram, con, rel)
.dbfile D:\TK5552\Iccavr\H4001\H4001.c
_rfiddata::
.blkb 54
.dbsym e rfiddata _rfiddata A[54:54]c
_decode::
.blkb 192
.dbsym e decode _decode A[192:192]c
_rxdata::
.blkb 1
.dbsym e rxdata _rxdata c
_data1::
.blkb 1
.dbsym e data1 _data1 c
_timer_count::
.blkb 1
.dbsym e timer_count _timer_count c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -