📄 bu1923a.s
字号:
.module bu1923a.c
.area data(ram, con, rel)
_rds_display_type::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\avrmcu\AT980\bu1923\bu1923a.c
.dbsym s rds_display_type _rds_display_type c
_c_word_val::
.blkb 2
.area idata
.word 616
.area data(ram, con, rel)
.dbfile D:\avrmcu\AT980\bu1923\bu1923a.c
.dbsym s c_word_val _c_word_val i
_rds_status::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\avrmcu\AT980\bu1923\bu1923a.c
.dbsym s rds_status _rds_status c
_pty_is_searching::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\avrmcu\AT980\bu1923\bu1923a.c
.dbsym s pty_is_searching _pty_is_searching c
_rds_step:
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile D:\avrmcu\AT980\bu1923\bu1923a.c
.dbsym s rds_step _rds_step c
.area lit(rom, con, rel)
_matrix_H::
.word 512
.word 256
.word 128
.word 64
.word 32
.word 16
.word 8
.word 4
.word 2
.word 1
.word 732
.word 366
.word 183
.word 647
.word 927
.word 787
.word 853
.word 886
.word 443
.word 513
.word 988
.word 494
.word 247
.word 679
.word 911
.word 795
.dbsym s matrix_H _matrix_H A[52:26]i
.area text(rom, con, rel)
.dbfile D:\avrmcu\AT980\bu1923\bu1923a.c
.dbfunc s close_rds _close_rds fI
.even
_close_rds::
.dbline -1
.dbline 45
;
; #include <macros.h>
; #include "BU1923.H"
; #include "..\bu2624\bu2624.h"
; #include <iom163.h>
; //#define pty_dis_type rds_dis_string[0]
; //#define pty_search_type rds_dis_string[1]
; //#define pty_search_delay rds_dis_string[2]
; //#define
; unsigned char rds_display_type = 0;
; unsigned int c_word_val = C_OFF_WORD;
; //unsigned char off_word_bit;
; unsigned char rds_status = 0;
; unsigned long rds_bit_buffer;
; unsigned char rds_dis_buffer[10];
; unsigned char rds_dis_string[65];
; unsigned char rds_dis_control;
; unsigned char rds_buffer0_flag;
; unsigned int rds_buffer[4];
; unsigned char pty_is_searching = 0;
; static unsigned long buffer_reg;
; static unsigned int syndrome_reg;
; //const unsigned int gx = 0x1b9;
; //const unsigned int gx_m = 0x31b;
; static unsigned char bit_count;
; RDS_DATA_STRUCT rds_data;//={0,0,0,0,0,0,0,0};
; static unsigned char rds_step = SEARCH_SYC_STEP;
; //static unsigned int temp_syc_word;
;
; const unsigned int matrix_H[26]=
; {
; 0x200,0x100,0x080,0x040,0x020,0x010,0x008,0x004,0x002,0x001,
; 0x2dc,0x16e,0x0b7,0x287,0x39f,0x313,0x355,0x376,
; 0x1bb,0x201,0x3dc,0x1ee,0x0f7,0x2a7,0x38f,0x31b
; };
; extern unsigned char is_autosearching;
; //extern unsigned char is_search_all_station;
; extern unsigned char search_ok;
; extern unsigned char search_dir;
; extern unsigned char autosrch_step;
; unsigned char rds_delay;
; void get_rds_block(void);
; void rds_syc_detect(void);
; void close_rds(void)
; {
.dbline 46
; GIMSK &= 0x7f;//ENIR_EN3 = 0; //disable irterupt
in R24,0x3b
andi R24,127
out 0x3b,R24
.dbline -2
.dbline 47
; }
L2:
.dbline 0 ; func end
ret
.dbfunc s rds_init _rds_init fI
.even
_rds_init::
.dbline -1
.dbline 49
; void rds_init()
; {
.dbline 57
; //ELVR_LB3 = 1;
; //ELVR_LA3 = 1; //following edge
; //ICR03 = 20; //interrupt levels REMOTE CONTROLLED = 19
; //timer = 2
; //EIRR_ER3 = 0; //clear interrupt request
; //MCUCR |= 0x08;
;
; rds_data.A_word = 0;
clr R2
clr R3
sts _rds_data+1,R3
sts _rds_data,R2
.dbline 58
; rds_data.B_word = 0;
sts _rds_data+2+1,R3
sts _rds_data+2,R2
.dbline 59
; rds_data.C_word = 0;
sts _rds_data+4+1,R3
sts _rds_data+4,R2
.dbline 60
; rds_data.D_word = 0;
sts _rds_data+6+1,R3
sts _rds_data+6,R2
.dbline 61
; rds_data.block_count = 0;
sts _rds_data+8,R2
.dbline 62
; rds_data.word_err_count = 0;
sts _rds_data+9,R2
.dbline 63
; rds_data.syc_flag = 0;
sts _rds_data+10,R2
.dbline 64
; rds_data.err_flag = 0;
sts _rds_data+11,R2
.dbline 65
; rds_step = SEARCH_SYC_STEP;
ldi R24,1
sts _rds_step,R24
.dbline 66
; rds_bit_buffer = 0;
ldi R16,<L11
ldi R17,>L11
xcall lpm32
sts _rds_bit_buffer+1,R17
sts _rds_bit_buffer,R16
sts _rds_bit_buffer+2+1,R19
sts _rds_bit_buffer+2,R18
.dbline 67
; rds_delay = 60;
ldi R24,60
sts _rds_delay,R24
.dbline 68
; bit_count = 0;
clr R2
sts _bit_count,R2
.dbline 69
; rds_status = 0;
sts _rds_status,R2
.dbline 70
; rds_buffer0_flag = 0;
sts _rds_buffer0_flag,R2
.dbline -2
.dbline 72
; //ENIR_EN3 = 1; //enable irterupt
; }
L3:
.dbline 0 ; func end
ret
.dbfunc s open_rds _open_rds fI
.even
_open_rds::
.dbline -1
.dbline 74
; void open_rds(void)
; {
.dbline 75
; MCUCR |= 0x08;
in R24,0x35
ori R24,8
out 0x35,R24
.dbline 76
; GIMSK |= 0x80;
in R24,0x3b
ori R24,128
out 0x3b,R24
.dbline -2
.dbline 78
; //printf("rds int init completed\n");
; }
L12:
.dbline 0 ; func end
ret
.area vector(rom, abs)
.org 8
jmp _int1_isr
.area text(rom, con, rel)
.dbfile D:\avrmcu\AT980\bu1923\bu1923a.c
.dbfunc s int1_isr _int1_isr fI
.even
_int1_isr::
xcall push_lset
.dbline -1
.dbline 81
; #pragma interrupt_handler int1_isr:3
; void int1_isr(void)
; {
.dbline 83
; //EIRR_ER3 = 0;
; rds_bit_buffer<<=1;
lds R5,_rds_bit_buffer+2+1
lds R4,_rds_bit_buffer+2
lds R3,_rds_bit_buffer+1
lds R2,_rds_bit_buffer
lsl R2
rol R3
rol R4
rol R5
sts _rds_bit_buffer+1,R3
sts _rds_bit_buffer,R2
sts _rds_bit_buffer+2+1,R5
sts _rds_bit_buffer+2,R4
.dbline 84
; if(RDATA)
sbis 0x10,1
rjmp L14
.dbline 85
; rds_bit_buffer |=1;
ldi R16,<L16
ldi R17,>L16
xcall lpm32
lds R5,_rds_bit_buffer+2+1
lds R4,_rds_bit_buffer+2
lds R3,_rds_bit_buffer+1
lds R2,_rds_bit_buffer
or R2,R16
or R3,R17
or R4,R18
or R5,R19
sts _rds_bit_buffer+1,R3
sts _rds_bit_buffer,R2
sts _rds_bit_buffer+2+1,R5
sts _rds_bit_buffer+2,R4
L14:
.dbline 86
; if(!rds_data.syc_flag)
lds R2,_rds_data+10
tst R2
brne L17
.dbline 87
; {
.dbline 88
; if(bit_count>=25)
lds R24,_bit_count
cpi R24,25
brlo L20
.dbline 89
; rds_syc_detect();
xcall _rds_syc_detect
xjmp L18
L20:
.dbline 91
; else
; bit_count++;
lds R24,_bit_count
subi R24,255 ; addi 1
sts _bit_count,R24
.dbline 92
; }
xjmp L18
L17:
.dbline 94
.dbline 96
xcall _get_rds_block
.dbline 97
L18:
.dbline -2
.dbline 99
; else
; {
; // printf("get_rds_block\n");
; get_rds_block();
; }
; //EIRR_ER3 = 0;
; }
L13:
xcall pop_lset
.dbline 0 ; func end
reti
.dbfunc s rds_syc_detect _rds_syc_detect fI
.area func_lit(rom, con, rel)
L59:
.word `L30
.word `L43
.word `L46
.word `L49
.word `L49
.word `L55
.area text(rom, con, rel)
.dbfile D:\avrmcu\AT980\bu1923\bu1923a.c
; p -> R20,R21
; temp_syc_word -> R16,R17
; i -> R22
.even
_rds_syc_detect::
xcall push_gset2
.dbline -1
.dbline 117
; /*
; unsigned int compute_syc(void)
; {
; unsigned int i,syc_value;
; unsigned long k;
; syc_value = 0;
; k= 0x02000000;
; for(i=0;i<26;i++)
; {
; if(rds_buffer&k)
; syc_value ^= matrix_H[i];
; k>>1;
; }
; return syc_value;
; }*/
;
; void rds_syc_detect(void)
; {
.dbline 121
; register unsigned char i;
; register unsigned int temp_syc_word;
; register const unsigned int *p;
; p = &matrix_H[25];
ldi R20,<_matrix_H+50
ldi R21,>_matrix_H+50
.dbline 122
; temp_syc_word = 0;
clr R16
clr R17
.dbline 123
; asm("lds R2, _rds_bit_buffer\n"
lds R2, _rds_bit_buffer
lds R3, _rds_bit_buffer+1
lds R4, _rds_bit_buffer+2
lds R5, _rds_bit_buffer+3
.dbline 127
; "lds R3, _rds_bit_buffer+1\n"
; "lds R4, _rds_bit_buffer+2\n"
; "lds R5, _rds_bit_buffer+3");
; i = 0;
clr R22
L24:
.dbline 129
; do
; {
.dbline 130
; asm("sbrs R2,0\n"
sbrs R2,0
rjmp _bit_is_zero
.dbline 132
; "rjmp _bit_is_zero");
; temp_syc_word ^= *p; //matrix_H[i];
movw R30,R20
lpm R0,Z+
lpm R1,Z
movw R30,R0
eor R16,R30
eor R17,R31
.dbline 133
; asm("_bit_is_zero:");
_bit_is_zero:
.dbline 134
; asm("lsr R5\n"
lsr R5
ror R4
ror R3
ror R2
.dbline 138
; "ror R4\n"
; "ror R3\n"
; "ror R2");
; p--;
subi R20,2
sbci R21,0
.dbline 139
; i++;
inc R22
.dbline 140
L25:
.dbline 140
; } while(i<26);
cpi R22,26
brlo L24
.dbline 141
; switch(rds_step)
lds R18,_rds_step
clr R19
cpi R18,1
ldi R30,0
cpc R19,R30
brge X2
xjmp L27
X2:
ldi R24,6
ldi R25,0
cp R24,R18
cpc R25,R19
brge X3
xjmp L27
X3:
ldi R24,<L59
ldi R25,>L59
movw R30,R18
sbiw R30,1
lsl R30
rol R31
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X0:
.dbline 142
; {
L30:
.dbline 145
;
; case SEARCH_SYC_STEP:
; switch(temp_syc_word)
cpi R16,204
ldi R30,3
cpc R17,R30
breq L35
ldi R24,972
ldi R25,3
cp R24,R16
cpc R25,R17
brlt L40
L39:
cpi R16,88
ldi R30,2
cpc R17,R30
brne X4
xjmp L38
X4:
cpi R16,88
ldi R30,2
cpc R17,R30
brge X5
xjmp L28
X5:
L41:
cpi R16,92
ldi R30,2
cpc R17,R30
breq L35
xjmp L28
L40:
cpi R16,212
ldi R30,3
cpc R17,R30
breq L34
cpi R16,212
ldi R30,3
cpc R17,R30
brge X6
xjmp L28
X6:
L42:
cpi R16,216
ldi R30,3
cpc R17,R30
breq L33
xjmp L28
X1:
.dbline 146
; {
L33:
.dbline 148
; case A_SYC_WORD:
; rds_step = SYC_B_STEP;
ldi R24,3
sts _rds_step,R24
.dbline 149
; bit_count = 0;
clr R2
sts _bit_count,R2
.dbline 151
; //printf("get a word\n");
; break;
xjmp L28
L34:
.dbline 153
; case B_SYC_WORD:
; rds_step = SYC_C_STEP;
ldi R24,4
sts _rds_step,R24
.dbline 154
; bit_count = 0;
clr R2
sts _bit_count,R2
.dbline 156
; // printf("get b word\n");
; break;
xjmp L28
L35:
.dbline 159
; case C_SYC_WORD:
; case C1_SYC_WORD:
; rds_step = SYC_D_STEP;
ldi R24,6
sts _rds_step,R24
.dbline 160
; bit_count = 0;
clr R2
sts _bit_count,R2
.dbline 161
; if(temp_syc_word == C_SYC_WORD)
cpi R16,92
ldi R30,2
cpc R17,R30
brne L36
.dbline 162
; c_word_val = C_OFF_WORD;
ldi R24,616
ldi R25,2
sts _c_word_val+1,R25
sts _c_word_val,R24
xjmp L28
L36:
.dbline 164
; else
; c_word_val = C1_OFF_WORD;
ldi R24,848
ldi R25,3
sts _c_word_val+1,R25
sts _c_word_val,R24
.dbline 166
; //printf("get c word\n");
; break;
xjmp L28
L38:
.dbline 168
; case D_SYC_WORD:
; rds_step = SYC_A_STEP;
ldi R24,2
sts _rds_step,R24
.dbline 169
; bit_count = 0;
clr R2
sts _bit_count,R2
.dbline 171
; //printf("get d word\n");
; break;
.dbline 173
; }
; break;
xjmp L28
L43:
.dbline 175
; case SYC_A_STEP:
; if(temp_syc_word!=A_SYC_WORD)
cpi R16,216
ldi R30,3
cpc R17,R30
breq L44
.dbline 176
; {
.dbline 177
; rds_step = SEARCH_SYC_STEP;
ldi R24,1
sts _rds_step,R24
.dbline 178
; }
xjmp L28
L44:
.dbline 180
; else
; {
.dbline 181
; bit_count = 0;
clr R2
sts _bit_count,R2
.dbline 182
; rds_step = SYC_B_STEP;
ldi R24,3
sts _rds_step,R24
.dbline 184
; //rds_data.syc_flag = 1;
; };
.dbline 184
.dbline 185
; break;
xjmp L28
L46:
.dbline 187
; case SYC_B_STEP:
; if(temp_syc_word == B_SYC_WORD)
cpi R16,212
ldi R30,3
cpc R17,R30
brne L47
.dbline 188
; {
.dbline 189
; bit_count = 0;
clr R2
sts _bit_count,R2
.dbline 190
; rds_step = SYC_C_STEP;
ldi R24,4
sts _rds_step,R24
.dbline 192
; //rds_data.syc_flag = 1;
; }
xjmp L28
L47:
.dbline 194
; else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -