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

📄 sample_caculate.lis

📁 手操器
💻 LIS
字号:
                        .module sample_caculate.c
                        .area text(rom, con, rel)
 0000                   .dbfile ..\..\..\..\DOCUME~1\Administrator\桌面\手操器\sample_caculate.c
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\手操器\sample_caculate.c
 0000                   .dbfunc e ReadadResult _ReadadResult fV
                        .even
 0000           _ReadadResult::
 0000                   .dbline -1
 0000                   .dbline 17
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include "TypeDef.h"
 0000           ; #define SampleRipple    35
 0000           ; extern unsigned char TaskState[MAX_TASK_NUM];
 0000           ; extern unsigned int  CurrentOut;
 0000           ; extern unsigned char  SampleTimer;
 0000           ; DataPackageType    Current4_20mA;
 0000           ; DataPackageType    OutputSignal;
 0000           ; unsigned char ADStatus;
 0000           ; unsigned int ADResult;
 0000           ; unsigned char SysErrorCode;
 0000           ; extern  unsigned char DisStatus;
 0000           ; 
 0000           ; 
 0000           ; void ReadadResult(void)
 0000           ; {
 0000                   .dbline 18
 0000           ;        ADCSR|=0X40; 
 0000 369A              sbi 0x6,6
 0002           L6:
 0002                   .dbline 19
 0002           ;        while( (ADCSR&0x10)!=0x10);
 0002           L7:
 0002                   .dbline 19
 0002 86B1              in R24,0x6
 0004 8071              andi R24,16
 0006 8031              cpi R24,16
 0008 E1F7              brne L6
 000A           X0:
 000A                   .dbline 20
 000A           ;        ADStatus=ADCSR;
 000A 26B0              in R2,0x6
 000C 20920300          sts _ADStatus,R2
 0010                   .dbline 21
 0010           ;        ADResult=ADCL;
 0010 24B0              in R2,0x4
 0012 3324              clr R3
 0014 30920200          sts _ADResult+1,R3
 0018 20920100          sts _ADResult,R2
 001C                   .dbline 22
 001C           ;        ADResult|=(int)ADCH<<8;        
 001C 25B0              in R2,0x5
 001E 3324              clr R3
 0020 322C              mov R3,R2
 0022 2224              clr R2
 0024 40900100          lds R4,_ADResult
 0028 50900200          lds R5,_ADResult+1
 002C 4228              or R4,R2
 002E 5328              or R5,R3
 0030 50920200          sts _ADResult+1,R5
 0034 40920100          sts _ADResult,R4
 0038                   .dbline 23
 0038           ;        ADCSR|=0x10;
 0038 349A              sbi 0x6,4
 003A                   .dbline -2
 003A           L5:
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbend
 003C                   .dbfunc e SampleTask _SampleTask fV
                        .even
 003C           _SampleTask::
 003C                   .dbline -1
 003C                   .dbline 28
 003C           ;        
 003C           ; }
 003C           ; 
 003C           ; void SampleTask(void)
 003C           ; {
 003C                   .dbline 30
 003C           ;                       
 003C           ;               ReadadResult();
 003C E1DF              xcall _ReadadResult
 003E                   .dbline 31
 003E           ;           Current4_20mA.Adv=(Current4_20mA.Adv+ADResult)/2;
 003E 20900100          lds R2,_ADResult
 0042 30900200          lds R3,_ADResult+1
 0046 40901900          lds R4,_Current4_20mA+8
 004A 50901A00          lds R5,_Current4_20mA+8+1
 004E 420C              add R4,R2
 0050 531C              adc R5,R3
 0052 5694              lsr R5
 0054 4794              ror R4
 0056 50921A00          sts _Current4_20mA+8+1,R5
 005A 40921900          sts _Current4_20mA+8,R4
 005E                   .dbline 32
 005E           ;           Current4_20mA.ADStatus=ADStatus;    
 005E 20900300          lds R2,_ADStatus
 0062 20921D00          sts _Current4_20mA+12,R2
 0066                   .dbline 33
 0066           ;               SampleTimer=30;
 0066 8EE1              ldi R24,30
 0068 80930000          sts _SampleTimer,R24
 006C                   .dbline 35
 006C           ;                       
 006C           ;               TaskState[CALCULATE_TASK]=TASK_READY;   
 006C 2224              clr R2
 006E 20920100          sts _TaskState+1,R2
 0072                   .dbline 36
 0072           ;         TaskState[SAMPLE_TASK]=TASK_IDLE;    
 0072 85E0              ldi R24,5
 0074 80930300          sts _TaskState+3,R24
 0078                   .dbline -2
 0078           L9:
 0078                   .dbline 0 ; func end
 0078 0895              ret
 007A                   .dbend
 007A                   .dbfunc e Calculate _Calculate fc
 007A                   .dbunion 0 2 .1
 007A                   .dbfield 0 Word i
 007A                   .dbfield 0 Byte A[2:2]c
 007A                   .dbend
 007A                   .dbstruct 0 13 .2
 007A                   .dbfield 0 AdHi S[.1]
 007A                   .dbfield 2 AdLo S[.1]
 007A                   .dbfield 4 PvHi S[.1]
 007A                   .dbfield 6 PvLo S[.1]
 007A                   .dbfield 8 Adv i
 007A                   .dbfield 10 Pv i
 007A                   .dbfield 12 ADStatus c
 007A                   .dbend
 007A           ;              p -> R20,R21
                        .even
 007A           _Calculate::
 007A 4A93              st -y,R20
 007C 5A93              st -y,R21
 007E A801              movw R20,R16
 0080                   .dbline -1
 0080                   .dbline 43
 0080           ; }
 0080           ; 
 0080           ; 
 0080           ; 
 0080           ; 
 0080           ; unsigned char Calculate(DataPackageType *p)
 0080           ; { 
 0080                   .dbline 45
 0080           ;      
 0080           ;           if(p->Adv>p->AdHi.Word)
 0080 FA01              movw R30,R20
 0082 2080              ldd R2,z+0
 0084 3180              ldd R3,z+1
 0086 4084              ldd R4,z+8
 0088 5184              ldd R5,z+9
 008A 2414              cp R2,R4
 008C 3504              cpc R3,R5
 008E 88F4              brsh L16
 0090           X1:
 0090                   .dbline 46
 0090           ;         {
 0090                   .dbline 47
 0090           ;             if(p->Adv>(p->AdHi.Word+2*SampleRipple))
 0090 8081              ldd R24,z+0
 0092 9181              ldd R25,z+1
 0094 8A5B              subi R24,186  ; offset = 70
 0096 9F4F              sbci R25,255
 0098 2084              ldd R2,z+8
 009A 3184              ldd R3,z+9
 009C 8215              cp R24,R2
 009E 9305              cpc R25,R3
 00A0 10F4              brsh L18
 00A2           X2:
 00A2                   .dbline 48
 00A2           ;             return 0;
 00A2 0027              clr R16
 00A4 4DC0              xjmp L15
 00A6           L18:
 00A6                   .dbline 49
 00A6           ;             else p->Adv=p->AdHi.Word;
 00A6 FA01              movw R30,R20
 00A8 2080              ldd R2,z+0
 00AA 3180              ldd R3,z+1
 00AC 3186              std z+9,R3
 00AE 2086              std z+8,R2
 00B0                   .dbline 50
 00B0           ;         }
 00B0 16C0              xjmp L17
 00B2           L16:
 00B2                   .dbline 51
 00B2           ;         else if(p->Adv<p->AdLo.Word)
 00B2 FA01              movw R30,R20
 00B4 2280              ldd R2,z+2
 00B6 3380              ldd R3,z+3
 00B8 4084              ldd R4,z+8
 00BA 5184              ldd R5,z+9
 00BC 4214              cp R4,R2
 00BE 5304              cpc R5,R3
 00C0 70F4              brsh L20
 00C2           X3:
 00C2                   .dbline 52
 00C2           ;         {
 00C2                   .dbline 53
 00C2           ;             if((p->Adv+2*SampleRipple)<p->AdLo.Word)
 00C2 8085              ldd R24,z+8
 00C4 9185              ldd R25,z+9
 00C6 8A5B              subi R24,186  ; offset = 70
 00C8 9F4F              sbci R25,255
 00CA 8215              cp R24,R2
 00CC 9305              cpc R25,R3
 00CE 10F4              brsh L22
 00D0           X4:
 00D0                   .dbline 54
 00D0           ;             return 0;
 00D0 0027              clr R16
 00D2 36C0              xjmp L15
 00D4           L22:
 00D4                   .dbline 55
 00D4           ;             else p->Adv=p->AdLo.Word;
 00D4 FA01              movw R30,R20
 00D6 2280              ldd R2,z+2
 00D8 3380              ldd R3,z+3
 00DA 3186              std z+9,R3
 00DC 2086              std z+8,R2
 00DE                   .dbline 56
 00DE           ;         } 
 00DE           L20:
 00DE           L17:
 00DE                   .dbline 58
 00DE           ;              
 00DE           ;         p->Pv=((unsigned long)(p->Adv-p->AdLo.Word))*(p->PvHi.Word-p->PvLo.Word)
 00DE FA01              movw R30,R20
 00E0 6280              ldd R6,z+2
 00E2 7380              ldd R7,z+3
 00E4 8680              ldd R8,z+6
 00E6 9780              ldd R9,z+7
 00E8 2480              ldd R2,z+4
 00EA 3580              ldd R3,z+5
 00EC 2818              sub R2,R8
 00EE 3908              sbc R3,R9
 00F0 4424              clr R4
 00F2 5524              clr R5
 00F4 0085              ldd R16,z+8
 00F6 1185              ldd R17,z+9
 00F8 0619              sub R16,R6
 00FA 1709              sbc R17,R7
 00FC 2227              clr R18
 00FE 3327              clr R19
 0100 5A92              st -y,R5
 0102 4A92              st -y,R4
 0104 3A92              st -y,R3
 0106 2A92              st -y,R2
 0108 0E940000          xcall empy32u
 010C FA01              movw R30,R20
 010E 2080              ldd R2,z+0
 0110 3180              ldd R3,z+1
 0112 2618              sub R2,R6
 0114 3708              sbc R3,R7
 0116 4424              clr R4
 0118 5524              clr R5
 011A 5A92              st -y,R5
 011C 4A92              st -y,R4
 011E 3A92              st -y,R3
 0120 2A92              st -y,R2
 0122 0E940000          xcall div32u
 0126 1801              movw R2,R16
 0128 2901              movw R4,R18
 012A 3401              movw R6,R8
 012C 8824              clr R8
 012E 9924              clr R9
 0130 260C              add R2,R6
 0132 371C              adc R3,R7
 0134 481C              adc R4,R8
 0136 591C              adc R5,R9
 0138 FA01              movw R30,R20
 013A 3386              std z+11,R3
 013C 2286              std z+10,R2
 013E                   .dbline 61
 013E           ;             /(p->AdHi.Word-p->AdLo.Word)+p->PvLo.Word;
 013E           ;             
 013E           ;         return 1;    
 013E 01E0              ldi R16,1
 0140                   .dbline -2
 0140           L15:
 0140                   .dbline 0 ; func end
 0140 5991              ld R21,y+
 0142 4991              ld R20,y+
 0144 0895              ret
 0146                   .dbsym r p 20 pS[.2]
 0146                   .dbend
 0146                   .dbfunc e CalculateTask _CalculateTask fV
                        .even
 0146           _CalculateTask::
 0146                   .dbline -1
 0146                   .dbline 66
 0146           ; }
 0146           ; 
 0146           ; 
 0146           ; void CalculateTask(void)
 0146           ; {
 0146                   .dbline 67
 0146           ;       TaskState[CALCULATE_TASK]=TASK_WAITTING_EVENT;
 0146 81E0              ldi R24,1
 0148 80930100          sts _TaskState+1,R24
 014C                   .dbline 68
 014C           ;     if(!Calculate(&Current4_20mA))
 014C 00E0              ldi R16,<_Current4_20mA
 014E 10E0              ldi R17,>_Current4_20mA
 0150 94DF              xcall _Calculate
 0152 0023              tst R16
 0154 29F4              brne L26
 0156           X5:
 0156                   .dbline 69
 0156           ;        SysErrorCode|=CURRENT_SIGNAL_ERROR;  
 0156 80910000          lds R24,_SysErrorCode
 015A 8260              ori R24,2
 015C 80930000          sts _SysErrorCode,R24
 0160           L26:
 0160                   .dbline 71
 0160           ;        
 0160           ;       if(DisStatus!=Working_DDS)
 0160 20900000          lds R2,_DisStatus
 0164 2220              tst R2
 0166 09F0              breq L28
 0168           X6:
 0168                   .dbline 72
 0168           ;        return;
 0168 13C0              xjmp L24
 016A           L28:
 016A                   .dbline 73
 016A           ;       if(Calculate(&OutputSignal))
 016A 00E0              ldi R16,<_OutputSignal
 016C 10E0              ldi R17,>_OutputSignal
 016E 85DF              xcall _Calculate
 0170 0023              tst R16
 0172 49F0              breq L30
 0174           X7:
 0174                   .dbline 74
 0174           ;       {
 0174                   .dbline 75
 0174           ;               CurrentOut=OutputSignal.Pv; 
 0174 20900E00          lds R2,_OutputSignal+10
 0178 30900F00          lds R3,_OutputSignal+10+1
 017C 30920100          sts _CurrentOut+1,R3
 0180 20920000          sts _CurrentOut,R2
 0184                   .dbline 76
 0184           ;       }
 0184 05C0              xjmp L31
 0186           L30:
 0186                   .dbline 78
 0186           ;       else
 0186           ;       SysErrorCode|=OUT_CURRENT_ERROR;
 0186 80910000          lds R24,_SysErrorCode
 018A 8061              ori R24,16
 018C 80930000          sts _SysErrorCode,R24
 0190           L31:
 0190                   .dbline -2
 0190           L24:
 0190                   .dbline 0 ; func end
 0190 0895              ret
 0192                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\手操器\sample_caculate.c
 0000           _SysErrorCode::
 0000                   .blkb 1
 0001                   .dbsym e SysErrorCode _SysErrorCode c
 0001           _ADResult::
 0001                   .blkb 2
 0003                   .dbsym e ADResult _ADResult i
 0003           _ADStatus::
 0003                   .blkb 1
 0004                   .dbsym e ADStatus _ADStatus c
 0004           _OutputSignal::
 0004                   .blkb 13
 0011                   .dbsym e OutputSignal _OutputSignal S[.2]
 0011           _Current4_20mA::
 0011                   .blkb 13
 001E                   .dbsym e Current4_20mA _Current4_20mA S[.2]
 001E           ;   
 001E           ; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -