📄 ww_rass.lst
字号:
(0005) extern unsigned char work_grade;
(0006) extern unsigned char Ns;//频率点的个数
(0007) extern unsigned int Fh,Fl;
(0008) extern unsigned int seed;
(0009) extern unsigned char TCNT1_L;
(0010) extern unsigned char TCNT1_H;
(0011) extern unsigned int D15_0;//为2315控制字
(0012)
(0013) const unsigned int Freq_scale[]={ 2020,2026,2032,2037,2043,2049,2054,2060,2065,2071,2077,2082,
(0014) 2088,2093,2099,2104,2110,2115,2121,2126,2132,2137,2143,2148,
(0015) 2153,2159,2164,2169,2175,2180,2185,2191,2196,2201,2207,2212,
(0016) 2217,2222,2228,2233,2238,2243,2248,2253,2259,2264,2269,2274,
(0017) 2279,2284,2289,2294,2299,2304,2309,2314,2319,2324,2329,2334,
(0018) 2339,2344,2349,2354,2359,2364,2369,2374,2379,2383,2388,2393,
(0019) 2398,2403,2408,2412,2417,2422,2427,2432,2436,2441,2446,2451,
(0020) 2455,2460,2465,2469,2474,2479,2483,2488,2493,2497,2502,2507,
(0021) 2511,2516,2520,2525,2530,2534,2539,2543,2548,2552,2557,2562,
(0022) 2566,2571,2575,2580,2584,2589,2593,2598,2602,2606,2611,2615,
(0023) 2620,2624,2629,2633,2637,2642,2646,2651,2655,2659,2664,2668,
(0024) 2672,2677,2681,2685,2690,2694,2698,2703,2707,2711,2715,2720,
(0025) 2724,2728,2732,2737,2741,2745,2749,2753,2758,2762,2766,2770,
(0026) 2774,2779,2783,2787,2791,2795,2799,2804,2808,2812,2816
(0027) };
(0028)
(0029) void delay_us(unsigned char us)
(0030) {
(0031) do{
(0032) asm("nop\n nop\n");
_delay_us:
us --> R16
02C6 0000 NOP
02C7 0000 NOP
(0033) us--;
02C8 950A DEC R16
(0034) }while(us>0);
02C9 2422 CLR R2
02CA 1620 CP R2,R16
02CB F3D0 BCS 0x02C6
02CC 9508 RET
_data_process:
T --> R20
work_T --> R20
work_Ns --> R20
time_count --> R20
work_Ts --> R20
02CD D101 RCALL push_gset1
(0035) }
(0036)
(0037)
(0038) void data_process(void)
(0039) {
(0040) unsigned int work_T,work_Ns,work_Ts,T;
(0041) unsigned int time_count;
(0042)
(0043) work_mode=(dp2rass[0]&0x04)>>2;
02CE 91800076 LDS R24,dp2rass
02D0 7084 ANDI R24,4
02D1 9586 LSR R24
02D2 9586 LSR R24
02D3 93800070 STS work_mode,R24
(0044) work_grade=(dp2rass[0]&0x18)>>3;
02D5 91800076 LDS R24,dp2rass
02D7 7188 ANDI R24,0x18
02D8 9586 LSR R24
02D9 9586 LSR R24
02DA 9586 LSR R24
02DB 9380006F STS work_grade,R24
(0045)
(0046) work_Ts=dp2rass[2]>>1;
02DD 91400078 LDS R20,dp2rass+2
02DF 2755 CLR R21
02E0 9555 ASR R21
02E1 9547 ROR R20
(0047) Fl=Freq_scale[work_Ts]; //低频
02E2 E002 LDI R16,2
02E3 E010 LDI R17,0
02E4 019A MOVW R18,R20
02E5 D0CF RCALL empy16s
02E6 01F8 MOVW R30,R16
02E7 E282 LDI R24,0x22
02E8 E090 LDI R25,0
02E9 0FE8 ADD R30,R24
02EA 1FF9 ADC R31,R25
02EB 9005 LPM R0,Z+
02EC 9014 LPM R1,0(Z)
02ED 01F0 MOVW R30,R0
02EE 93F0006B STS Fl+1,R31
02F0 93E0006A STS Fl,R30
(0048) Fh=Freq_scale[work_Ts+40]; //高频
02F2 019A MOVW R18,R20
02F3 5D28 SUBI R18,0xD8
02F4 4F3F SBCI R19,0xFF
02F5 E002 LDI R16,2
02F6 E010 LDI R17,0
02F7 D0BD RCALL empy16s
02F8 01F8 MOVW R30,R16
02F9 E282 LDI R24,0x22
02FA E090 LDI R25,0
02FB 0FE8 ADD R30,R24
02FC 1FF9 ADC R31,R25
02FD 9005 LPM R0,Z+
02FE 9014 LPM R1,0(Z)
02FF 01F0 MOVW R30,R0
0300 93F0006D STS Fh+1,R31
0302 93E0006C STS Fh,R30
(0049)
(0050) work_Ns=(dp2rass[0]&0xe0)>>5;
0304 E025 LDI R18,5
0305 E030 LDI R19,0
0306 91000076 LDS R16,dp2rass
0308 2711 CLR R17
0309 7E00 ANDI R16,0xE0
030A 7010 ANDI R17,0
030B D086 RCALL asr16
030C 01A8 MOVW R20,R16
(0051) if(work_Ns==7)
030D 3007 CPI R16,7
030E E0E0 LDI R30,0
030F 071E CPC R17,R30
0310 F469 BNE 0x031E
(0052) Ns=Fh-Fl; //为7的时候采用全部频率点
0311 9020006A LDS R2,Fl
0313 9030006B LDS R3,Fl+1
0315 9040006C LDS R4,Fh
0317 9050006D LDS R5,Fh+1
0319 1842 SUB R4,R2
031A 0853 SBC R5,R3
031B 9240006E STS Ns,R4
031D C008 RJMP 0x0326
(0053) else
(0054) Ns=24*(work_Ns+1);
031E 019A MOVW R18,R20
031F 5F2F SUBI R18,0xFF
0320 4F3F SBCI R19,0xFF
0321 E108 LDI R16,0x18
0322 E010 LDI R17,0
0323 D091 RCALL empy16s
0324 9300006E STS Ns,R16
(0055)
(0056) work_T=(dp2rass[1]&0x1e)>>1;
0326 91400077 LDS R20,dp2rass+1
0328 2755 CLR R21
0329 714E ANDI R20,0x1E
032A 7050 ANDI R21,0
032B 9555 ASR R21
032C 9547 ROR R20
(0057) T=(work_T+1)*Ns; //循环周期为这么多毫秒
032D 9120006E LDS R18,Ns
032F 2733 CLR R19
0330 018A MOVW R16,R20
0331 5F0F SUBI R16,0xFF
0332 4F1F SBCI R17,0xFF
0333 D081 RCALL empy16s
0334 01A8 MOVW R20,R16
(0058) //1024分频情况下,每毫秒7.2计数周期
(0059) time_count=65535-(T*72)/10;
0335 E408 LDI R16,0x48
0336 E010 LDI R17,0
0337 019A MOVW R18,R20
0338 D07C RCALL empy16s
0339 E02A LDI R18,0xA
033A E030 LDI R19,0
033B D05F RCALL div16u
033C EF4F LDI R20,0xFF
033D EF5F LDI R21,0xFF
033E 1B40 SUB R20,R16
033F 0B51 SBC R21,R17
(0060) TCNT1_L=time_count&0xff;
0340 01CA MOVW R24,R20
0341 7090 ANDI R25,0
0342 93800069 STS TCNT1_L,R24
(0061) TCNT1_H=time_count>>8;
0344 011A MOVW R2,R20
0345 2C23 MOV R2,R3
0346 2433 CLR R3
0347 92200068 STS TCNT1_H,R2
0349 D088 RCALL pop_gset1
034A 9508 RET
_rand:
rand_num --> R20
randseed --> R20
034B D083 RCALL push_gset1
034C 01A8 MOVW R20,R16
(0062) }
(0063)
(0064)
(0065)
(0066) unsigned int rand(unsigned int randseed)
(0067) {
(0068) unsigned int rand_num;
(0069) rand_num= (randseed * rand_x + rand_y) % 251 + Fl; //求出来的是那个随机的频率
034D E601 LDI R16,0x61
034E E010 LDI R17,0
034F 019A MOVW R18,R20
0350 D064 RCALL empy16s
0351 5F09 SUBI R16,0xF9
0352 4F1F SBCI R17,0xFF
0353 EF2B LDI R18,0xFB
0354 E030 LDI R19,0
0355 D043 RCALL mod16u
0356 01A8 MOVW R20,R16
0357 9020006A LDS R2,Fl
0359 9030006B LDS R3,Fl+1
035B 0D42 ADD R20,R2
035C 1D53 ADC R21,R3
(0070) seed = rand_num;
035D 93500073 STS seed+1,R21
035F 93400072 STS seed,R20
(0071) D15_0=rand_num; //把这个频率换算成为控制字
0361 93500067 STS D15_0+1,R21
0363 93400066 STS D15_0,R20
(0072) return D15_0;
0365 91000066 LDS R16,D15_0
0367 91100067 LDS R17,D15_0+1
0369 D068 RCALL pop_gset1
036A 9508 RET
_line:
i --> R20
036B D063 RCALL push_gset1
036C 01A8 MOVW R20,R16
(0073) }
(0074)
(0075)
(0076) //线性递增函数采用先放大再缩小的办法产生频率
(0077) unsigned int line(unsigned int i)
(0078) {
(0079) seed=(Fh-Fl)*i/Ns+Fl;
036D 9020006A LDS R2,Fl
036F 9030006B LDS R3,Fl+1
0371 9100006C LDS R16,Fh
0373 9110006D LDS R17,Fh+1
0375 1902 SUB R16,R2
0376 0913 SBC R17,R3
0377 019A MOVW R18,R20
0378 D03C RCALL empy16s
0379 9120006E LDS R18,Ns
037B 2733 CLR R19
037C D01E RCALL div16u
037D 0118 MOVW R2,R16
037E 9040006A LDS R4,Fl
0380 9050006B LDS R5,Fl+1
0382 0C24 ADD R2,R4
0383 1C35 ADC R3,R5
0384 92300073 STS seed+1,R3
0386 92200072 STS seed,R2
(0080) D15_0=seed;
0388 92300067 STS D15_0+1,R3
038A 92200066 STS D15_0,R2
(0081) return D15_0;
FILE: <library>
038C 91000066 LDS R16,D15_0
038E 91100067 LDS R17,D15_0+1
0390 D041 RCALL pop_gset1
0391 9508 RET
asr16:
0392 2322 TST R18
0393 F021 BEQ 0x0398
0394 9515 ASR R17
0395 9507 ROR R16
0396 952A DEC R18
0397 CFFA RJMP asr16
0398 9508 RET
mod16u:
0399 9468 BSET 6
039A C001 RJMP xdiv16u
div16u:
039B 94E8 BCLR 6
xdiv16u:
039C 92EA ST R14,-Y
039D 92FA ST R15,-Y
039E 938A ST R24,-Y
039F 24EE CLR R14
03A0 24FF CLR R15
03A1 E180 LDI R24,0x10
03A2 0F00 LSL R16
03A3 1F11 ROL R17
03A4 1CEE ROL R14
03A5 1CFF ROL R15
03A6 16E2 CP R14,R18
03A7 06F3 CPC R15,R19
03A8 F018 BCS 0x03AC
03A9 1AE2 SUB R14,R18
03AA 0AF3 SBC R15,R19
03AB 9503 INC R16
03AC 958A DEC R24
03AD F7A1 BNE 0x03A2
03AE F416 BRTC 0x03B1
03AF 2D0E MOV R16,R14
03B0 2D1F MOV R17,R15
03B1 9189 LD R24,Y+
03B2 90F9 LD R15,Y+
03B3 90E9 LD R14,Y+
03B4 9508 RET
empy16s:
03B5 920A ST R0,-Y
03B6 921A ST R1,-Y
03B7 938A ST R24,-Y
03B8 939A ST R25,-Y
03B9 9F02 MUL R16,R18
03BA 01C0 MOVW R24,R0
03BB 9F12 MUL R17,R18
03BC 0D90 ADD R25,R0
03BD 9F03 MUL R16,R19
03BE 0D90 ADD R25,R0
03BF 018C MOVW R16,R24
03C0 9199 LD R25,Y+
03C1 9189 LD R24,Y+
03C2 9019 LD R1,Y+
03C3 9009 LD R0,Y+
03C4 9508 RET
pop_gset2:
03C5 E0E2 LDI R30,2
03C6 C00C RJMP pop
push_gset5:
03C7 92FA ST R15,-Y
03C8 92EA ST R14,-Y
push_gset4:
03C9 92DA ST R13,-Y
03CA 92CA ST R12,-Y
push_gset3:
03CB 92BA ST R11,-Y
03CC 92AA ST R10,-Y
push_gset2:
03CD 937A ST R23,-Y
03CE 936A ST R22,-Y
push_gset1:
03CF 935A ST R21,-Y
03D0 934A ST R20,-Y
03D1 9508 RET
pop_gset1:
03D2 E0E1 LDI R30,1
pop:
03D3 9149 LD R20,Y+
03D4 9159 LD R21,Y+
03D5 FDE0 SBRC R30,0
03D6 9508 RET
03D7 9169 LD R22,Y+
03D8 9179 LD R23,Y+
03D9 FDE1 SBRC R30,1
03DA 9508 RET
03DB 90A9 LD R10,Y+
03DC 90B9 LD R11,Y+
03DD FDE2 SBRC R30,2
03DE 9508 RET
03DF 90C9 LD R12,Y+
03E0 90D9 LD R13,Y+
03E1 FDE3 SBRC R30,3
03E2 9508 RET
03E3 90E9 LD R14,Y+
03E4 90F9 LD R15,Y+
03E5 9508 RET
push_lset:
03E6 93FA ST R31,-Y
03E7 93EA ST R30,-Y
03E8 93BA ST R27,-Y
03E9 93AA ST R26,-Y
03EA 939A ST R25,-Y
03EB 938A ST R24,-Y
03EC 933A ST R19,-Y
03ED 932A ST R18,-Y
03EE 931A ST R17,-Y
03EF 930A ST R16,-Y
03F0 929A ST R9,-Y
03F1 928A ST R8,-Y
03F2 927A ST R7,-Y
03F3 926A ST R6,-Y
03F4 925A ST R5,-Y
03F5 924A ST R4,-Y
03F6 923A ST R3,-Y
03F7 922A ST R2,-Y
03F8 921A ST R1,-Y
03F9 920A ST R0,-Y
03FA B60F IN R0,0x3F
03FB 920A ST R0,-Y
03FC 9508 RET
pop_lset:
03FD 9009 LD R0,Y+
03FE BE0F OUT 0x3F,R0
03FF 9009 LD R0,Y+
0400 9019 LD R1,Y+
0401 9029 LD R2,Y+
0402 9039 LD R3,Y+
0403 9049 LD R4,Y+
0404 9059 LD R5,Y+
0405 9069 LD R6,Y+
0406 9079 LD R7,Y+
0407 9089 LD R8,Y+
0408 9099 LD R9,Y+
0409 9109 LD R16,Y+
040A 9119 LD R17,Y+
040B 9129 LD R18,Y+
040C 9139 LD R19,Y+
040D 9189 LD R24,Y+
040E 9199 LD R25,Y+
040F 91A9 LD R26,Y+
0410 91B9 LD R27,Y+
0411 91E9 LD R30,Y+
0412 91F9 LD R31,Y+
0413 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -