main.s

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

S
1,434
字号
	lda #2
	psha
	jsr _LightAlarm
	ais #1
	tsx
	.dbline 98
;                  StateFlag=5;   //进入状态5
	lda #5
	sta *_StateFlag
	.dbline 99
;               }
	bra L12
L24:
	.dbline 101
;               else
;               {   
	.dbline 102
;                  StateFlag=3;   //加热时间未到,回状态3,边判边等
	lda #3
	sta *_StateFlag
	.dbline 103
;               }   
	.dbline 104
;               break;  
	bra L12
L26:
	.dbline 106
;        case 5://状态5:冷却箱中有物体放入,就闭合Cool阀,等到无物体时就断开
;               if(Infrared<=C_Exist)
	ldhx *_Infrared
	cphx #512
	tsx
	bhi L27
	.dbline 107
;               {
	.dbline 108
;                  SwitchOutput(C_CoolSw,1);
	lda #1
	psha
	lda #4
	psha
	jsr _SwitchOutput
	ais #2
	.dbline 109
;                  SwitchOutput(C_GreenLight,1);
	lda #1
	psha
	psha
	jsr _SwitchOutput
	ais #2
	tsx
	.dbline 110
;                  CoolFlag=1;       //有物体放入置此标志
	lda #1
	sta *_CoolFlag
	.dbline 111
;               }
	bra L12
L27:
	.dbline 112
;               else if(CoolFlag==0) //没物体放入,转状态4继续黄灯闪提示
	lda *_CoolFlag
	bne L29
	.dbline 113
;                    {
	.dbline 114
;                      StateFlag=4;
	lda #4
	sta *_StateFlag
	.dbline 115
;                    }
	bra L12
L29:
	.dbline 117
;                    else            //有物体放入并已经拿走,则断开Cool阀
;                    {
	.dbline 118
;                      SwitchOutput(C_CoolSw,0);    //关冷却箱
	clra
	psha
	lda #4
	psha
	jsr _SwitchOutput
	ais #2
	.dbline 119
;                      SwitchOutput(C_GreenLight,0);//绿灯灭
	clra
	psha
	lda #1
	psha
	jsr _SwitchOutput
	ais #2
	tsx
	.dbline 120
;                      CoolFlag=0;
	clr *_CoolFlag
	.dbline 121
;                      goto MainLoop;
	jmp L2
X6:
	.dbline 123
;                    }
;               break;
L11:
L12:
	.dbline 125
L4:
	.dbline 49
	jmp L3
X7:
	.dbline -2
L1:
	ais #27
	.dbline 0 ; func end
	rts
	.dbsym l InitTime 2 c
	.dbsym l tmp 3 i
	.dbsym l ADValue 5 A[22:11]i
	.dbend
	.dbfunc e ConvertCT _ConvertCT fi
;            tmp -> 0,X
;            adv -> 6,X
_ConvertCT::
	.dbline -1
	ais #-4
	tsx
	.dbline 140
;      }//switch
;    }//while    
; }
; 
; 
; //**************************************************************************
; //                              内部函数                                   *
; //**************************************************************************
; 
; //-------------------------------------------------------------------------*
; //函数名:ConvertCT                                                         *
; //参  数:AD值                                                              *
; //返  回:AD值对应的当前温度                                                *
; //功  能:将AD值转换为当前温度                                              *
; //-------------------------------------------------------------------------*
; INT16U ConvertCT(INT16U adv)
; {
	.dbline 144
;      INT32U tmp;
;      
;      //防止溢出,限定最大最小值
;      if(adv<TADmin)      
	lda _TADmin+1
	sta *__r1
	lda _TADmin
	sta *__r0
	lda 7,X
	sta *__r3
	lda 6,X
	sta *__r2
	ldhx *__r2
	cphx *__r0
	tsx
	bhs L32
	.dbline 145
;         adv=TADmin;
	lda _TADmin
	sta 6,X
	lda _TADmin+1
	sta 7,X
	bra L33
L32:
	.dbline 146
;      else if(adv>TADmax)
	lda _TADmax+1
	sta *__r1
	lda _TADmax
	sta *__r0
	lda 7,X
	sta *__r3
	lda 6,X
	sta *__r2
	ldhx *__r2
	cphx *__r0
	tsx
	bls L34
	.dbline 147
;              adv=TADmax;
	lda _TADmax
	sta 6,X
	lda _TADmax+1
	sta 7,X
L34:
L33:
	.dbline 152
;           
;      //             TADmax-TADmin     adv-TADmin
;      //计算公式:  -------------- = ---------------
;      //              Tmax-Tmin          ?-Tmin
;      tmp=adv-TADmin;      
	lda 7,X
	sub _TADmin+1
	sta *__r1
	lda 6,X
	sbc _TADmin
	sta *__r0
	clra
	sta 1,X
	sta ,X
	lda *__r1
	sta 3,X
	lda *__r0
	sta 2,X
	.dbline 153
;      tmp=(tmp*(Tmax-Tmin))/(TADmax-TADmin)+Tmin;
	clr *__r0
	lda _Tmin
	sta *__r1
	clr *__r2
	lda _Tmax
	sub *__r1
	sta *__r1
	lda *__r2
	sbc *__r0
	sta *__r0
	mov *__r1,*__r3
	mov *__r0,*__r2
	clr *__r1
	clr *__r0
	tst *__r2
	bpl X11
	com *__r1
	com *__r0
X11:
	lda 3,X
	psha
	lda 2,X
	psha
	lda 1,X
	psha
	lda ,X
	psha
	lda *__r3
	psha
	lda *__r2
	psha
	lda *__r1
	psha
	lda *__r0
	psha
	jsr __mul32u
	ais #4
	lda _TADmax+1
	sub _TADmin+1
	sta *__r5
	lda _TADmax
	sbc _TADmin
	sta *__r4
	mov *__r5,*__r7
	mov *__r4,*__r6
	clr *__r5
	clr *__r4
	lda *__r7
	psha
	lda *__r6
	psha
	lda *__r5
	psha
	lda *__r4
	psha
	jsr __divmod32u
	ais #4
	pula
	sta *__r0
	pula
	sta *__r1
	pula
	sta *__r2
	pula
	sta *__r3
	clr *__r6
	clr *__r5
	clr *__r4
	lda _Tmin
	sta *__r7
	lda *__r3
	add *__r7
	sta 3,X
	lda *__r2
	adc *__r6
	sta 2,X
	lda *__r1
	adc *__r5
	sta 1,X
	lda *__r0
	adc *__r4
	sta ,X
	.dbline 154
;      return(tmp); 
	lda 3,x
	sta *__r3
	lda 2,x
	sta *__r2
	tsx
	mov *__r3,*__r1
	mov *__r2,*__r0
	.dbline -2
L31:
	ais #4
	.dbline 0 ; func end
	rts
	.dbsym l tmp 0 l
	.dbsym l adv 6 i
	.dbend
	.dbfunc e ConvertT _ConvertT fi
;            tmp -> 0,X
;            adv -> 6,X
_ConvertT::
	.dbline -1
	ais #-4
	tsx
	.dbline 163
; }
; //-------------------------------------------------------------------------*
; //函数名:ConvertT                                                          *
; //参  数:AD值                                                              *
; //返  回:AD值对应的设定温度                                                *
; //功  能:将AD值转换为设定温度                                              *
; //-------------------------------------------------------------------------*
; INT16U ConvertT(INT16U adv)
; {
	.dbline 166
;      INT32U tmp;    //32位
;      
;      tmp=adv; 
	clra
	sta 1,X
	sta ,X
	lda 7,X
	sta 3,X
	lda 6,X
	sta 2,X
	.dbline 168
;      //按线性关系,将AD值范围分为C_TmpBound等分              
;      tmp=((tmp*C_TmpBound)/C_RADMax)/10+C_MinTmp;
	lda #-72
	psha
	lda #11
	psha
	clra
	psha
	psha
	lda 3,X
	psha
	lda 2,X
	psha
	lda 1,X
	psha
	lda ,X
	psha
	jsr __mul32u
	ais #4
	lda #-52
	psha
	lda #12
	psha
	clra
	psha
	psha
	jsr __divmod32u
	ais #4
	lda #10
	psha
	clra
	psha
	psha
	psha
	jsr __divmod32u
	ais #4
	pula
	sta *__r0
	pula
	sta *__r1
	pula
	sta *__r2
	pula
	add #25
	sta 3,X
	lda *__r2
	adc #0
	sta 2,X
	lda *__r1
	adc #0
	sta 1,X
	lda *__r0
	adc #0
	sta ,X
	.dbline 169
;      return(tmp);      
	lda 3,x
	sta *__r3
	lda 2,x
	sta *__r2
	tsx
	mov *__r3,*__r1
	mov *__r2,*__r0
	.dbline -2
L36:
	ais #4
	.dbline 0 ; func end
	rts
	.dbsym l tmp 0 l
	.dbsym l adv 6 i
	.dbend
	.dbfunc e ConvertTime _ConvertTime fi
;            tmp -> 0,X
;            adv -> 6,X
_ConvertTime::
	.dbline -1
	ais #-4
	tsx
	.dbline 178
; }
; //-------------------------------------------------------------------------*
; //函数名:ConvertTime                                                       *
; //参  数:AD值                                                              *
; //返  回:AD值对应的设定时间                                                *
; //功  能:将AD值转换为设定时间                                              *
; //-------------------------------------------------------------------------*
; INT16U ConvertTime(INT16U adv)
; {
	.dbline 181
;      INT32U tmp;  //32位
; 
;      tmp=adv; 
	clra
	sta 1,X
	sta ,X
	lda 7,X
	sta 3,X
	lda 6,X
	sta 2,X
	.dbline 183
;      //按线性关系,将AD值范围分为C_TimBound等分         
;      tmp=((tmp*C_TimBound)/C_RADMax/10+C_MinTim); 
	lda #112
	psha
	lda #23
	psha
	clra
	psha
	psha
	lda 3,X
	psha
	lda 2,X
	psha
	lda 1,X
	psha
	lda ,X
	psha
	jsr __mul32u
	ais #4
	lda #-52
	psha
	lda #12
	psha
	clra
	psha
	psha
	jsr __divmod32u
	ais #4
	lda #10
	psha
	clra
	psha
	psha
	psha
	jsr __divmod32u
	ais #4
	pula
	sta *__r0
	pula
	sta *__r1
	pula
	sta *__r2
	pula
	add #30
	sta 3,X
	lda *__r2
	adc #0
	sta 2,X
	lda *__r1
	adc #0
	sta 1,X
	lda *__r0
	adc #0
	sta ,X
	.dbline 184
;      return(tmp);      //显示可精确到0.1分,此处计时只精确到1分
	lda 3,x
	sta *__r3
	lda 2,x
	sta *__r2
	tsx
	mov *__r3,*__r1
	mov *__r2,*__r0
	.dbline -2
L37:
	ais #4
	.dbline 0 ; func end
	rts
	.dbsym l tmp 0 l
	.dbsym l adv 6 i
	.dbend
	.dbfunc e LightAlarm _LightAlarm fV
;              i -> 0,X
;              j -> 1,X
;          Light -> 4,X
_LightAlarm::
	.dbline -1
	ais #-2
	tsx
	.dbline 197
; /////////////////////////////////////////
; //return(2);
; //////////////////////////////////////////////////////////     
; }
; 
; //-------------------------------------------------------------------------*
; //函数名:LightAlarm                                                        *
; //参  数:无                                                                *
; //返  回:无                                                                *
; //功  能:切掉Bake炉电源、通过不同颜色灯闪,提示进一步操作                  *
; //-------------------------------------------------------------------------*
; void LightAlarm(INT8U Light)
; {
	.dbline 201
;    INT8U  i,j;
;    
;    //Bake炉内温度异常,切掉Bake炉电源
;    SwitchOutput(C_BakeSw,0);
	clra
	psha
	lda #3
	psha
	jsr _SwitchOutput
	ais #2
	.dbline 203
;    //绿灯灭
;    SwitchOutput(C_GreenLight,0);
	clra
	psha
	lda #1
	psha
	jsr _SwitchOutput
	ais #2
	tsx
	.dbline 206
;    
;    //灯亮
;    SwitchOutput(Light,1);
	lda #1
	psha
	lda 4,X
	psha
	jsr _SwitchOutput
	ais #2
	tsx
	.dbline 209
;          
;    //延时
;    for(i=0;i<200;i++)
	clr ,X
	bra L42
L39:
	.dbline 210
	clr 1,X
	bra L46
L43:
	.dbline 210
L44:
	.dbline 210
	inc 1,X
L46:
	.dbline 210
	lda 1,X
	cmp #-56
	blo L43
L40:
	.dbline 209
	inc ,X
L42:
	.dbline 209
	lda ,X
	cmp #-56
	blo L39
	.dbline 213
;       for(j=0;j<200;j++);
;           
;    //灯灭
;    SwitchOutput(Light,0);
	clra
	psha
	lda 4,X
	psha
	jsr _SwitchOutput
	ais #2
	tsx
	.dbline 216
;          
;    //延时
;    for(i=0;i<200;i++)
	clr ,X
	bra L50
L47:
	.dbline 217
	clr 1,X
	bra L54
L51:
	.dbline 217
L52:
	.dbline 217
	inc 1,X
L54:
	.dbline 217
	lda 1,X
	cmp #-56
	blo L51
L48:
	.dbline 216
	inc ,X
L50:
	.dbline 216
	lda ,X
	cmp #-56
	blo L47
	.dbline -2
L38:
	ais #2
	.dbline 0 ; func end
	rts
	.dbsym l i 0 c
	.dbsym l j 1 c
	.dbsym l Light 4 c
	.dbend
	.dbfunc e ReFlash _ReFlash fV
_ReFlash::
	.dbline -1
	.dbline 223
;       for(j=0;j<200;j++);
; }
; 
; 
; //校准当前温度,或修改MCU号,写flash函数
; void ReFlash(void)
; {
	.dbline 225
;    
;    DisableMCUInterrupt();
	SEI
	.dbline 226
;    EraseFlash(0x8000);	//擦除0x8000为始址的一个页
	ldhx #-32768
	pshx
	pshh
	jsr _EraseFlash
	ais #2
	.dbline 227
;    WriteFlash(0x8000);
	ldhx #-32768
	pshx
	pshh
	jsr _WriteFlash
	ais #2
	tsx
	.dbline 228
;    EnableMCUInterrupt();
	CLI
	.dbline -2
L55:
	.dbline 0 ; func end
	rts
	.dbend
	.area bss
	.dbfile Main.c
_FlashFlag::
	.blkb 1
	.dbfile e:\04 瑞萨温控系统\04 软件\bake_mcu/Includes.h
	.dbsym e FlashFlag _FlashFlag c
_CoolFlag::
	.blkb 1
	.dbsym e CoolFlag _CoolFlag c
_StateFlag::
	.blkb 1
	.dbsym e StateFlag _StateFlag c
_MntTim::
	.blkb 2
	.dbsym e MntTim _MntTim i
_ScdTim::
	.blkb 1
	.dbsym e ScdTim _ScdTim c
_Infrared::
	.blkb 2
	.dbsym e Infrared _Infrared i
_Time::
	.blkb 2
	.dbsym e Time _Time i
_CurtTime::
	.blkb 2
	.dbsym e CurtTime _CurtTime i
_CurtTmp::
	.blkb 2
	.dbsym e CurtTmp _CurtTmp i
_Temper::
	.blkb 2
	.dbsym e Temper _Temper i
_ADCurtTmp::
	.blkb 2
	.dbsym e ADCurtTmp _ADCurtTmp i

⌨️ 快捷键说明

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