📄 data_process.lis
字号:
0010 ; void data_process(void)
0010 ; {
0010 .dbline 43
0010 ; unsigned int work_T,work_Ns,work_Ts,T;
0010 ; unsigned int time_count;
0010 ;
0010 ; work_mode=(dp2rass[0]&0x04)>>2;
0010 80910000 lds R24,_dp2rass
0014 8470 andi R24,4
0016 8695 lsr R24
0018 8695 lsr R24
001A 80930000 sts _work_mode,R24
001E .dbline 44
001E ; work_grade=(dp2rass[0]&0x18)>>3;
001E 80910000 lds R24,_dp2rass
0022 8871 andi R24,24
0024 8695 lsr R24
0026 8695 lsr R24
0028 8695 lsr R24
002A 80930000 sts _work_grade,R24
002E .dbline 46
002E ;
002E ; work_Ts=dp2rass[2]>>1;
002E 40910200 lds R20,_dp2rass+2
0032 5527 clr R21
0034 5595 asr R21
0036 4795 ror R20
0038 .dbline 47
0038 ; Fl=Freq_scale[work_Ts]; //低频
0038 02E0 ldi R16,2
003A 10E0 ldi R17,0
003C 9A01 movw R18,R20
003E 00D0 rcall empy16s
0040 F801 movw R30,R16
0042 80E0 ldi R24,<_Freq_scale
0044 90E0 ldi R25,>_Freq_scale
0046 E80F add R30,R24
0048 F91F adc R31,R25
004A 0590 lpm R0,Z+
004C 1490 lpm R1,Z
004E F001 movw R30,R0
0050 F0930100 sts _Fl+1,R31
0054 E0930000 sts _Fl,R30
0058 .dbline 48
0058 ; Fh=Freq_scale[work_Ts+40]; //高频
0058 9A01 movw R18,R20
005A 285D subi R18,216 ; offset = 40
005C 3F4F sbci R19,255
005E 02E0 ldi R16,2
0060 10E0 ldi R17,0
0062 00D0 rcall empy16s
0064 F801 movw R30,R16
0066 80E0 ldi R24,<_Freq_scale
0068 90E0 ldi R25,>_Freq_scale
006A E80F add R30,R24
006C F91F adc R31,R25
006E 0590 lpm R0,Z+
0070 1490 lpm R1,Z
0072 F001 movw R30,R0
0074 F0930100 sts _Fh+1,R31
0078 E0930000 sts _Fh,R30
007C .dbline 50
007C ;
007C ; work_Ns=(dp2rass[0]&0xe0)>>5;
007C 25E0 ldi R18,5
007E 30E0 ldi R19,0
0080 00910000 lds R16,_dp2rass
0084 1127 clr R17
0086 007E andi R16,224
0088 1070 andi R17,0
008A 00D0 rcall asr16
008C A801 movw R20,R16
008E .dbline 51
008E ; if(work_Ns==7)
008E 0730 cpi R16,7
0090 E0E0 ldi R30,0
0092 1E07 cpc R17,R30
0094 69F4 brne L7
0096 .dbline 52
0096 ; Ns=Fh-Fl; //为7的时候采用全部频率点
0096 20900000 lds R2,_Fl
009A 30900100 lds R3,_Fl+1
009E 40900000 lds R4,_Fh
00A2 50900100 lds R5,_Fh+1
00A6 4218 sub R4,R2
00A8 5308 sbc R5,R3
00AA 40920000 sts _Ns,R4
00AE 08C0 rjmp L8
00B0 L7:
00B0 .dbline 54
00B0 ; else
00B0 ; Ns=24*(work_Ns+1);
00B0 9A01 movw R18,R20
00B2 2F5F subi R18,255 ; offset = 1
00B4 3F4F sbci R19,255
00B6 08E1 ldi R16,24
00B8 10E0 ldi R17,0
00BA 00D0 rcall empy16s
00BC 00930000 sts _Ns,R16
00C0 L8:
00C0 .dbline 56
00C0 ;
00C0 ; work_T=(dp2rass[1]&0x1e)>>1;
00C0 40910100 lds R20,_dp2rass+1
00C4 5527 clr R21
00C6 4E71 andi R20,30
00C8 5070 andi R21,0
00CA 5595 asr R21
00CC 4795 ror R20
00CE .dbline 57
00CE ; T=(work_T+1)*Ns; //循环周期为这么多毫秒
00CE 20910000 lds R18,_Ns
00D2 3327 clr R19
00D4 8A01 movw R16,R20
00D6 0F5F subi R16,255 ; offset = 1
00D8 1F4F sbci R17,255
00DA 00D0 rcall empy16s
00DC A801 movw R20,R16
00DE .dbline 59
00DE ; //1024分频情况下,每毫秒7.2计数周期
00DE ; time_count=65535-(T*72)/10;
00DE 08E4 ldi R16,72
00E0 10E0 ldi R17,0
00E2 9A01 movw R18,R20
00E4 00D0 rcall empy16s
00E6 2AE0 ldi R18,10
00E8 30E0 ldi R19,0
00EA 00D0 rcall div16u
00EC 4FEF ldi R20,65535
00EE 5FEF ldi R21,255
00F0 401B sub R20,R16
00F2 510B sbc R21,R17
00F4 .dbline 60
00F4 ; TCNT1_L=time_count&0xff;
00F4 CA01 movw R24,R20
00F6 9070 andi R25,0
00F8 80930000 sts _TCNT1_L,R24
00FC .dbline 61
00FC ; TCNT1_H=time_count>>8;
00FC 1A01 movw R2,R20
00FE 232C mov R2,R3
0100 3324 clr R3
0102 20920000 sts _TCNT1_H,R2
0106 .dbline -2
0106 L5:
0106 00D0 rcall pop_gset1
0108 .dbline 0 ; func end
0108 0895 ret
010A .dbsym r T 20 i
010A .dbsym r work_T 20 i
010A .dbsym r work_Ns 20 i
010A .dbsym r time_count 20 i
010A .dbsym r work_Ts 20 i
010A .dbend
010A .dbfunc e rand _rand fi
010A ; rand_num -> R20,R21
010A ; randseed -> R20,R21
.even
010A _rand::
010A 00D0 rcall push_gset1
010C A801 movw R20,R16
010E .dbline -1
010E .dbline 67
010E ; }
010E ;
010E ;
010E ;
010E ; unsigned int rand(unsigned int randseed)
010E ; {
010E .dbline 69
010E ; unsigned int rand_num;
010E ; rand_num= (randseed * rand_x + rand_y) % 251 + Fl; //求出来的是那个随机的频率
010E 01E6 ldi R16,97
0110 10E0 ldi R17,0
0112 9A01 movw R18,R20
0114 00D0 rcall empy16s
0116 095F subi R16,249 ; offset = 7
0118 1F4F sbci R17,255
011A 2BEF ldi R18,251
011C 30E0 ldi R19,0
011E 00D0 rcall mod16u
0120 A801 movw R20,R16
0122 20900000 lds R2,_Fl
0126 30900100 lds R3,_Fl+1
012A 420D add R20,R2
012C 531D adc R21,R3
012E .dbline 70
012E ; seed = rand_num;
012E 50930100 sts _seed+1,R21
0132 40930000 sts _seed,R20
0136 .dbline 71
0136 ; D15_0=rand_num; //把这个频率换算成为控制字
0136 50930100 sts _D15_0+1,R21
013A 40930000 sts _D15_0,R20
013E .dbline 72
013E ; return D15_0;
013E 00910000 lds R16,_D15_0
0142 10910100 lds R17,_D15_0+1
0146 .dbline -2
0146 L10:
0146 00D0 rcall pop_gset1
0148 .dbline 0 ; func end
0148 0895 ret
014A .dbsym r rand_num 20 i
014A .dbsym r randseed 20 i
014A .dbend
014A .dbfunc e line _line fi
014A ; i -> R20,R21
.even
014A _line::
014A 00D0 rcall push_gset1
014C A801 movw R20,R16
014E .dbline -1
014E .dbline 78
014E ; }
014E ;
014E ;
014E ; //线性递增函数采用先放大再缩小的办法产生频率
014E ; unsigned int line(unsigned int i)
014E ; {
014E .dbline 79
014E ; seed=(Fh-Fl)*i/Ns+Fl;
014E 20900000 lds R2,_Fl
0152 30900100 lds R3,_Fl+1
0156 00910000 lds R16,_Fh
015A 10910100 lds R17,_Fh+1
015E 0219 sub R16,R2
0160 1309 sbc R17,R3
0162 9A01 movw R18,R20
0164 00D0 rcall empy16s
0166 20910000 lds R18,_Ns
016A 3327 clr R19
016C 00D0 rcall div16u
016E 1801 movw R2,R16
0170 40900000 lds R4,_Fl
0174 50900100 lds R5,_Fl+1
0178 240C add R2,R4
017A 351C adc R3,R5
017C 30920100 sts _seed+1,R3
0180 20920000 sts _seed,R2
0184 .dbline 80
0184 ; D15_0=seed;
0184 30920100 sts _D15_0+1,R3
0188 20920000 sts _D15_0,R2
018C .dbline 81
018C ; return D15_0;
018C 00910000 lds R16,_D15_0
0190 10910100 lds R17,_D15_0+1
0194 .dbline -2
0194 L11:
0194 00D0 rcall pop_gset1
0196 .dbline 0 ; func end
0196 0895 ret
0198 .dbsym r i 20 i
0198 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -