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

📄 main.s

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 S
📖 第 1 页 / 共 3 页
字号:
	lda #<_BigNumCode
	psha
	lda #>_BigNumCode
	psha
	clra
	psha
	psha
	jsr _LcdShBigNum
	ais #6
	tsx
	.dbline 104
;   
;     }
L13:
	.dbline 107
;         
;      //3 接收到PC读数据的请求就发送显示参数
;      if(SendFlag==1)  
	lda _SendFlag
	cmp #1
	bne L16
	.dbline 108
;      {
	.dbline 110
;      
;          SCISend1('S');              //帧头'S'
	lda #83
	psha
	jsr _SCISend1
	ais #1
	.dbline 111
;          SCISend1(CurtTmp>>8);       //当前温度
	lda _CurtTmp
	psha
	jsr _SCISend1
	ais #1
	.dbline 112
;          SCISend1(CurtTmp);
	lda _CurtTmp+1
	psha
	jsr _SCISend1
	ais #1
	.dbline 113
;          SCISend1(Temper>>8);        //设定温度
	lda _Temper
	psha
	jsr _SCISend1
	ais #1
	.dbline 114
;          SCISend1(Temper);
	lda _Temper+1
	psha
	jsr _SCISend1
	ais #1
	.dbline 115
;          SCISend1(CurtTime>>8);      //当前时间
	lda _CurtTime
	psha
	jsr _SCISend1
	ais #1
	.dbline 116
;          SCISend1((INT8U)CurtTime);
	lda _CurtTime+1
	psha
	jsr _SCISend1
	ais #1
	.dbline 117
;          SCISend1(Time>>8);          //设定时间
	lda _Time
	psha
	jsr _SCISend1
	ais #1
	.dbline 118
;          SCISend1(Time);
	lda _Time+1
	psha
	jsr _SCISend1
	ais #1
	.dbline 119
;          SCISend1(ScdTim);           //当前秒数,供PC显示横坐标刻度
	lda _ScdTim
	psha
	jsr _SCISend1
	ais #1
	tsx
	.dbline 120
;          SCISend1(sum>>8);    //当前温度的AD值
	lda 6,X
	psha
	jsr _SCISend1
	ais #1
	tsx
	.dbline 121
;          SCISend1(sum);
	lda 7,X
	psha
	jsr _SCISend1
	ais #1
	.dbline 122
;          SCISend1('E');              //帧尾'E'
	lda #69
	psha
	jsr _SCISend1
	ais #1
	tsx
	.dbline 123
;          SendFlag=0;                 //清标志     
	clra
	sta _SendFlag
	.dbline 124
;      } 
L16:
	.dbline 131
; 
; 
; 
; 
; 
;      //4 Bake炉根据不同状态,作不同处理
;      switch(StateFlag)
	clr ,X
	lda _StateFlag
	sta 1,X
	lda ,X
	bne X0
	lda 1,X
	cmp #1
	beq L21
X0:
	lda ,X
	bne X1
	lda 1,X
	cmp #2
	beq L22
X1:
	lda ,X
	bne X2
	lda 1,X
	cmp #3
	bne X10
	jmp L25
X10:
X2:
	lda ,X
	bne X3
	lda 1,X
	cmp #4
	bne X11
	jmp L30
X11:
X3:
	lda ,X
	bne X4
	lda 1,X
	cmp #5
	bne X12
	jmp L33
X12:
X4:
	lda ,X
	bne X5
	lda 1,X
	cmp #6
	bne X13
	jmp L36
X13:
X5:
	lda ,X
	bne X6
	lda 1,X
	cmp #7
	bne X14
	jmp L39
X14:
X6:
	jmp L18
X7:
	.dbline 132
;      {
L21:
	.dbline 134
;        case 1://状态1:绿灯亮,Bake炉电源接通,其电源指示灯亮
;               SwitchOutput(C_GreenLight,1); //系统开始工作后,绿灯常亮
	lda #1
	psha
	psha
	jsr _SwitchOutput
	ais #2
	.dbline 135
;               SwitchOutput(C_BakeSw,1);     //使Bake炉电源接通
	lda #1
	psha
	lda #3
	psha
	jsr _SwitchOutput
	ais #2
	.dbline 136
;               LightOut(1);                  //Bake炉电源指示灯亮
	lda #1
	psha
	jsr _LightOut
	ais #1
	tsx
	.dbline 138
; //              BakeFlag=1;
;               StateFlag=2;                  //进入状态2
	lda #2
	sta _StateFlag
	.dbline 139
;               break;
	jmp L19
L22:
	.dbline 141
;        case 2://状态2:等待炉内温度达到设定值
;               if(CurtTmp>=Temper)   //温度达到设定值
	lda _Temper+1
	sta *__r1
	lda _Temper
	sta *__r0
	lda _CurtTmp+1
	sta *__r3
	lda _CurtTmp
	sta *__r2
	ldhx *__r2
	cphx *__r0
	tsx
	bhs X15
	jmp L19
X15:
	.dbline 142
;               {
	.dbline 143
;                 InitTime=MntTim;    //记录此刻时间,作为加热时间的基值
	lda _MntTim
	sta 2,X
	lda _MntTim+1
	sta 3,X
	.dbline 144
;                 StateFlag=3;        //进入状态3
	lda #3
	sta _StateFlag
	.dbline 145
;               }
	.dbline 146
;               break;
	jmp L19
L25:
	.dbline 148
;        case 3://状态3:如果当前炉内温度偏离设定温度过大,则报警提示复位系统
;               if(CurtTmp>Temper)    //允许正负偏一定值,tmp为两者的差值
	lda _Temper+1
	sta *__r1
	lda _Temper
	sta *__r0
	lda _CurtTmp+1
	sta *__r3
	lda _CurtTmp
	sta *__r2
	ldhx *__r2
	cphx *__r0
	tsx
	bls L26
	.dbline 149
;                  tmp=CurtTmp-Temper;
	lda _CurtTmp+1
	sub _Temper+1
	sta 5,X
	lda _CurtTmp
	sbc _Temper
	sta 4,X
	bra L27
L26:
	.dbline 151
;               else
;                  tmp=Temper-CurtTmp;
	lda _Temper+1
	sub _CurtTmp+1
	sta 5,X
	lda _Temper
	sbc _CurtTmp
	sta 4,X
L27:
	.dbline 152
;               if(tmp>C_TmpPC)  //如果当前温度与设定温度偏差大于5,作异常处理
	lda 5,X
	sta *__r1
	lda 4,X
	sta *__r0
	ldhx *__r0
	cphx #10
	tsx
	bls L28
	.dbline 153
;               {
	.dbline 154
;                  SwitchOutput(C_BakeSw,0);    //断开Bake炉电源
	clra
	psha
	lda #3
	psha
	jsr _SwitchOutput
	ais #2
	.dbline 155
;                  LightOut(0);                 //Bake炉电源指示灯灭
	clra
	psha
	jsr _LightOut
	ais #1
	.dbline 157
; //                 BakeFlag=0;
;                  SwitchOutput(C_GreenLight,0);//绿灯灭
	clra
	psha
	lda #1
	psha
	jsr _SwitchOutput
	ais #2
	tsx
	.dbline 158
;                  StateFlag=6;                 //进入状态6
	lda #6
	sta _StateFlag
	.dbline 159
;               }
	jmp L19
L28:
	.dbline 161
;               else 
;               {
	.dbline 162
;                  StateFlag=4;                 //无异常,进入状态4
	lda #4
	sta _StateFlag
	.dbline 163
;               }   
	.dbline 164
;               break;
	jmp L19
L30:
	.dbline 166
;        case 4://状态4:如果加热到设定时间,黄灯闪,提示将加热物体拿出放入冷却箱
;               CurtTime=MntTim-InitTime;
	lda _MntTim+1
	sub 3,X
	sta _CurtTime+1
	lda _MntTim
	sbc 2,X
	sta _CurtTime
	.dbline 167
;               if(CurtTime>=Time)     //加热时间到,黄灯闪提示,直到Cool阀开
	lda _Time+1
	sta *__r1
	lda _Time
	sta *__r0
	lda _CurtTime+1
	sta *__r3
	lda _CurtTime
	sta *__r2
	ldhx *__r2
	cphx *__r0
	tsx
	blo L31
	.dbline 168
;               {
	.dbline 169
;                  LightAlarm(C_YellowLight);   //断开Bake阀、绿灯灭、黄灯闪
	lda #2
	psha
	jsr _LightAlarm
	ais #1
	tsx
	.dbline 170
;                  StateFlag=5;        //进入状态5
	lda #5
	sta _StateFlag
	.dbline 171
;               }
	bra L19
L31:
	.dbline 173
;               else
;               {   
	.dbline 174
;                  StateFlag=3;        //加热时间未到,回状态3,边判边等
	lda #3
	sta _StateFlag
	.dbline 175
;               }   
	.dbline 176
;               break;  
	bra L19
L33:
	.dbline 178
;        case 5://状态5:冷却箱中无物体放入,黄灯继续闪
;               if(Infrared>C_Exist)
	lda _Infrared+1
	sta *__r1
	lda _Infrared
	sta *__r0
	ldhx *__r0
	cphx #160
	tsx
	bls L34
	.dbline 179
;                  StateFlag=4;        //无物体放入,回状态4,黄灯继续闪 
	lda #4
	sta _StateFlag
	bra L19
L34:
	.dbline 181
;               else
;                  StateFlag=7;        //有物体放入,去状态7
	lda #7
	sta _StateFlag
	.dbline 182
;               break;
	bra L19
L36:
	.dbline 184
;        case 6://状态6:Bake炉内温度异常后红灯报警,直至有复位开关按下
;               SwitchOutput(C_RedLight,1);  //红灯亮并报警
	lda #1
	psha
	lda #5
	psha
	jsr _SwitchOutput
	ais #2
	tsx
	.dbline 185
;               if(ResetFlag==1)             
	lda _ResetFlag
	cmp #1
	bne L19
	.dbline 186
;               {
	.dbline 187
;                  ResetFlag=0;
	clra
	sta _ResetFlag
	.dbline 188
;                  SwitchOutput(C_RedLight,0);
	clra
	psha
	lda #5
	psha
	jsr _SwitchOutput
	ais #2
	tsx
	.dbline 189
;                  goto MainLoop;
	jmp L2
X8:
	.dbline 191
;               }
;               break;
L39:
	.dbline 193
;        case 7://状态7:Bake炉加热时间到后,等Bake炉电源重启按钮按下
;               if(BakeFlag==1)
	lda _BakeFlag
	cmp #1
	bne L19
	.dbline 194
;               {
	.dbline 195
;                  BakeFlag=0;
	clra
	sta _BakeFlag
	.dbline 196
;                  StateFlag=1;  
	lda #1
	sta _StateFlag
	.dbline 197
;               }
	.dbline 198
;               break;
L18:
L19:
	.dbline 202
;      }//switch
;      
;      //3 冷却箱的处理
;      if(Infrared<=C_Exist && CoolFlag==0)      //从无到有
	lda _Infrared+1
	sta *__r1
	lda _Infrared
	sta *__r0
	ldhx *__r0
	cphx #160
	tsx
	bhi L42
	lda _CoolFlag
	bne L42
	.dbline 203
;      {
	.dbline 204
;         SwitchOutput(C_CoolSw,1);              //打开冷却阀
	lda #1
	psha
	lda #4
	psha
	jsr _SwitchOutput
	ais #2
	tsx
	.dbline 205
;         CoolFlag=1;        //有物体放入置此标志
	lda #1
	sta _CoolFlag
	.dbline 206
;      }
	bra L43
L42:
	.dbline 207
;      else  if(Infrared>C_Exist && CoolFlag==1) //从有到无
	lda _Infrared+1
	sta *__r1
	lda _Infrared
	sta *__r0
	ldhx *__r0
	cphx #160
	tsx
	bls L44
	lda _CoolFlag
	cmp #1
	bne L44
	.dbline 208
;      {
	.dbline 209
;         SwitchOutput(C_CoolSw,0);             //关冷却阀
	clra
	psha
	lda #4
	psha
	jsr _SwitchOutput
	ais #2
	tsx
	.dbline 210
;         CoolFlag=0;        //没有物体放入清此标志
	clra
	sta _CoolFlag
	.dbline 211
;      }
L44:
L43:
	.dbline 213
L4:
	.dbline 62
	jmp L3
X9:
	.dbline -2
L1:
	ais #9
	.dbline 0 ; func end
	rts
	.dbsym l InitTime 2 i
	.dbsym l tmp 4 i
	.dbsym l sum 6 i
	.dbsym l i 8 c
	.dbend
	.dbfunc e ConvertCT _ConvertCT fi
;              x -> 0,X
;              y -> 2,X
;            tmp -> 4,X
;              b -> 8,X
;              k -> 12,X
;              i -> 16,X
;            adv -> 19,X
_ConvertCT::
	.dbline -1
	ais #-17
	tsx
	.dbline 229
;  
;    }//while    
; 
; }
; 
; 
; //**************************************************************************
; //                              内部函数                                   *
; //**************************************************************************
; 
; //-------------------------------------------------------------------------*
; //函数名:ConvertCT                                                         *
; //参  数:AD值                                                              *
; //返  回:AD值对应的当前温度                                                *
; //功  能:将AD值转换为当前温度                                              *
; //-------------------------------------------------------------------------*
; INT16U ConvertCT(INT16U adv)
; {
	.dbline 233
;      INT8U i;
;      INT16U x,y;
;      INT32U k,b,tmp;
;      for(i=9;i>=0;i--)
	lda #9
	sta 16,X
	jmp L50
L47:
	.dbline 234
;      {
	.dbline 235
;          if(ADtoPHY_X[i]!=0 && adv>=ADtoPHY_X[i])
	clr *__r0
	lda 16,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add #<_ADtoPHY_X
	sta *__r1
	lda *__r0
	adc #>_ADtoPHY_X
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta *__r1
	lda ,x
	sta *__r0
	ldhx *__r0
	cphx #0
	tsx
	bne X16
	jmp L51
X16:
	lda 20,X
	sta *__r3
	lda 19,X
	sta *__r2
	ldhx *__r2
	cphx *__r0
	tsx
	bhs X17
	jmp L51
X17:
	.dbline 236
;          {
	.dbline 237
;             k=ADtoPHY_k1[i];
	clr *__r0
	lda 16,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add #<_ADtoPHY_k1
	sta *__r1
	lda *__r0
	adc #>_ADtoPHY_k1
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta *__r1
	lda ,x
	tsx
	sta *__r0
	clra
	sta 13,X
	sta 12,X
	lda *__r1
	sta 15,X
	lda *__r0
	sta 14,X
	.dbline 238
;             k=k*1000+ADtoPHY_k2[i];
	clr *__r0
	lda 16,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add #<_ADtoPHY_k2
	sta *__r1
	lda *__r0
	adc #>_ADtoPHY_k2
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta *__r1
	lda ,x
	tsx
	sta *__r0
	mov *__r1,*__r3
	mov *__r0,*__r2
	clr *__r1
	clr *__r0
	lda #-24
	psha
	lda #3
	psha
	clra
	psha
	psha
	lda 15,X
	psha
	lda 14,X
	psha
	lda 13,X
	psha
	lda 12,X
	psha
	jsr __mul32u
	ais #4
	pula
	sta *__r4
	pula
	sta *__r5
	pula
	sta *__r6
	pula
	add *__r3
	sta 15,X
	lda *__r6
	adc *__r2
	sta 14,X
	lda *__r5
	adc *__r1
	sta 13,X
	lda *__r4
	adc *__r0
	sta 12,X
	.dbline 239
;             b=ADtoPHY_b1[i];
	clr *__r0
	lda 16,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add #<_ADtoPHY_b1
	sta *__r1
	lda *__r0
	adc #>_ADtoPHY_b1
	sta *__r0
	ldhx *__r0
	lda 1,x
	sta *__r1
	lda ,x
	tsx
	sta *__r0
	clra
	sta 9,X
	sta 8,X
	lda *__r1
	sta 11,X
	lda *__r0
	sta 10,X
	.dbline 240
;             b=b*1000+ADtoPHY_b2[i];
	clr *__r0
	lda 16,X
	sta *__r1
	lsl *__r1
	rol *__r0
	lda *__r1
	add #<_ADtoPHY_b2
	sta *__r1
	lda *__r0
	adc #>_ADtoPHY_b2

⌨️ 快捷键说明

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