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 + -
显示快捷键?