📄 bu2624.s
字号:
ori R24,16
sts _In_Cdata+1,R25
sts _In_Cdata,R24
L56:
.dbline 277
; }
L49:
.dbline 278
; send_cmd_to_bu2624();
xcall _send_cmd_to_bu2624
.dbline 280
; #ifdef SGJM_RDS
; rds_init();
xcall _rds_init
.dbline -2
.dbline 285
; //rds_data.syc_flag = 0;
; //rds_status = 0;
; //rds_step = SEARCH_SYC_STEP;
; #endif
; }
L47:
.dbline 0 ; func end
ret
.dbfunc s change_freq_value _change_freq_value fI
.even
_change_freq_value::
.dbline -1
.dbline 288
;
; void change_freq_value(void)
; {
.dbline 289
; if(amfm_flag)
lds R2,_amfm_flag
tst R2
brne X0
xjmp L60
X0:
.dbline 290
; {
.dbline 291
; if(search_dir)
lds R2,_search_dir
tst R2
breq L62
.dbline 292
; {
.dbline 293
; if(freq < AMreq_MAX)
lds R25,_freq+1
lds R24,_freq
cpi R24,75
ldi R30,6
cpc R25,R30
brsh L64
.dbline 294
; freq +=AMreq_STEP;
adiw R24,9
sts _freq+1,R25
sts _freq,R24
xjmp L63
L64:
.dbline 296
; else
; {
.dbline 297
; freq = AMreq_MIN;
ldi R24,522
ldi R25,2
sts _freq+1,R25
sts _freq,R24
.dbline 298
; }
.dbline 299
; }
xjmp L63
L62:
.dbline 301
; else
; {
.dbline 302
; if(freq > AMreq_MIN)
ldi R24,522
ldi R25,2
lds R3,_freq+1
lds R2,_freq
cp R24,R2
cpc R25,R3
brsh L66
.dbline 303
; freq -= AMreq_STEP;
movw R24,R2
sbiw R24,9
sts _freq+1,R25
sts _freq,R24
xjmp L67
L66:
.dbline 305
; else
; freq = AMreq_MAX;
ldi R24,1611
ldi R25,6
sts _freq+1,R25
sts _freq,R24
L67:
.dbline 306
; }
L63:
.dbline 307
; In_Pdata = ((freq+IF_AM)/AMreq_STEP)<<4;
ldi R18,9
ldi R19,0
lds R17,_freq+1
lds R16,_freq
subi R16,62 ; offset = 450
sbci R17,254
xcall div16u
movw R2,R16
lsl R2
rol R3
lsl R2
rol R3
lsl R2
rol R3
lsl R2
rol R3
sts _In_Pdata+1,R3
sts _In_Pdata,R2
.dbline 308
; }
xjmp L61
L60:
.dbline 310
; else
; {
.dbline 311
; if(search_dir) //++
lds R2,_search_dir
tst R2
breq L68
.dbline 312
; {
.dbline 313
; if(freq <FMreq_MAX)
lds R25,_freq+1
lds R24,_freq
cpi R24,48
ldi R30,42
cpc R25,R30
brsh L70
.dbline 314
; freq += FMreq_STEP;
adiw R24,5
sts _freq+1,R25
sts _freq,R24
xjmp L69
L70:
.dbline 316
; else
; freq = FMreq_MIN;
ldi R24,8750
ldi R25,34
sts _freq+1,R25
sts _freq,R24
.dbline 317
; }
xjmp L69
L68:
.dbline 319
; else
; {
.dbline 320
; if(freq > FMreq_MIN)
ldi R24,8750
ldi R25,34
lds R3,_freq+1
lds R2,_freq
cp R24,R2
cpc R25,R3
brsh L72
.dbline 321
; freq -= FMreq_STEP;
movw R24,R2
sbiw R24,5
sts _freq+1,R25
sts _freq,R24
xjmp L73
L72:
.dbline 323
; else
; freq = FMreq_MAX;
ldi R24,10800
ldi R25,42
sts _freq+1,R25
sts _freq,R24
L73:
.dbline 324
; }
L69:
.dbline 325
ldi R18,5
ldi R19,0
lds R17,_freq+1
lds R16,_freq
subi R16,210 ; offset = 1070
sbci R17,251
xcall div16u
sts _In_Pdata+1,R17
sts _In_Pdata,R16
.dbline 326
L61:
.dbline -2
.dbline 327
; In_Pdata = (freq+IF_FM)/5;
; }
; }
L59:
.dbline 0 ; func end
ret
.dbfunc s tuner_handsearch _tuner_handsearch fI
.even
_tuner_handsearch::
.dbline -1
.dbline 330
;
; void tuner_handsearch()
; {
.dbline 331
; radio_is_muted = 1;
ldi R24,1
sts _radio_is_muted,R24
.dbline 332
; mute_radio();
xcall _mute_radio
.dbline 333
; is_autosearching = 0;
clr R2
sts _is_autosearching,R2
.dbline 334
; change_freq_value();
xcall _change_freq_value
.dbline 335
; send_cmd_to_bu2624();
xcall _send_cmd_to_bu2624
.dbline 337
; #ifdef SGJM_RDS
; rds_init();
xcall _rds_init
.dbline 338
; display_type = DIS_FREQUENCY;
clr R2
sts _display_type,R2
.dbline 339
; g_ui_tmp_msg_cnt = 10;
ldi R24,10
sts _g_ui_tmp_msg_cnt,R24
.dbline 342
; #endif
;
; delay_ms(100);
ldi R16,100
ldi R17,0
xcall _delay_ms
.dbline 343
; radio_is_muted =0;
clr R2
sts _radio_is_muted,R2
.dbline 344
; mute_radio();
xcall _mute_radio
.dbline -2
.dbline 345
; }
L74:
.dbline 0 ; func end
ret
.dbfunc s tuner_autosearch _tuner_autosearch fI
.area func_lit(rom, con, rel)
L109:
.word `L85
.word `L86
.word `L89
.word `L92
.word `L108
.area text(rom, con, rel)
.dbfile D:\avrmcu\AT980\bu2624\bu2624.c
; Ifcount -> y+0
.even
_tuner_autosearch::
xcall push_gset3
sbiw R28,4
.dbline -1
.dbline 348
;
; void tuner_autosearch(void)
; {
.dbline 351
; //char i;
; unsigned long Ifcount;
; if(search_ok )
lds R2,_search_ok
tst R2
breq L76
.dbline 352
; {
.dbline 353
; if(is_autosearching)
lds R2,_is_autosearching
tst R2
brne X2
xjmp L75
X2:
.dbline 354
; {
.dbline 355
; is_autosearching = 0;
clr R2
sts _is_autosearching,R2
.dbline 356
; save_fre();
xcall _save_fre
.dbline 365
; /*if(amfm_flag)
; {
; In_Pdata =((freq+IF_AM)/AMreq_STEP)<<4;
; }
; else
; {
; In_Pdata = (freq+IF_FM)/5;
; }*/
; Enable_SD_OUT();// In_Cdata &= (~(COUNTER_START | IF_COUNTER_16MS)); //set cte = 0
lds R25,_In_Cdata+1
lds R24,_In_Cdata
andi R24,127
andi R25,191
sts _In_Cdata+1,R25
sts _In_Cdata,R24
.dbline 366
; Disable_IF_OUT();//In_Cdata |= P1_IF_NOOUT;
ori R24,2
sts _In_Cdata+1,R25
sts _In_Cdata,R24
.dbline 367
; send_cmd_to_bu2624();
xcall _send_cmd_to_bu2624
.dbline 368
; radio_is_muted = 0;
clr R2
sts _radio_is_muted,R2
.dbline 370
;
; if(!amfm_flag)
lds R2,_amfm_flag
tst R2
brne L80
.dbline 371
; switch_audio_channel();
xcall _switch_audio_channel
L80:
.dbline 372
; delay_ms(100);
ldi R16,100
ldi R17,0
xcall _delay_ms
.dbline 373
; mute_radio();
xcall _mute_radio
.dbline 376
; //station_num = 1;
; #ifdef SGJM_RDS
; rds_init();
xcall _rds_init
.dbline 380
; //rds_status = 0;
; //rds_data.syc_flag = 0;
; //rds_step = SEARCH_SYC_STEP;
; g_ui_tmp_msg_cnt = 10;
ldi R24,10
sts _g_ui_tmp_msg_cnt,R24
.dbline 384
; // if(pty_is_searching==2)
; // pty_search_delay = 67;
; #endif
; }
.dbline 385
; return;
xjmp L75
L76:
.dbline 387
; }
; rdelay20ms--;
lds R24,_rdelay20ms
subi R24,1
sts _rdelay20ms,R24
.dbline 388
; switch(autosrch_step)
lds R10,_autosrch_step
clr R11
ldi R24,0
ldi R25,0
cp R10,R24
cpc R11,R25
brge X3
xjmp L82
X3:
ldi R24,4
cp R24,R10
cpc R25,R11
brge X4
xjmp L82
X4:
ldi R24,<L109
ldi R25,>L109
movw R30,R10
lsl R30
rol R31
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X1:
.dbline 389
; {
L85:
.dbline 392
; case AUTOSRCH_STEP1:
; //printf("step 1\n");
; switch_fmam();
xcall _switch_fmam
.dbline 393
; autosrch_step ++;
lds R24,_autosrch_step
subi R24,255 ; addi 1
sts _autosrch_step,R24
.dbline 394
; rdelay20ms = 2;
ldi R24,2
sts _rdelay20ms,R24
.dbline 396
; //if(!ok_count) radio_delay200ms =2;
; break;
xjmp L83
L86:
.dbline 400
;
; case AUTOSRCH_STEP2:
; //step interval 20ms
; if(rdelay20ms) break;
lds R2,_rdelay20ms
tst R2
breq L87
.dbline 400
xjmp L83
L87:
.dbline 401
; In_Cdata |= (COUNTER_START|IF_COUNTER_16MS) ; //set cte = 1
lds R25,_In_Cdata+1
lds R24,_In_Cdata
ori R24,128
ori R25,64
sts _In_Cdata+1,R25
sts _In_Cdata,R24
.dbline 402
; send_cmd_to_bu2624();
xcall _send_cmd_to_bu2624
.dbline 403
; autosrch_step = AUTOSRCH_STEP3;
ldi R24,2
sts _autosrch_step,R24
.dbline 404
; rdelay20ms = 10;
ldi R24,10
sts _rdelay20ms,R24
.dbline 406
;
; break;
xjmp L83
L89:
.dbline 409
;
; case AUTOSRCH_STEP3:
; if (radio_dout()&& rdelay20ms)
sbis 0x10,7
rjmp L90
lds R2,_rdelay20ms
tst R2
breq L90
.dbline 410
; {
.dbline 411
; break;
xjmp L83
L90:
.dbline 414
; }
; else
; {
.dbline 415
; autosrch_step = AUTOSRCH_STEP4;
ldi R24,3
sts _autosrch_step,R24
.dbline 416
; }
.dbline 417
; break;
xjmp L83
L92:
.dbline 420
;
; case AUTOSRCH_STEP4:
; read_data_from_bu2624();
xcall _read_data_from_bu2624
.dbline 421
; Ifcount = ((((unsigned long)dataout1) <<16) | (unsigned long)dataout0) & 0x0fffff;
lds R3,_dataout0+1
lds R2,_dataout0
clr R4
clr R5
lds R6,_dataout1
clr R7
clr R8
clr R9
mov R8,R6
mov R9,R7
clr R6
clr R7
or R6,R2
or R7,R3
or R8,R4
or R9,R5
ldi R16,<L93
ldi R17,>L93
xcall lpm32
and R6,R16
and R7,R17
and R8,R18
and R9,R19
movw R30,R28
std z+0,R6
std z+1,R7
std z+2,R8
std z+3,R9
.dbline 422
; if((dataout1 & 0xc0)) //&& !wait_station_200ms)
lds R24,_dataout1
andi R24,192
tst R24
breq L94
.dbline 423
; {
.dbline 424
; autosrch_step = AUTOSRCH_STEP5;
ldi R24,4
sts _autosrch_step,R24
.dbline 426
; //break;
; }
xjmp L83
L94:
.dbline 428
; else
; {
.dbline 430
;
; if(amfm_flag)
lds R2,_amfm_flag
tst R2
breq L96
.dbline 431
; {
.dbline 432
; if((Ifcount >= IAM_MIN) && (Ifcount <=IAM_MAX))
ldi R16,<L100
ldi R17,>L100
xcall lpm32
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R2,R16
cpc R3,R17
cpc R4,R18
cpc R5,R19
brlo L98
ldi R16,<L101
ldi R17,>L101
xcall lpm32
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R16,R2
cpc R17,R3
cpc R18,R4
cpc R19,R5
brlo L98
.dbline 433
; {
.dbline 434
; search_ok = 1;
ldi R24,1
sts _search_ok,R24
.dbline 436
; #ifdef SGJM_RDS
; rds_status = 0;
clr R2
sts _rds_status,R2
.dbline 437
; pty_search_delay = 67;
ldi R24,67
sts _rds_dis_string+2,R24
.dbline 439
; #endif
; }
xjmp L83
L98:
.dbline 441
; else
; {
.dbline 445
; #ifdef TEST_IF
; is_autosearching = 0;
; #else
; autosrch_step = AUTOSRCH_STEP5;
ldi R24,4
sts _autosrch_step,R24
.dbline 448
; #endif
; //break;
; }
.dbline 449
; }
xjmp L83
L96:
.dbline 451
; else
; {
.dbline 453
;
; if((Ifcount >= IFM_MIN)&&(Ifcount <= IFM_MAX))//) && (170700--171700))
ldi R16,<L105
ldi R17,>L105
xcall lpm32
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R2,R16
cpc R3,R17
cpc R4,R18
cpc R5,R19
brlo L103
ldi R16,<L106
ldi R17,>L106
xcall lpm32
movw R30,R28
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R16,R2
cpc R17,R3
cpc R18,R4
cpc R19,R5
brlo L103
.dbline 454
; {
.dbline 456
;
; search_ok = 1;
ldi R24,1
sts _search_ok,R24
.dbline 458
; #ifdef SGJM_RDS
; rds_status = 0;
clr R2
sts _rds_status,R2
.dbline 459
; pty_search_delay = 67;
ldi R24,67
sts _rds_dis_string+2,R24
.dbline 461
; #endif
; }
xjmp L83
L103:
.dbline 463
; else
; {
.dbline 467
; #ifdef TEST_IF
; is_autosearching = 0;
; #else
; autosrch_step=AUTOSRCH_STEP5;
ldi R24,4
sts _autosrch_step,R24
.dbline 469
; #endif
; };
.dbline 469
.dbline 470
; }
.dbline 471
; }
.dbline 472
; break;
xjmp L83
L108:
.dbline 474
; case AUTOSRCH_STEP5:
; radio_is_muted = 1;
ldi R24,1
sts _radio_is_muted,R24
.dbline 475
; mute_radio();
xcall _mute_radio
.dbline 476
; change_freq_value();
xcall _change_freq_value
.dbline 477
; autosrch_step = AUTOSRCH_STEP1;
clr R2
sts _autosrch_step,R2
.dbline 478
; break;
L82:
L83:
.dbline -2
.dbline 480
; } //switch
; }
L75:
adiw R28,4
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l Ifcount 0 l
.area bss(ram, con, rel)
.dbfile D:\avrmcu\AT980\bu2624\bu2624.c
_freq::
.blkb 2
.dbsym s freq _freq i
_amfm_flag::
.blkb 1
.dbsym s amfm_flag _amfm_flag c
_station_no::
.blkb 1
.dbsym s station_no _station_no c
_is_stereo::
.blkb 1
.dbsym s is_stereo _is_stereo c
_is_autosearching::
.blkb 1
.dbsym s is_autosearching _is_autosearching c
_search_ok::
.blkb 1
.dbsym s search_ok _search_ok c
_autosrch_step::
.blkb 1
.dbsym s autosrch_step _autosrch_step c
_radio_is_muted::
.blkb 1
.dbsym s radio_is_muted _radio_is_muted c
_radio_count::
.blkb 2
.dbsym s radio_count _radio_count i
_In_Cdata:
.blkb 2
.dbsym s In_Cdata _In_Cdata i
_In_Pdata:
.blkb 2
.dbsym s In_Pdata _In_Pdata i
_dataout1:
.blkb 1
.dbsym s dataout1 _dataout1 c
_dataout0:
.blkb 2
.dbsym s dataout0 _dataout0 i
_rdelay20ms::
.blkb 1
.dbsym s rdelay20ms _rdelay20ms c
_search_dir::
.blkb 1
.dbsym s search_dir _search_dir c
_gps::
.blkb 108
.dbsym s gps _gps X
.area lit(rom, con, rel)
L106:
.word 40768,2
L105:
.word 39808,2
L101:
.word 7264,0
L100:
.word 7136,0
L93:
.word 65535,15
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -