?? sample_caculate.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 + -