📄 remote.s
字号:
; for (j=0;j<ms;j++)
clr R20
clr R21
rjmp L124
L121:
.dbline 362
; {
.dbline 363
clr R22
clr R23
L125:
.dbline 363
L126:
.dbline 363
subi R22,255 ; offset = 1
sbci R23,255
.dbline 363
cpi R22,130
ldi R30,0
cpc R23,R30
brlt L125
.dbline 364
wdr
.dbline 365
L122:
.dbline 361
subi R20,255 ; offset = 1
sbci R21,255
L124:
.dbline 361
cp R20,R16
cpc R21,R17
brlt L121
.dbline -2
.dbline 366
; for (i=0;i<130;i++);
; WDR();
; }
; }
L120:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r j 20 I
.dbsym r i 22 I
.dbsym r ms 16 I
.dbend
.area vector(rom, abs)
.org 22
rjmp _uart0_rx_isr
.area text(rom, con, rel)
.dbfile C:\DATA\MP3\Remote\Code\remote.c
.area bss(ram, con, rel)
.dbfile C:\DATA\MP3\Remote\Code\remote.c
L130:
.blkb 1
L131:
.blkb 1
L132:
.blkb 1
.area text(rom, con, rel)
.dbfile C:\DATA\MP3\Remote\Code\remote.c
.dbfunc e uart0_rx_isr _uart0_rx_isr fV
.dbsym s Qte L132 c
.dbsym s Decoded L131 c
.dbsym s Error L130 c
; i -> R22
; ch -> R20
.even
_uart0_rx_isr::
st -y,R2
st -y,R3
st -y,R4
st -y,R16
st -y,R17
st -y,R18
st -y,R19
st -y,R24
st -y,R25
st -y,R30
st -y,R31
in R2,0x3f
st -y,R2
rcall push_gset2
.dbline -1
.dbline 375
;
; //*************************************
; // void uart0_rx_isr(void)
; //
; // manchester encoded byte
; //*************************************
; #pragma interrupt_handler uart0_rx_isr:12
; void uart0_rx_isr(void)
; {
.dbline 382
; unsigned char ch;
; unsigned char i;
; static unsigned char Error;
; static unsigned char Decoded;
; static unsigned char Qte;
;
; ch = UDR; //uart has received a character in UDR
in R20,0xc
.dbline 384
;
; if (ch == 0xf0)
cpi R20,240
brne L133
.dbline 385
; {
.dbline 386
; Qte = 0;
clr R2
sts L132,R2
.dbline 387
; Error = FALSE;
sts L130,R2
.dbline 388
; return;
rjmp L129
L133:
.dbline 391
; }
;
; if ((ch == 0x0f) && (Error == FALSE))
cpi R20,15
brne L135
lds R2,L130
tst R2
brne L135
.dbline 392
; {
.dbline 393
; RxData[Qte/2] = 0x00;
ldi R18,2
ldi R19,0
lds R16,L132
clr R17
rcall div16s
movw R30,R16
ldi R24,<_RxData
ldi R25,>_RxData
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 394
; NewMessage = TRUE;
ldi R24,1
sts _NewMessage,R24
.dbline 395
; return;
rjmp L129
L135:
.dbline 398
; }
;
; Decoded = 0x00;
clr R2
sts L131,R2
.dbline 400
;
; for (i=0;i<4;i++)
clr R22
rjmp L140
L137:
.dbline 401
; {
.dbline 402
; Decoded >>= 1;
lds R2,L131
lsr R2
sts L131,R2
.dbline 403
; if ((ch & 0x03) == 0x02) Decoded |= 0x08;
mov R24,R20
andi R24,3
cpi R24,2
brne L141
.dbline 403
mov R24,R2
ori R24,8
sts L131,R24
rjmp L142
L141:
.dbline 404
; else if ((ch & 0x03) == 0x01) Decoded = Decoded;
mov R24,R20
andi R24,3
cpi R24,1
brne L143
.dbline 404
lds R2,L131
sts L131,R2
rjmp L144
L143:
.dbline 405
; else Error = TRUE;
ldi R24,1
sts L130,R24
L144:
L142:
.dbline 406
lsr R20
lsr R20
.dbline 407
L138:
.dbline 400
inc R22
L140:
.dbline 400
cpi R22,4
brlo L137
.dbline 409
; ch >>= 2;
; }
;
; if (Qte <= (MAXLEN * 2))
ldi R24,80
lds R2,L132
cp R24,R2
brlo L145
.dbline 410
; {
.dbline 411
; if ((Qte % 2) == 0) RxData[Qte/2] = Decoded;
ldi R17,2
mov R16,R2
rcall mod8u
tst R16
brne L147
.dbline 411
ldi R18,2
ldi R19,0
lds R16,L132
clr R17
rcall div16s
movw R30,R16
ldi R24,<_RxData
ldi R25,>_RxData
add R30,R24
adc R31,R25
lds R2,L131
std z+0,R2
rjmp L148
L147:
.dbline 412
; else RxData[Qte/2] += (Decoded << 4);
ldi R18,2
ldi R19,0
lds R16,L132
clr R17
rcall div16s
movw R2,R16
ldi R24,<_RxData
ldi R25,>_RxData
add R2,R24
adc R3,R25
lds R24,L131
andi R24,#0x0F
swap R24
movw R30,R2
ldd R4,z+0
add R4,R24
std z+0,R4
L148:
.dbline 413
; }
L145:
.dbline 414
; Qte++;
lds R24,L132
subi R24,255 ; addi 1
sts L132,R24
.dbline -2
.dbline 415
; }
L129:
rcall pop_gset2
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R19,y+
ld R18,y+
ld R17,y+
ld R16,y+
ld R4,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym r i 22 c
.dbsym r ch 20 c
.dbend
.dbfunc e AnalyseData _AnalyseData fV
; i -> R20
.even
_AnalyseData::
rcall push_gset1
sbiw R28,2
.dbline -1
.dbline 421
;
; //*************************************
; // void AnalyseData(void)
; //*************************************
; void AnalyseData(void)
; {
.dbline 424
; unsigned char i;
;
; TIMSK &= ~0x01; // Timer0 overflow interrupt disable
in R24,0x39
andi R24,254
out 0x39,R24
.dbline 425
; if (RxData[0] == 0x80) // Clear Screen
lds R24,_RxData
cpi R24,128
brne L150
.dbline 426
; {
.dbline 427
; for (i=0;i<14;i++)
clr R20
rjmp L155
L152:
.dbline 428
.dbline 429
ldi R24,<_Line
ldi R25,>_Line
mov R30,R20
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 430
ldi R24,<_Line+40
ldi R25,>_Line+40
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 431
ldi R24,<_Line+80
ldi R25,>_Line+80
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 432
ldi R24,<_Line+120
ldi R25,>_Line+120
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 433
ldi R24,<_Line+160
ldi R25,>_Line+160
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R2
.dbline 434
L153:
.dbline 427
inc R20
L155:
.dbline 427
cpi R20,14
brlo L152
.dbline 435
; {
; Line[0][i] = 0x00;
; Line[1][i] = 0x00;
; Line[2][i] = 0x00;
; Line[3][i] = 0x00;
; Line[4][i] = 0x00;
; }
; }
L150:
.dbline 437
;
; if (RxData[0] == 0x81) strncpy(&Line[0][0],&RxData[1],MAXLEN);
lds R24,_RxData
cpi R24,129
brne L160
.dbline 437
ldi R24,40
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_RxData+1
ldi R19,>_RxData+1
ldi R16,<_Line
ldi R17,>_Line
rcall _strncpy
L160:
.dbline 438
; if (RxData[0] == 0x82) strncpy(&Line[1][0],&RxData[1],MAXLEN);
lds R24,_RxData
cpi R24,130
brne L163
.dbline 438
ldi R24,40
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_RxData+1
ldi R19,>_RxData+1
ldi R16,<_Line+40
ldi R17,>_Line+40
rcall _strncpy
L163:
.dbline 439
; if (RxData[0] == 0x83) strncpy(&Line[2][0],&RxData[1],MAXLEN);
lds R24,_RxData
cpi R24,131
brne L167
.dbline 439
ldi R24,40
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_RxData+1
ldi R19,>_RxData+1
ldi R16,<_Line+80
ldi R17,>_Line+80
rcall _strncpy
L167:
.dbline 440
; if (RxData[0] == 0x84) strncpy(&Line[3][0],&RxData[1],MAXLEN);
lds R24,_RxData
cpi R24,132
brne L171
.dbline 440
ldi R24,40
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_RxData+1
ldi R19,>_RxData+1
ldi R16,<_Line+120
ldi R17,>_Line+120
rcall _strncpy
L171:
.dbline 441
; if (RxData[0] == 0x85) strncpy(&Line[4][0],&RxData[1],MAXLEN);
lds R24,_RxData
cpi R24,133
brne L175
.dbline 441
ldi R24,40
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_RxData+1
ldi R19,>_RxData+1
ldi R16,<_Line+160
ldi R17,>_Line+160
rcall _strncpy
L175:
.dbline 443
;
; if (RxData[0] == 0x90) ListType = SONG;
lds R24,_RxData
cpi R24,144
brne L179
.dbline 443
clr R2
sts _ListType,R2
L179:
.dbline 444
; if (RxData[0] == 0x91) ListType = DIR;
lds R24,_RxData
cpi R24,145
brne L181
.dbline 444
ldi R24,1
sts _ListType,R24
L181:
.dbline 445
; if (RxData[0] == 0x92) ListType = PLAY;
lds R24,_RxData
cpi R24,146
brne L183
.dbline 445
ldi R24,2
sts _ListType,R24
L183:
.dbline 447
;
; if ((RxData[0] > 0xa0) && (RxData[0] < 0xa6)) LinePtr = RxData[0] - 0xa1;
ldi R24,160
lds R2,_RxData
cp R24,R2
brsh L185
mov R24,R2
cpi R24,166
brsh L185
.dbline 447
subi R24,161
sts _LinePtr,R24
L185:
.dbline 449
;
; if (RxData[0] == 0xb0) Refresh = TRUE;
lds R24,_RxData
cpi R24,176
brne L187
.dbline 449
ldi R24,1
sts _Refresh,R24
L187:
.dbline 451
;
; TIMSK |= 0x01; // Timer0 overflow interrupt enable
in R24,0x39
ori R24,1
out 0x39,R24
.dbline -2
.dbline 452
; }
L149:
adiw R28,2
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e SendKey _SendKey fV
; i -> R20
; ch -> R20
.even
_SendKey::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 458
;
; //*************************************
; // void Send(unsigned char ch)
; //*************************************
; void SendKey(unsigned char ch)
; {
.dbline 461
; unsigned char i;
;
; UCSRB &= ~0x80; // Disable RX interrupt
cbi 0xa,7
.dbline 462
; TxChar(0x55); // Setup AGC
ldi R16,85
rcall _TxChar
.dbline 463
; TxChar(0x55); // Setup AGC
ldi R16,85
rcall _TxChar
.dbline 464
; TxChar(0xf0); // Start of Frame
ldi R16,240
rcall _TxChar
.dbline 465
; TxChar(ch); // Send value
mov R16,R20
rcall _TxChar
.dbline 466
; TxChar(~ch); // Send value
mov R16,R20
com R16
rcall _TxChar
.dbline 467
; TxChar(0x0f); // End of Frame
ldi R16,15
rcall _TxChar
.dbline 469
;
; i = UDR; // Clear uart received character
in R20,0xc
.dbline 470
; UCSRB |= 0x80; // Enable RX interrupt
sbi 0xa,7
.dbline -2
.dbline 471
; }
L189:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r ch 20 c
.dbend
.dbfunc e TxChar _TxChar fV
; ch -> R16
.even
_TxChar::
.dbline -1
.dbline 477
;
; //*************************************
; // void TxChar(unsigned char ch)
; //*************************************
; void TxChar(unsigned char ch)
; {
.dbline 478
; TIMSK &= ~0x01;
in R24,0x39
andi R24,254
out 0x39,R24
L191:
.dbline 479
L192:
.dbline 479
; while (!(UCSRA & 0x20)); // Wait for empty transmit buffer
sbis 0xb,5
rjmp L191
.dbline 480
; TCCR1A = 0x40; // Enable 38khz
ldi R24,64
out 0x2f,R24
.dbline 481
; UDR = ch; // Write char
out 0xc,R16
L194:
.dbline 482
L195:
.dbline 482
; while (!(UCSRA & 0x40)); // Wait for transmit finish
sbis 0xb,6
rjmp L194
.dbline 483
; UCSRA = 0x40; // Clear transmit finish flag
ldi R24,64
out 0xb,R24
.dbline 484
; TCCR1A = 0x00; // Disable 38khz
clr R2
out 0x2f,R2
.dbline 485
; TIMSK |= 0x01;
in R24,0x39
ori R24,1
out 0x39,R24
.dbline -2
.dbline 486
; }
L190:
.dbline 0 ; func end
ret
.dbsym r ch 16 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\DATA\MP3\Remote\Code\remote.c
_buffer::
.blkb 10
.dbsym e buffer _buffer A[10:10]c
_UpdateLcd::
.blkb 1
.dbsym e UpdateLcd _UpdateLcd c
_RxData::
.blkb 80
.dbsym e RxData _RxData A[80:80]c
_Line::
.blkb 200
.dbsym e Line _Line A[200:5:40]c
.area lit(rom, con, rel)
L65:
.byte 32,'P,'l,'a,'y,'i,'n,'g,0
L62:
.byte 'D,'i,'r,32,32,'L,'i,'s,'t,0
L59:
.byte 'S,'o,'n,'g,32,'L,'i,'s,'t,0
L55:
.byte 'V,'e,'r,32,58,32,49,46,48,0
L54:
.byte 'B,'i,'s,'s,'o,'n,'n,'e,'t,'t,'e,0
L53:
.byte 'S,'y,'l,'v,'a,'i,'n,0
L48:
.byte 'M,'P,51,32,'P,'l,'a,'y,'e,'r,0
L43:
.byte 'S,'t,'a,'c,'k,32,'C,'r,'a,'s,'h,46,46,46,0,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -