⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data_process.lis

📁 国内某测温系统信号处理处理板的代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -