main.lis

来自「为日本瑞萨苏州分公司做的一个温控系统」· LIS 代码 · 共 1,434 行 · 第 1/4 页

LIS
1,434
字号
 0165 87                psha
 0166 CD03BF            jsr _LightAlarm
 0169 A701              ais #1
 016B 95                tsx
 016C                   .dbline 98
 016C           ;                  StateFlag=5;   //进入状态5
 016C A605              lda #5
 016E B702              sta *_StateFlag
 0170                   .dbline 99
 0170           ;               }
 0170 204D              bra L12
 0172           L24:
 0172                   .dbline 101
 0172           ;               else
 0172           ;               {   
 0172                   .dbline 102
 0172           ;                  StateFlag=3;   //加热时间未到,回状态3,边判边等
 0172 A603              lda #3
 0174 B702              sta *_StateFlag
 0176                   .dbline 103
 0176           ;               }   
 0176                   .dbline 104
 0176           ;               break;  
 0176 2047              bra L12
 0178           L26:
 0178                   .dbline 106
 0178           ;        case 5://状态5:冷却箱中有物体放入,就闭合Cool阀,等到无物体时就断开
 0178           ;               if(Infrared<=C_Exist)
 0178 5506              ldhx *_Infrared
 017A 650200            cphx #512
 017D 95                tsx
 017E 221B              bhi L27
 0180                   .dbline 107
 0180           ;               {
 0180                   .dbline 108
 0180           ;                  SwitchOutput(C_CoolSw,1);
 0180 A601              lda #1
 0182 87                psha
 0183 A604              lda #4
 0185 87                psha
 0186 CD0000            jsr _SwitchOutput
 0189 A702              ais #2
 018B                   .dbline 109
 018B           ;                  SwitchOutput(C_GreenLight,1);
 018B A601              lda #1
 018D 87                psha
 018E 87                psha
 018F CD0000            jsr _SwitchOutput
 0192 A702              ais #2
 0194 95                tsx
 0195                   .dbline 110
 0195           ;                  CoolFlag=1;       //有物体放入置此标志
 0195 A601              lda #1
 0197 B701              sta *_CoolFlag
 0199                   .dbline 111
 0199           ;               }
 0199 2024              bra L12
 019B           L27:
 019B                   .dbline 112
 019B           ;               else if(CoolFlag==0) //没物体放入,转状态4继续黄灯闪提示
 019B B601              lda *_CoolFlag
 019D 2606              bne L29
 019F                   .dbline 113
 019F           ;                    {
 019F                   .dbline 114
 019F           ;                      StateFlag=4;
 019F A604              lda #4
 01A1 B702              sta *_StateFlag
 01A3                   .dbline 115
 01A3           ;                    }
 01A3 201A              bra L12
 01A5           L29:
 01A5                   .dbline 117
 01A5           ;                    else            //有物体放入并已经拿走,则断开Cool阀
 01A5           ;                    {
 01A5                   .dbline 118
 01A5           ;                      SwitchOutput(C_CoolSw,0);    //关冷却箱
 01A5 4F                clra
 01A6 87                psha
 01A7 A604              lda #4
 01A9 87                psha
 01AA CD0000            jsr _SwitchOutput
 01AD A702              ais #2
 01AF                   .dbline 119
 01AF           ;                      SwitchOutput(C_GreenLight,0);//绿灯灭
 01AF 4F                clra
 01B0 87                psha
 01B1 A601              lda #1
 01B3 87                psha
 01B4 CD0000            jsr _SwitchOutput
 01B7 A702              ais #2
 01B9 95                tsx
 01BA                   .dbline 120
 01BA           ;                      CoolFlag=0;
 01BA 3F01              clr *_CoolFlag
 01BC                   .dbline 121
 01BC           ;                      goto MainLoop;
 01BC CC001C            jmp L2
 01BF           X6:
 01BF                   .dbline 123
 01BF           ;                    }
 01BF           ;               break;
 01BF           L11:
 01BF           L12:
 01BF                   .dbline 125
 01BF           L4:
 01BF                   .dbline 49
 01BF CC0027            jmp L3
 01C2           X7:
 01C2                   .dbline -2
 01C2           L1:
 01C2 A71B              ais #27
 01C4                   .dbline 0 ; func end
 01C4 81                rts
 01C5                   .dbsym l InitTime 2 c
 01C5                   .dbsym l tmp 3 i
 01C5                   .dbsym l ADValue 5 A[22:11]i
 01C5                   .dbend
 01C5                   .dbfunc e ConvertCT _ConvertCT fi
 01C5           ;            tmp -> 0,X
 01C5           ;            adv -> 6,X
 01C5           _ConvertCT::
 01C5                   .dbline -1
 01C5 A7FC              ais #-4
 01C7 95                tsx
 01C8                   .dbline 140
 01C8           ;      }//switch
 01C8           ;    }//while    
 01C8           ; }
 01C8           ; 
 01C8           ; 
 01C8           ; //**************************************************************************
 01C8           ; //                              内部函数                                   *
 01C8           ; //**************************************************************************
 01C8           ; 
 01C8           ; //-------------------------------------------------------------------------*
 01C8           ; //函数名:ConvertCT                                                         *
 01C8           ; //参  数:AD值                                                              *
 01C8           ; //返  回:AD值对应的当前温度                                                *
 01C8           ; //功  能:将AD值转换为当前温度                                              *
 01C8           ; //-------------------------------------------------------------------------*
 01C8           ; INT16U ConvertCT(INT16U adv)
 01C8           ; {
 01C8                   .dbline 144
 01C8           ;      INT32U tmp;
 01C8           ;      
 01C8           ;      //防止溢出,限定最大最小值
 01C8           ;      if(adv<TADmin)      
 01C8 C68003            lda _TADmin+1
 01CB B700              sta *__r1
 01CD C68002            lda _TADmin
 01D0 B700              sta *__r0
 01D2 E607              lda 7,X
 01D4 B700              sta *__r3
 01D6 E606              lda 6,X
 01D8 B700              sta *__r2
 01DA 5500              ldhx *__r2
 01DC 7500              cphx *__r0
 01DE 95                tsx
 01DF 240C              bhs L32
 01E1                   .dbline 145
 01E1           ;         adv=TADmin;
 01E1 C68002            lda _TADmin
 01E4 E706              sta 6,X
 01E6 C68003            lda _TADmin+1
 01E9 E707              sta 7,X
 01EB 2023              bra L33
 01ED           L32:
 01ED                   .dbline 146
 01ED           ;      else if(adv>TADmax)
 01ED C68005            lda _TADmax+1
 01F0 B700              sta *__r1
 01F2 C68004            lda _TADmax
 01F5 B700              sta *__r0
 01F7 E607              lda 7,X
 01F9 B700              sta *__r3
 01FB E606              lda 6,X
 01FD B700              sta *__r2
 01FF 5500              ldhx *__r2
 0201 7500              cphx *__r0
 0203 95                tsx
 0204 230A              bls L34
 0206                   .dbline 147
 0206           ;              adv=TADmax;
 0206 C68004            lda _TADmax
 0209 E706              sta 6,X
 020B C68005            lda _TADmax+1
 020E E707              sta 7,X
 0210           L34:
 0210           L33:
 0210                   .dbline 152
 0210           ;           
 0210           ;      //             TADmax-TADmin     adv-TADmin
 0210           ;      //计算公式:  -------------- = ---------------
 0210           ;      //              Tmax-Tmin          ?-Tmin
 0210           ;      tmp=adv-TADmin;      
 0210 E607              lda 7,X
 0212 C08003            sub _TADmin+1
 0215 B700              sta *__r1
 0217 E606              lda 6,X
 0219 C28002            sbc _TADmin
 021C B700              sta *__r0
 021E 4F                clra
 021F E701              sta 1,X
 0221 F7                sta ,X
 0222 B600              lda *__r1
 0224 E703              sta 3,X
 0226 B600              lda *__r0
 0228 E702              sta 2,X
 022A                   .dbline 153
 022A           ;      tmp=(tmp*(Tmax-Tmin))/(TADmax-TADmin)+Tmin;
 022A 3F00              clr *__r0
 022C C68000            lda _Tmin
 022F B700              sta *__r1
 0231 3F00              clr *__r2
 0233 C68001            lda _Tmax
 0236 B000              sub *__r1
 0238 B700              sta *__r1
 023A B600              lda *__r2
 023C B200              sbc *__r0
 023E B700              sta *__r0
 0240 4E0000            mov *__r1,*__r3
 0243 4E0000            mov *__r0,*__r2
 0246 3F00              clr *__r1
 0248 3F00              clr *__r0
 024A 3D00              tst *__r2
 024C 2A04              bpl X11
 024E 3300              com *__r1
 0250 3300              com *__r0
 0252           X11:
 0252 E603              lda 3,X
 0254 87                psha
 0255 E602              lda 2,X
 0257 87                psha
 0258 E601              lda 1,X
 025A 87                psha
 025B F6                lda ,X
 025C 87                psha
 025D B600              lda *__r3
 025F 87                psha
 0260 B600              lda *__r2
 0262 87                psha
 0263 B600              lda *__r1
 0265 87                psha
 0266 B600              lda *__r0
 0268 87                psha
 0269 CD0000            jsr __mul32u
 026C A704              ais #4
 026E C68005            lda _TADmax+1
 0271 C08003            sub _TADmin+1
 0274 B700              sta *__r5
 0276 C68004            lda _TADmax
 0279 C28002            sbc _TADmin
 027C B700              sta *__r4
 027E 4E0000            mov *__r5,*__r7
 0281 4E0000            mov *__r4,*__r6
 0284 3F00              clr *__r5
 0286 3F00              clr *__r4
 0288 B600              lda *__r7
 028A 87                psha
 028B B600              lda *__r6
 028D 87                psha
 028E B600              lda *__r5
 0290 87                psha
 0291 B600              lda *__r4
 0293 87                psha
 0294 CD0000            jsr __divmod32u
 0297 A704              ais #4
 0299 86                pula
 029A B700              sta *__r0
 029C 86                pula
 029D B700              sta *__r1
 029F 86                pula
 02A0 B700              sta *__r2
 02A2 86                pula
 02A3 B700              sta *__r3
 02A5 3F00              clr *__r6
 02A7 3F00              clr *__r5
 02A9 3F00              clr *__r4
 02AB C68000            lda _Tmin
 02AE B700              sta *__r7
 02B0 B600              lda *__r3
 02B2 BB00              add *__r7
 02B4 E703              sta 3,X
 02B6 B600              lda *__r2
 02B8 B900              adc *__r6
 02BA E702              sta 2,X
 02BC B600              lda *__r1
 02BE B900              adc *__r5
 02C0 E701              sta 1,X
 02C2 B600              lda *__r0
 02C4 B900              adc *__r4
 02C6 F7                sta ,X
 02C7                   .dbline 154
 02C7           ;      return(tmp); 
 02C7 E603              lda 3,x
 02C9 B700              sta *__r3
 02CB E602              lda 2,x
 02CD B700              sta *__r2
 02CF 95                tsx
 02D0 4E0000            mov *__r3,*__r1
 02D3 4E0000            mov *__r2,*__r0
 02D6                   .dbline -2
 02D6           L31:
 02D6 A704              ais #4
 02D8                   .dbline 0 ; func end
 02D8 81                rts
 02D9                   .dbsym l tmp 0 l
 02D9                   .dbsym l adv 6 i
 02D9                   .dbend
 02D9                   .dbfunc e ConvertT _ConvertT fi
 02D9           ;            tmp -> 0,X
 02D9           ;            adv -> 6,X
 02D9           _ConvertT::
 02D9                   .dbline -1
 02D9 A7FC              ais #-4
 02DB 95                tsx
 02DC                   .dbline 163
 02DC           ; }
 02DC           ; //-------------------------------------------------------------------------*
 02DC           ; //函数名:ConvertT                                                          *
 02DC           ; //参  数:AD值                                                              *
 02DC           ; //返  回:AD值对应的设定温度                                                *
 02DC           ; //功  能:将AD值转换为设定温度                                              *
 02DC           ; //-------------------------------------------------------------------------*
 02DC           ; INT16U ConvertT(INT16U adv)
 02DC           ; {
 02DC                   .dbline 166
 02DC           ;      INT32U tmp;    //32位
 02DC           ;      
 02DC           ;      tmp=adv; 
 02DC 4F                clra
 02DD E701              sta 1,X
 02DF F7                sta ,X
 02E0 E607              lda 7,X
 02E2 E703              sta 3,X
 02E4 E606              lda 6,X
 02E6 E702              sta 2,X
 02E8                   .dbline 168
 02E8           ;      //按线性关系,将AD值范围分为C_TmpBound等分              
 02E8           ;      tmp=((tmp*C_TmpBound)/C_RADMax)/10+C_MinTmp;
 02E8 A6B8              lda #-72
 02EA 87                psha
 02EB A60B              lda #11
 02ED 87                psha
 02EE 4F                clra
 02EF 87                psha
 02F0 87                psha
 02F1 E603              lda 3,X
 02F3 87                psha
 02F4 E602              lda 2,X
 02F6 87                psha
 02F7 E601              lda 1,X
 02F9 87                psha
 02FA F6                lda ,X
 02FB 87                psha
 02FC CD0000            jsr __mul32u
 02FF A704              ais #4
 0301 A6CC              lda #-52

⌨️ 快捷键说明

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