main.s
来自「为日本瑞萨苏州分公司做的一个温控系统」· S 代码 · 共 1,434 行 · 第 1/2 页
S
1,434 行
.module Main.c
.area data
_LcdShowBuff::
.blkb 64
.area idata
.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
.byte 199,224,208,199,191,198,188,188,211,208,207,222,185,171,203,190
.area data
.dbfile e:\04 瑞萨温控系统\04 软件\bake_mcu/Includes.h
.dbsym e LcdShowBuff _LcdShowBuff A[64:64]c
.area memory(abs)
.org 0x8000
.dbfile e:\04 瑞萨温控系统\04 软件\bake_mcu/Includes.h
_Tmin::
.byte 25
.dbsym e Tmin _Tmin c
_Tmax::
.byte 180
.dbsym e Tmax _Tmax c
_TADmin::
.word 212
.dbsym e TADmin _TADmin i
_TADmax::
.word 565
.dbsym e TADmax _TADmax i
_MCUno::
.byte 131
.dbsym e MCUno _MCUno c
.area lit
.area memory(abs)
.org 0x8080
.dbfile e:\04 瑞萨温控系统\04 软件\bake_mcu/Includes.h
_BigNumCode::
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 896
.word 3168
.word 2096
.word 6192
.word 12312
.word 12312
.word 12312
.word 12312
.word 28700
.word 28700
.word 28700
.word 28700
.word 28700
.word 12312
.word 12312
.word 12312
.word 12312
.word 6192
.word 6192
.word 3168
.word 896
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 64
.word 960
.word 960
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 448
.word 4088
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 1984
.word 8176
.word 12408
.word 24636
.word 16444
.word 28
.word 28
.word 28
.word 24
.word 56
.word 48
.word 96
.word 64
.word 192
.word 384
.word 768
.word 1536
.word 3074
.word 6150
.word 16380
.word 32764
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 1984
.word 4080
.word 6264
.word 8248
.word 24
.word 24
.word 16
.word 32
.word 64
.word 496
.word 2040
.word 248
.word 60
.word 28
.word 12
.word 12
.word 12
.word 8
.word 14352
.word 15392
.word 8128
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 48
.word 112
.word 240
.word 240
.word 368
.word 368
.word 624
.word 1136
.word 1136
.word 2160
.word 6256
.word 4208
.word 8304
.word 24688
.word 32766
.word 32766
.word 112
.word 112
.word 112
.word 112
.word 112
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 1016
.word 2032
.word 2032
.word 2048
.word 2048
.word 7680
.word 8064
.word 16352
.word 1008
.word 240
.word 120
.word 56
.word 24
.word 24
.word 24
.word 24
.word 16
.word 48
.word 12384
.word 16320
.word 7936
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 60
.word 224
.word 896
.word 1792
.word 3584
.word 7168
.word 6144
.word 14336
.word 13280
.word 31856
.word 28728
.word 28732
.word 28700
.word 28700
.word 28700
.word 28700
.word 12316
.word 14360
.word 6192
.word 3184
.word 1984
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 8190
.word 16382
.word 16380
.word 8204
.word 16412
.word 24
.word 24
.word 56
.word 48
.word 48
.word 112
.word 96
.word 96
.word 224
.word 192
.word 192
.word 448
.word 384
.word 384
.word 896
.word 768
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 2016
.word 3128
.word 6168
.word 14364
.word 14364
.word 14364
.word 15416
.word 7728
.word 3936
.word 1920
.word 992
.word 1520
.word 3320
.word 6264
.word 14396
.word 14364
.word 14364
.word 14364
.word 7192
.word 3632
.word 2016
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 1984
.word 3184
.word 6200
.word 12316
.word 28700
.word 28686
.word 28686
.word 28686
.word 28686
.word 30734
.word 14350
.word 7198
.word 4076
.word 28
.word 56
.word 48
.word 112
.word 224
.word 384
.word 3840
.word 30720
.word 0
.word 0
.word 0
.word 0
.word 0
.dbsym e BigNumCode _BigNumCode A[640:320]i
.area lit
.area text
.dbfile e:\04 瑞萨温控系统\04 软件\bake_mcu/Includes.h
.dbfile Main.c
.dbfunc e main _main fV
; InitTime -> 2,X
; tmp -> 3,X
; ADValue -> 5,X
_main::
.dbline -1
ais #-27
tsx
.dbline 26
; //-------------------------------------------------------------------------*
; //工程文件名:Bake.prj *
; //硬件连接: *
; // TLC2543的CS,I/O CLOCK,DATA INPUT,DATA OUT分别接PTC0,PTD1~PTD3 *
; // LCD的数据口为PTB0~PTB7,控制口为PTC1~PTC4 *
; // 报警灯:红灯及蜂鸣器、绿灯、黄灯、Bake阀、Cool阀分别接PTA的第0~4脚 *
; // 温度电位器、时间电位器、热敏电阻、红外传感器分别接TLC2543的第0~3脚
; //程序描述:由TLC2543采集来的AD值确定设定时间、设定温度、当前温度和 *
; // Cool箱中是否有物体 *
; // 判断如果Bake炉内温度变化超过设定温度一定范围,则红灯闪并报警 *
; // 否则等加热到设定时间后黄灯闪,切掉Bake炉电源,提示取出加热物体 *
; // 放入Cool箱,冷却阀闭合,当物体移出Cool箱后,冷却阀断开 *
; //日 期:2007.04.25 *
; //-------------------------------------------------------------------------*
; #include "Includes.h" //总头文件
;
; //内部函数声明
; void LightAlarm(INT8U Light); //通过不同颜色灯闪,提示进一步操作
; INT16U ConvertCT(INT16U adv); //将AD值转换当前温度
; INT16U ConvertT(INT16U adv); //将AD值转换设定温度
; INT16U ConvertTime(INT16U adv); //将AD值转换设定时间
; void ReFlash(void);
;
; //主函数
; void main()
; {
.dbline 32
; INT16U ADValue[11]; //11路A/D采集数据
; INT8U InitTime; //开始计时的基值
; INT16U tmp;
;
; //初始化
; DisableMCUInterrupt(); //禁止总中断
SEI
.dbline 33
; MCUInit(); //芯片初始化
jsr _MCUInit
.dbline 34
; SPIInit(); //SPI初始化
jsr _SPIInit
.dbline 35
; LCDInit(); //Lcd初始化
jsr _LCDInit
.dbline 36
; SCIInit(); //串口初始化
jsr _SCIInit
.dbline 37
; Timer1init(); //定时器1初始化
jsr _Timer1init
.dbline 38
; SwitchOutput_Init(); //开关量输出初始化
jsr _SwitchOutput_Init
tsx
.dbline 39
; EnTm1OverflowInt(); //开放Timer1溢出中断
bset #6,0x20
.dbline 40
; EnableSCIReInt(); //开放串行中断
bset #5,0x14
.dbline 41
; EnableMCUInterrupt(); //开放总中断
CLI
L2:
.dbline 44
; MainLoop:
; //初始化标志
; StateFlag=1; //初始状态为1:开绿灯、Bake炉
lda #1
sta *_StateFlag
.dbline 45
; CoolFlag=0; //开始工作时,Cool箱中是没物体的
clr *_CoolFlag
.dbline 46
; FlashFlag=0; //需要校准当前温度或修改MCU号时在串行中断里置1
clr *_FlashFlag
jmp L4
L3:
.dbline 50
;
; //主循环
; while(1)
; {
.dbline 52
; //1 采集A/D值,转换为设定温度、设定时间、当前温度和红外传感器值
; ADC11P(0,ADValue);
aix #5
pshx
pshh
clra
psha
jsr _ADC11P
ais #3
tsx
.dbline 53
; CurtTmp=ConvertCT(ADValue[0]); //第0路为当前温度
lda 6,X
psha
lda 5,X
psha
jsr _ConvertCT
ais #2
tsx
mov *__r0,*_CurtTmp
mov *__r1,*_CurtTmp+1
.dbline 54
; Temper=ConvertT(ADValue[1]); //第1路为设定温度
lda 8,X
psha
lda 7,X
psha
jsr _ConvertT
ais #2
tsx
mov *__r0,*_Temper
mov *__r1,*_Temper+1
.dbline 55
; Time=ConvertTime(ADValue[2]); //第2路为设定时间
lda 10,X
psha
lda 9,X
psha
jsr _ConvertTime
ais #2
tsx
mov *__r0,*_Time
mov *__r1,*_Time+1
.dbline 56
; Infrared=ADValue[3]; //第3路为红外传感器的值
lda 11,X
sta *_Infrared
lda 12,X
sta *_Infrared+1
.dbline 58
;
; ADCurtTmp=ADValue[0]; //校准当前温度时写flash用
lda 5,X
sta *_ADCurtTmp
lda 6,X
sta *_ADCurtTmp+1
.dbline 59
; if(FlashFlag==1)
lda *_FlashFlag
cmp #1
bne L9
.dbline 60
; ReFlash();
jsr _ReFlash
tsx
L9:
.dbline 63
;
; //2 根据不同状态,作不同处理
; switch(StateFlag)
clr ,X
lda *_StateFlag
sta 1,X
lda ,X
bne X0
lda 1,X
cmp #1
beq L14
X0:
lda ,X
bne X1
lda 1,X
cmp #2
beq L15
X1:
lda ,X
bne X2
lda 1,X
cmp #3
beq L18
X2:
lda ,X
bne X3
lda 1,X
cmp #4
bne X8
jmp L23
X8:
X3:
lda ,X
bne X4
lda 1,X
cmp #5
bne X9
jmp L26
X9:
X4:
jmp L11
X5:
.dbline 64
; {
L14:
.dbline 66
; case 1://状态1:绿灯亮,Bake炉通电工作
; SwitchOutput(C_GreenLight,1); //系统开始工作后,绿灯常亮
lda #1
psha
psha
jsr _SwitchOutput
ais #2
.dbline 67
; SwitchOutput(C_BakeSw,1); //使Bake炉开始工作
lda #1
psha
lda #3
psha
jsr _SwitchOutput
ais #2
tsx
.dbline 68
; StateFlag=2; //进入状态2
lda #2
sta *_StateFlag
.dbline 69
; break;
jmp L12
L15:
.dbline 71
; case 2://状态2:等待炉内温度达到设定值
; if(CurtTmp>=Temper) //温度达到设定值
ldhx *_CurtTmp
cphx *_Temper
tsx
bhs X10
jmp L12
X10:
.dbline 72
; {
.dbline 73
; InitTime=MntTim; //记录此刻时间,作为加热时间的基值
lda *_MntTim+1
sta 2,X
.dbline 74
; StateFlag=3; //进入状态3
lda #3
sta *_StateFlag
.dbline 75
; }
.dbline 76
; break;
jmp L12
L18:
.dbline 78
; case 3://状态3:如果当前炉内温度偏离设定温度过大,则报警提示关闭系统
; if(CurtTmp>Temper) //允许正负偏一定值,tmp为两者的差值
ldhx *_CurtTmp
cphx *_Temper
tsx
bls L19
.dbline 79
; tmp=CurtTmp-Temper;
lda *_CurtTmp+1
sub *_Temper+1
sta 4,X
lda *_CurtTmp
sbc *_Temper
sta 3,X
bra L20
L19:
.dbline 81
; else
; tmp=Temper-CurtTmp;
lda *_Temper+1
sub *_CurtTmp+1
sta 4,X
lda *_Temper
sbc *_CurtTmp
sta 3,X
L20:
.dbline 82
; if(tmp>C_TmpPC) //如果当前温度与设定温度偏差大于5,作异常处理
lda 4,X
sta *__r1
lda 3,X
sta *__r0
ldhx *__r0
cphx #5
tsx
bls L21
.dbline 83
; {
.dbline 84
; SwitchOutput(C_BakeSw,0); //断开Bake阀
clra
psha
lda #3
psha
jsr _SwitchOutput
ais #2
.dbline 85
; SwitchOutput(C_GreenLight,0);//绿灯灭
clra
psha
lda #1
psha
jsr _SwitchOutput
ais #2
.dbline 86
; SwitchOutput(C_RedLight,1); //红灯亮并报警,直到掉电
lda #1
psha
lda #5
psha
jsr _SwitchOutput
ais #2
tsx
.dbline 87
; }
jmp L12
L21:
.dbline 89
; else
; {
.dbline 90
; StateFlag=4; //进入状态4
lda #4
sta *_StateFlag
.dbline 91
; }
.dbline 92
; break;
jmp L12
L23:
.dbline 94
; case 4://状态4:如果加热到设定时间,黄灯闪
; CurtTime=MntTim-InitTime;
clr *__r0
lda 2,X
sta *__r1
lda *_MntTim+1
sub *__r1
sta *_CurtTime+1
lda *_MntTim
sbc *__r0
sta *_CurtTime
.dbline 95
; if(CurtTime>=Time) //加热时间到,报警灯提示,直到Cool阀开
ldhx *_CurtTime
cphx *_Time
tsx
blo L24
.dbline 96
; {
.dbline 97
; LightAlarm(C_YellowLight); //断开Bake阀、绿灯灭、黄灯闪
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?