;== Temperature Controller ==
;== MCU: HT48R30A-1 ==
;== OSC: Crystal 8.0MHZ ==
;== NTC Thermal Resistance 503ET 50K B=4055 ==
;== 文件源自 2004-3-9,12:49
;=============================================================
;EEPROM MAP:
;3,4 Set Temperature
;5,6 Set Low limit Temperature
;7,8 Set High Limit Temperature
;123-126 Memory ID
;I/O MAP:
;====================================================
#INCLUDE HT48R30A-1.INC
;------------------------------------------------------------------------------------------------
DATA .SECTION 'DATA'
ACC_Buff EQU [40H]
Status_Buff EQU [41H]
ChipID1 EQU [42H]
Common1Data EQU [43H]
Common2Data EQU [44H]
Common3Data EQU [45H]
_156HzCT EQU [46H]
LCDCommCT EQU [47H]
IntKeyCode EQU [48H]
SysF1 EQU [49H]
ScanKeyF EQU SysF1.0
SetF EQU SysF1.1
FlashF EQU SysF1.2
KeyHoldF EQU SysF1.3
DispF EQU SysF1.4
MeasureT_F EQU SysF1.5
DispMinusF EQU SysF1.6
StandRT_F EQU SysF1.7
SetTemp1 EQU [4AH] ;-20=0-19.9===1 99.9===1199=4AF
SetTemp2 EQU [4BH] ;
SetTempAddr EQU 4BH
FlashCT EQU [4CH]
SplitCT EQU [4DH]
KeyCode EQU [4EH]
KeyCodeBuff EQU [4FH]
KeyCount EQU [50H]
ExitSetCT EQU [51H]
StandyCT1 EQU [52H]
StandyCT2 EQU [53H]
PWMHigh EQU [54H]
PWMLow EQU [55H]
PWMRunCT EQU [56H]
PWMPoint EQU [57H]
HighLimit1 EQU [58H]
HighLimit2 EQU [59H]
HighTempAddr EQU 59H
LowLimit1 EQU [5AH]
LowLimit2 EQU [5BH]
LowTempAddr EQU 5BH
SetMode EQU [5CH] ;0 Set Temperature 1: Set Low Limit 2:Set High Limit
TemperatureL EQU [60H]
TemperatureH EQU [61H]
Temperature1L EQU [62H]
Temperature1H EQU [63H]
Temperature2L EQU [64H]
Temperature2H EQU [65H]
Temperature3L EQU [66H]
Temperature3H EQU [67H]
ALU1 EQU [68H]
ALU2 EQU [69H]
ALU3 EQU [6AH]
ALU4 EQU [6BH]
ALU5 EQU [6CH]
ALU6 EQU [6DH]
ALU7 EQU [6EH]
ALU8 EQU [6FH]
WordData24C01 EQU [70H]
SysF2 EQU [71H]
WriteSetTempF EQU SysF2.0
MinusF EQU SysF2.1
PWMLevelF EQU SysF2.2
PIDCalF EQU SysF2.3
LimitCheckF EQU SysF2.4
EtBuff0L EQU [72H]
EtBuff0H EQU [73H]
EtBuff1L EQU [74H]
EtBuff1H EQU [75H]
EtBuff2L EQU [76H]
EtBuff2H EQU [77H]
KpQuotiety EQU [78H]
KiQuotiety EQU [79H]
KdQuotiety EQU [7AH]
AdjQuotiety0 EQU [7BH]
AdjQuotiety1 EQU [7CH]
AdjQuotiety2 EQU [7DH]
SDA_AT24C01 EQU PB.0
SDA_AT24C01Dir EQU PBC.0
SCL_AT24C01 EQU PB.1
ControlPin EQU PB.2
LimitPin EQU PB.3
CODE .SECTION AT 0 'CODE'
;-------------------------------------
ORG 00H
Reset:
NOP
MOV A,100B
MOV INTC,A
JMP Initial
;-------------------------------------
ORG 04H
CLR INTC.4
RETI
NOP
JMP Reset
;-------------------------------------
ORG 08H
MOV ACC_Buff,A
MOV A,STATUS
MOV STATUS_Buff,A
Do156HzInc:
INC _156HzCT ;8000/256/200=156.25
SZ LCDCommCT
JMP DispCom23Test
DisplayCom1:
CLR PB.7 ;SET PB.7
SET PA
NOP
SET PAC
CLR PBC.4
CLR PB.4
INC LCDCommCT
SET ScanKeyF
NOP
NOP
NOP
MOV A,PA
MOV IntKeyCode,A
CLR PAC
MOV A,Common1Data
MOV PA,A
SET PB.4 ;CLR PB.5
JMP ExitTimerInt
DispCom23Test:
SZ LCDCommCT.1
JMP DisplayCom3
DisplayCom2:
CLR PB.4 ;SET PB.5
MOV A,Common2Data
MOV PA,A
SET PB.6 ;CLR PB.6
INC LCDCommCT
JMP ExitTimerInt
DisplayCom3:
CLR PB.6 ;SET PB.6
MOV A,Common3Data
MOV PA,A
SET PB.7 ;CLR PB.7
CLR LCDCommCT
PWMControl:
SDZ PWMRunCT
JMP ExitTimerInt
SZ PWMLevelF
JMP PWMLowControl
PWMHighControl:
MOV A,PWMHigh
MOV PWMRunCT,A
SET PWMLevelF
SZ PWMRunCT
SET ControlPin
SZ PWMRunCT
JMP ExitTimerInt
PWMLowControl:
MOV A,PWMLow
MOV PWMRunCT,A
CLR PWMLevelF
SZ PWMRunCT
CLR ControlPin
SZ PWMRunCT
JMP ExitTimerInt
SZ PWMHigh
JMP PWMHighControl
CLR ControlPin
ExitTimerInt:
MOV A,STATUS_Buff
MOV STATUS,A
MOV A,ACC_Buff
RETI
;============================================
Initial:
CLR PAC
SET PA
MOV A,00010001B
MOV PBC,A
MOV A,00000011B
MOV PB,A
CLR PCC
CLR PC
CLR PGC.0
CLR PG.0
MOV A,00000100B
MOV WDTS,A
CALL AT24C01Stop
CALL AT24C01Start
CALL AT24C01Stop
PowerOnReset:
MOV A,40H ;48R10A-1
MOV MP,A
ClrRAM:
CLR R0
INC MP
MOV A,80H
SUB A,MP
SNZ Z
JMP ClrRAM
MOV A,122
CALL AT24C01Read1Byte
SUB A,87
SNZ Z
JMP Initial24C01
MOV A,123
CALL AT24C01Read1Byte
SUB A,70
SNZ Z
JMP Initial24C01
MOV A,124
CALL AT24C01Read1Byte
SUB A,77
SNZ Z
JMP Initial24C01
MOV A,125
CALL AT24C01Read1Byte
SUB A,67
SNZ Z
JMP Initial24C01
MOV A,126
CALL AT24C01Read1Byte
SUB A,85
SNZ Z
JMP Initial24C01
JMP ReadOut24Data
Initial24C01:
MOV A,0C2H
MOV WordData24C01,A ;SetTempLow Set Initial Temp=25.0
MOV A,3
CALL Write24C01Byte
CALL Delay10Ms
MOV A,01H
MOV WordData24C01,A ;SetTempHigh
MOV A,4
CALL Write24C01Byte
CALL Delay10Ms
MOV A,0C8H
MOV WordData24C01,A ;SetLow Limit L Set Low Limit =0.0
MOV A,5
CALL Write24C01Byte
CALL Delay10Ms
MOV A,00H
MOV WordData24C01,A ;SetLow Limit H
MOV A,6
CALL Write24C01Byte
CALL Delay10Ms
MOV A,0A6H
MOV WordData24C01,A ;SetHigh Limit L Set High Limit =99.0
MOV A,7
CALL Write24C01Byte
CALL Delay10Ms
MOV A,04H
MOV WordData24C01,A ;SetHigh Limit H
MOV A,8
CALL Write24C01Byte
CALL Delay10Ms
MOV A,160
MOV WordData24C01,A ;KpQuotiety
MOV A,12
CALL Write24C01Byte
CALL Delay10Ms
MOV A,10
MOV WordData24C01,A ;KiQuotiety
MOV A,13
CALL Write24C01Byte
CALL Delay10Ms
MOV A,50
MOV WordData24C01,A ;KdQuotiety
MOV A,14
CALL Write24C01Byte
CALL Delay10Ms
MOV A,87
MOV WordData24C01,A
MOV A,122
CALL Write24C01Byte
call Delay10Ms
MOV A,70
MOV WordData24C01,A
MOV A,123
CALL Write24C01Byte
call Delay10Ms
MOV A,77
MOV WordData24C01,A
MOV A,124
CALL Write24C01Byte
CALL Delay10Ms
MOV A,67
MOV WordData24C01,A
MOV A,125
CALL Write24C01Byte
CALL Delay10Ms
MOV A,85
MOV WordData24C01,A
MOV A,126
CALL Write24C01Byte
CALL Delay10Ms
ReadOut24Data:
MOV A,3
CALL AT24C01Read1Byte
MOV SetTemp1,A
MOV A,4
CALL AT24C01Read1Byte
MOV SetTemp2,A
MOV A,5
CALL AT24C01Read1Byte
MOV LowLimit1,A
MOV A,6
CALL AT24C01Read1Byte
MOV LowLimit2,A
MOV A,7
CALL AT24C01Read1Byte
MOV HighLimit1,A
MOV A,8
CALL AT24C01Read1Byte
MOV HighLimit2,A
MOV A,12
CALL AT24C01Read1Byte
MOV KpQuotiety,A
MOV A,13
CALL AT24C01Read1Byte
MOV KiQuotiety,A
MOV A,14
CALL AT24C01Read1Byte
MOV KdQuotiety,A
MOV A,256-78
MOV FlashCT,A
MOV A,256-200
MOV TMR,A
MOV A,10010111B ;timerOn 156.25Hz
MOV TMRC,A
MOV A,101B ;interruptEnable
MOV INTC,A
SET DispF
Delay2Sec:
CLR WDT
SZ _156HzCT
JMP DoTimeDelayI
JMP Delay2Sec
DoTimeDelayI:
DEC _156HzCT
SIZ ALU1
JMP Delay2Sec
MOV A,256-39
MOV SplitCT,A
SET LimitPin
Main:
CLR WDT
SZ _156HzCT
CALL Do156HzRout
SZ ScanKeyF
CALL KeyProcess
SZ DispF
CALL DisplayDo
SZ MeasureT_F
CALL TemperatureMeasure
SZ PIDCalF
CALL PIDTempControl
SZ LimitCheckF
CALL CheckLimitDo
SNZ WriteSetTempF
JMP Main
;----------------------------------------------
WriteSetTemp:
CLR WriteSetTempF
MOV A,SetTemp1
MOV WordData24C01,A ;SetTempLow
MOV A,3
CALL Write24C01Byte
CALL Delay10Ms
MOV A,SetTemp2
MOV WordData24C01,A ;SetTempHigh
MOV A,4
CALL Write24C01Byte
CALL Delay10Ms
MOV A,LowLimit1
MOV WordData24C01,A ;
MOV A,5
CALL Write24C01Byte
CALL Delay10Ms
MOV A,LowLimit2
MOV WordData24C01,A ;SetTempHigh
MOV A,6
CALL Write24C01Byte
CALL Delay10Ms
MOV A,HighLimit1
MOV WordData24C01,A ;SetTempLow
MOV A,7
CALL Write24C01Byte
CALL Delay10Ms
MOV A,HighLimit2
MOV WordData24C01,A ;SetTempHigh
MOV A,8
CALL Write24C01Byte
JMP Main
;----------------------------------------------
CheckLimitDo:
CLR LimitCheckF
MOV A,TemperatureL
SUB A,LowLimit1
MOV A,TemperatureH
SBC A,LowLimit2
SZ C
JMP CheckHighLimit
SET LimitPin
RET
CheckHighLimit:
MOV A,HighLimit1
SUB A,TemperatureL
MOV A,HighLimit2
SBC A,TemperatureH
SNZ C
CLR LimitPin
RET
;----------------------------------------------
PIDTempControl: ;Pdlt=Kp*(e(t)-e(t-1))+Ki*e(t)+Kd*(e(t)-2*e(t-1)+e(t-2))
CLR PIDCalF
MOV A,SetTemp1 ;Get e(t)=Tset-Tact
SUB A,TemperatureL
MOV ALU1,A
MOV A,SetTemp2
SBC A,TemperatureH
MOV ALU2,A
MOV A,EtBuff1L ;Shifte(t)
MOV EtBuff2L,A
MOV A,EtBuff1H
MOV EtBuff2H,A
MOV A,EtBuff0L
MOV EtBuff1L,A
MOV ALU3,A ;ALU4ALU3=e(t-1)
MOV A,EtBuff0H
MOV EtBuff1H,A
MOV ALU4,A
MOV A,ALU1
MOV EtBuff0L,A
MOV A,ALU2 ;ALU2ALU1=e(t)
MOV EtBuff0H,A
CPL ALU3 ;e(t)-e(t-1)=e(t)+(-e(t-1))
CPL ALU4
INC ALU3
SZ Z
INC ALU4
MOV A,ALU3
ADDM A,ALU1
MOV A,ALU4
ADCM A,ALU2
CLR MinusF ;Kp*(e(t)-E(t-1))
SNZ ALU2.7
JMP CalKpMulEt
SET MinusF
CPL ALU1
CPL ALU2
INC ALU1
SZ Z
INC ALU2
CalKpMulEt:
MOV A,KpQuotiety
MOV ALU3,A
CLR ALU5
CLR ALU6
CLR ALU7
CLR ALU8
MOV A,256-8
MOV ALU4,A
CALL MultALU123
SNZ MinusF
JMP SaveKpToM
CPL ALU5
CPL ALU6
CPL ALU7
INC ALU5
SZ Z
INC ALU6
SZ Z
INC ALU7
SaveKpToM:
MOV A,ALU5
MOV AdjQuotiety0,A
MOV A,ALU6
MOV AdjQuotiety1,A
MOV A,ALU7
MOV AdjQuotiety2,A
MOV A,EtBuff0L ;Ki*e(t)
MOV ALU1,A
MOV A,EtBuff0H
MOV ALU2,A
CLR MinusF
SNZ ALU2.7
JMP CalcKiMulEt
SET MinusF
CPL ALU1
CPL ALU2
INC ALU1
SZ Z
INC ALU2
CalcKiMulEt:
MOV A,KiQuotiety
MOV ALU3,A
CLR ALU5
CLR ALU6
CLR ALU7
CLR ALU8
MOV A,256-8
MOV ALU4,A
CALL MultALU123
SNZ MinusF
JMP SaveKiToM
CPL ALU5
CPL ALU6
CPL ALU7
INC ALU5
SZ Z
INC ALU6
SZ Z
INC ALU7
SaveKiToM:
MOV A,ALU5
ADDM A,AdjQuotiety0
MOV A,ALU6
ADCM A,AdjQuotiety1
MOV A,ALU7
ADCM A,AdjQuotiety2
MOV A,EtBuff1L ;Kd*(e(t)-2*e(t-1)+e(t-2))
MOV ALU1,A ;Kd*[e(t)+e(t-2)+(-e(t-1)+(-e(t-1))]
MOV A,EtBuff1H
MOV ALU2,A
CPL ALU1
CPL ALU2
INC ALU1
SZ Z
INC ALU2
MOV A,ALU1
ADDM A,ALU1
MOV A,ALU2
ADCM A,ALU2
MOV A,EtBuff0L
ADDM A,ALU1
MOV A,EtBuff0H
ADCM A,ALU2
MOV A,EtBuff2L
ADDM A,ALU1
MOV A,EtBuff2H
ADCM A,ALU2
CLR MinusF
SNZ ALU2.7
JMP CalcKdMulEt
SET MinusF
CPL ALU1
CPL ALU2
INC ALU1
SZ Z
INC ALU2
CalcKdMulEt:
MOV A,KdQuotiety
MOV ALU3,A
CLR ALU5
CLR ALU6
CLR ALU7
CLR ALU8
MOV A,256-8
MOV ALU4,A
CALL MultALU123
SNZ MinusF
JMP SaveKdToM
CPL ALU5
CPL ALU6
CPL ALU7
INC ALU5
SZ Z
INC ALU6
SZ Z
INC ALU7
SaveKdToM:
MOV A,ALU5
ADDM A,AdjQuotiety0
MOV A,ALU6
ADCM A,AdjQuotiety1
MOV A,ALU7
ADCM A,AdjQuotiety2
MOV A,PWMHigh
MOV ALU1,A
CLR ALU2
MOV A,AdjQuotiety0
ADDM A,PWMPoint
MOV A,AdjQuotiety1
ADCM A,ALU1
MOV A,AdjQuotiety2
ADCM A,ALU2
SNZ ALU2.7
JMP JudgPWMMax
PWMMinSet:
MOV A,128
MOV PWMLow,A
CLR PWMHigh
CLR PWMPoint
RET
SetPWMMax:
MOV A,128
MOV PWMHigh,A
CLR PWMLow
CLR PWMPoint
RET
JudgPWMMax:
SZ ALU2
JMP SetPWMMax
MOV A,ALU1
SUB A,128
SZ C
JMP SetPWMMax
MOV A,128
SUB A,ALU1
CLR EMI
MOV PWMLow,A
MOV A,ALU1
MOV PWMHigh,A
SET EMI
RET
;----------------------------------------------
ShiftResultMul: ;ALU2ALU1*ALU3=ALU7ALU6ALU5
CLR C
RLC ALU5
RLC ALU6
RLC ALU7
MultALU123:
RLC ALU3
SNZ C
JMP IncLoopCT
MOV A,ALU1
ADDM A,ALU5
MOV A,ALU2
ADCM A,ALU6
MOV A,0
ADCM A,ALU7
IncLoopCT:
SIZ ALU4
JMP ShiftResultMul
RET
;----------------------------------------------
Do156HzRout:
DEC _156HzCT
SIZ FlashCT
JMP TestSplitInc
MOV A,256-78
MOV FlashCT,A
SET DispF
SZ FlashF
JMP ClrFlashFlag
SET FlashF
JMP TestSplitInc
ClrFlashFlag:
CLR FlashF
TestSplitInc:
SIZ SplitCT
JMP Do156HzRout1
MOV A,256-64 ;0.41second 128/2=64
MOV SplitCT,A
SET MeasureT_F
SZ ExitSetCT
SIZ ExitSetCT
JMP Do156HzRout1
CLR SetF
SET DispF
SET WriteSetTempF
Do156HzRout1:
RET
;----------------------------------------------
KeyProcess:
CLR ScanKeyF
MOV A,IntKeyCode
OR A,11111000B
MOV KeyCode,A
SUB A,0FFH
SZ Z
JMP ClrKeyCount1
SNZ KeyHoldF
JMP NewKeyTestDo
SIZ KeyCount
RET
MOV A,256-5
MOV KeyCount,A
JMP TestUpDownKey
ClrKeyCount1:
CLR KeyHoldF
ClrKeyCount:
CLR KeyCount
RET
NewKeyTestDo:
SET KeyHoldF
MOV A,256-50
MOV KeyCount,A
MOV A,11111110B
SUB A,KeyCode
SZ Z
JMP SetKeyProc
TestUpDownKey:
MOV A,11111101B
SUB A,KeyCode
SZ Z
JMP PlusKeyProc
MOV A,11111011B
SUB A,KeyCode
SNZ Z
JMP ClrKeyCount
MinusKeyProc:
SNZ SetF
RET
SZ SetMode.1
JMP DoSetHighTempDec
SZ SetMode.0
JMP DoSetLowTempDec
DoSetTempDec:
SZ SetTemp2
JMP SetTempDec
MOV A,1
SUB A,SetTemp1
SNZ C
JMP SetTempDec
RET
SetTempDec:
MOV A,0FFH
ADDM A,SetTemp1
SZ C
JMP SetFreshDisp
DEC SetTemp2
SetFreshDisp:
SET DispF
MOV A,256-73
MOV ExitSetCT,A
CLR FlashF
MOV A,256-78
MOV FlashCT,A
RET
DoSetHighTempDec:
SZ HighLimit2
JMP HighTempDecDO
MOV A,2
SUB A,HighLimit1
SNZ C
JMP HighTempDecDO
RET
HighTempDecDO:
MOV A,0FFH
ADDM A,HighLimit1
SZ C
JMP CompHighLowDoH
DEC HighLimit2
CompHighLowDoH:
MOV A,HighLimit1
SUB A,LowLimit1
SNZ Z
JMP SetFreshDisp
MOV A,HighLimit2
SUB A,LowLimit2
SNZ Z
JMP SetFreshDisp
DoSetLowTempDec:
SZ LowLimit2
JMP LowTempDecDo
MOV A,1
SUB A,LowLimit1
SNZ C
JMP LowTempDecDo
RET
LowTempDecDo:
MOV A,0FFH
ADDM A,LowLimit1
SZ C
JMP SetFreshDisp
DEC LowLimit2
JMP SetFreshDisp
;-----------------------------
PlusKeyProc:
SNZ SetF
RET
SZ SetMode.1
JMP SetHighTempInc
SZ SetMode.0
JMP SetLowTempInc
MOV A,4
SUB A,SetTemp2
SNZ Z
JMP SetTempIncDo
MOV A,0AFH
SUB A,SetTemp1
SZ Z
RET
SetTempIncDo:
SIZ SetTemp1
JMP SetFreshDisp
INC SetTemp2
JMP SetFreshDisp
SetHighTempInc:
MOV A,4
SUB A,HighLimit2
SNZ Z
JMP SetHighInDDD
MOV A,0AFH
SUB A,HighLimit1
SZ Z
RET
SetHighInDDD:
SIZ HighLimit1
JMP SetFreshDisp
INC HighLimit2
JMP SetFreshDisp
SetLowTempInc:
MOV A,4
SUB A,LowLimit2
SNZ Z
JMP SetLowIncDDD
MOV A,0AEH
SUB A,LowLimit1
SZ Z
RET
SetLowIncDDD:
SIZ LowLimit1
JMP CompLowHighEQ
INC LowLimit2
CompLowHighEQ:
MOV A,LowLimit1
SUB A,HighLimit1
SNZ Z
JMP SetFreshDisp
MOV A,LowLimit2
SUB A,HighLimit2
SNZ Z
JMP SetFreshDisp
JMP SetHighTempInc
;----------------------------------------
SetKeyProc:
SZ SetF
JMP TestNextSetM
SET SetF
CLR SetMode
Set FlashF
Set1MinExit:
MOV A,256-78
MOV FlashCT,A
MOV A,256-73
MOV ExitSetCT,A
SET DispF
RET
TestNextSetM:
SZ SetMode.1
JMP ExitSetMode
INC SetMode
CLR FlashF
JMP Set1MinExit
ExitSetMode:
SET WriteSetTempF
CLR SetF
SET DispF
RET
;----------------------------------------------
TemperatureMeasure:
CLR MeasureT_F
CLR EMI ;InterruptDisable
SZ StandRT_F
JMP TestRTRecharge
CLR StandyCT1
CLR StandyCT2
SET PGC.0 ;PC.0Input
SET PCC.2
SET PC.0
LoopStandyCT:
SZ PG.0 ;2
JMP EndStandyRTest ;0
SIZ StandyCT1 ;1
JMP LoopStandyCT ;2
SZ PG.0 ;2
JMP EndStandRR ;0
SIZ StandyCT2 ;1
JMP LoopStandyCT ;2
JMP EndTestRT
EndStandRR:
SIZ StandyCT2
JMP EndStandyRTest
JMP EndTestRT
EndStandyRTest:
MOV A,StandyCT2 ;修正外循环误差
ADDM A,StandyCT1
MOV A,0
ADCM A,StandyCT2
SZ C
JMP EndTestRT
SET StandRT_F
EndTestRT:
SET EMI
CLR PCC
CLR PC
CLR PGC.0
CLR PG.0
RET
TestRTRecharge:
CLR ALU1
CLR ALU2
SET PGC.0 ;PC.0Input
SET PCC.0
SET PC.2
LoopRTCCT:
SZ PG.0 ;2
JMP EndRTCTest ;0
SIZ ALU1 ;1
JMP LoopRTCCT ;2
SZ PG.0 ;2
JMP EndRTCR ;0
SIZ ALU2 ;1
JMP LoopRTCCT ;2
JMP NotCalcEndT
EndRTCR:
SIZ ALU2
JMP EndRTCTest
NotCalcEndT:
SET EMI
CLR PCC
CLR PC
CLR PGC.0
CLR PG.0
CLR StandRT_F
RET
EndRTCTest:
MOV A,ALU2 ;修正外循环误差
ADDM A,ALU1
MOV A,0
ADCM A,ALU2
SZ C
JMP NotCalcEndT
SET EMI
CLR PCC
CLR PC
CLR PGC.0
CLR PG.0
CLR StandRT_F
SWAPA StandyCT2 ;StandyCT2StandyCT1*16
AND A,0F0H
MOV StandyCT2,A
SWAPA StandyCT1
AND A,0FH
ORM A,StandyCT2
SWAPA StandyCT1
AND A,0F0H
MOV StandyCT1,A
CLR ALU3
CLR ALU5
CLR ALU6
DoCTDiv: ;(ALU3,ALU2,ALU1/StandyCT2,StandyCT1=ALU6,ALU5)
MOV A,256-16
MOV ALU7,A
LoopSubDo:
MOV A,ALU1
SUB A,StandyCT1
MOV ALU1,A
MOV A,ALU2
SBC A,StandyCT2
MOV ALU2,A
SZ C
JMP IncResult
SZ ALU3
JMP IncResultPre
MOV A,StandyCT1
ADDM A,ALU1
MOV A,StandyCT2
ADCM A,ALU2
JMP ShiftResult
IncResultPre:
DEC ALU3
IncResult:
SIZ ALU5
JMP LoopSubDo
INC ALU6
JMP LoopSubDo
ShiftResult:
SIZ ALU7
JMP ShiftResultDo
JMP EndDivSubR
ShiftResultDo:
CLR C
RLC ALU5
RLC ALU6
CLR C
RLC ALU1
RLC ALU2
RLC ALU3
JMP LoopSubDo
EndDivSubR:
CLR WDT
MOV A,TempTab
MOV TBLP,A
MOV A,60 ;Initial50
MOV ALU3,A
LoopCalcTemp:
ADDM A,TBLP
TABRDL ALU1
MOV A,TBLH
SUB A,ALU6
SNZ Z
JMP TestLookNext
MOV A,ALU1
SUB A,ALU5
TestLookNext:
SZ C
JMP UpLookTab
DownLookTab:
DEC TBLP
MOV A,TempStartAddr-1
SUB A,TBLP
SZ Z
JMP EndLoopTemp0
TABRDL ALU1
MOV A,TBLH
SUB A,ALU6
SNZ Z
JMP TestLookDwN
MOV A,ALU1
SUB A,ALU5
TestLookDwN:
SZ C
JMP EndLoopTemp1
RRC ALU3
CPLA ALU3
INC ACC
SZ ACC
INC TBLP
JMP LoopCalcTemp
UpLookTab:
INC TBLP
MOV A,TempEndAddr
SUB A,TBLP
SZ Z
JMP EndLoopTemp2
TABRDL ALU1
MOV A,TBLH
SUB A,ALU6
SNZ Z
JMP TestLookUpN
MOV A,ALU1
SUB A,ALU5
TestLookUpN:
SNZ C
JMP EndLoopTemp2
CLR C
RRC ALU3
SZ ALU3 ;ifALU1=0 TBLP=TBLP+1
DEC TBLP
MOV A,ALU3
JMP LoopCalcTemp
EndLoopTemp0:
INC TBLP
CLR ALU7
JMP CalcTempMean
EndLoopTemp1:
INC TBLP
; JMP EndLoopTemp2
EndLoopTemp2:
TABRDL ALU1 ;ALU2ALU1
MOV A,TBLH
MOV ALU2,A
DEC TBLP
TABRDL ALU3 ;ALU4ALU3
MOV A,TBLH
MOV ALU4,A
MOV A,ALU3 ;ALU2ALU1=ALU4ALU3-ALU2ALU1
SUBM A,ALU1
MOV A,ALU4
SBCM A,ALU2
MOV A,ALU3 ;ALU6ALU5=ALU4ALU3-ALU6ALU5
SUBM A,ALU5
MOV A,ALU4
SBCM A,ALU6
SWAP ALU6
SWAP ALU5
MOV A,ALU5
AND A,0FH
ORM A,ALU6
MOV A,ALU5
AND A,0F0H
MOV ALU5,A
CLR ALU7
LoopGetPoint:
MOV A,ALU5
SUB A,ALU1
MOV ALU5,A
MOV A,ALU6
SBC A,ALU2
MOV ALU6,A
SNZ C
JMP CalcTempMean
INC ALU7
JMP LoopGetPoint
CalcTempMean:
CLR ALU6
MOV A,TBLP
SUB A,TempTab ;;;;;
MOV ALU5,A
ADDM A,ALU5 ;*10
SZ C
INC ALU6
MOV A,ALU5
MOV ALU1,A
ADDM A,ALU1
MOV A,ALU6
MOV ALU2,A
ADCM A,ALU2
MOV A,ALU1
ADDM A,ALU1
MOV A,ALU2
ADCM A,ALU2
MOV A,ALU5
ADDM A,ALU1
MOV A,ALU6
ADCM A,ALU2
MOV A,Hex2BCDPoint
MOV TBLP,A
MOV A,ALU7
AND A,0FH
ADDM A,TBLP
TABRDL ACC
ADDM A,ALU1
SZ C
INC ALU2
MOV A,ALU2
MOV ALU6,A
MOV A,ALU1
MOV ALU5,A
MOV A,Temperature1L
ADDM A,ALU5
MOV A,Temperature1H
ADCM A,ALU6
MOV A,Temperature2L
ADDM A,ALU5
MOV A,Temperature2H
ADCM A,ALU6
MOV A,Temperature3L
ADDM A,ALU5
MOV A,Temperature3H
ADCM A,ALU6
CLR C
RRC ALU6
RRC ALU5
CLR C
RRC ALU6
RRC ALU5
MOV A,ALU6
SUB A,4
SNZ Z
JMP SaveTempDo
MOV A,ALU5
SUB A,0AFH
SNZ C
JMP SaveTempDo
MOV A,0AFH
MOV ALU5,A
SaveTempDo:
MOV A,ALU6
MOV TemperatureH,A
MOV A,ALU5
MOV TemperatureL,A
SET PIDCalF
SET LimitCheckF
MOV A,Temperature2L
MOV Temperature1L,A
MOV A,Temperature2H
MOV Temperature1H,A
MOV A,Temperature3L
MOV Temperature2L,A
MOV A,Temperature3H
MOV Temperature2H,A
MOV A,ALU2
MOV Temperature3H,A
MOV A,ALU1
MOV Temperature3L,A
RET
;========================================================
Write24C01Byte:
; AT24C01 Byte Write function.
; Called with byte address in A, datain register "WordData24C01"
; Does not wait for write cycle tocomplete.
; Returns CY set to indicate that the busis not available
; or that the addressed device failed toacknowledge.
; Destroys A.
MOV ALU3,A
SET ALU1
Write24Start:
CALL AT24C01Start
SZ C
JMP ReTestWriteE ;abort if bus not available
MOV A,10100000B ;specify write operation
CALL Send1Byte01 ;send device address
SZ C
JMP StopWrite01 ;abort if no acknowledge
MOV A,ALU3 ;send high byte of address
CALL Send1Byte01 ;
SZ C
JMP StopWrite01 ;abort if no acknowledge
MOV A,WordData24C01 ;get data
CALL Send1Byte01 ;send data
SZ C
JMP StopWrite01 ;abort if no acknowledge
CLR C ;clear error flag
StopWrite01:
CALL AT24C01Stop
SNZ C
JMP ExitWrite24B
ReTestWriteE:
SDZ ALU1
JMP Write24Start
ExitWrite24B:
RET
;========================================================
AT24C01Read1Byte:
; AT24C01 Random Read function.
; Called with byte address in A.
; Returns data in A.
; Returns CY set to indicate that the busis not available
; or that the addressed device failed toacknowledge.
MOV ALU3,A ;save copy of programmable address
SET ALU1
Read2401Start: ;Send dummy write command to set internal address.
CALL AT24C01Start
SZ C
JMP ReTest250Time ;abort if bus not available
MOV A,10100000B
CALL Send1Byte01 ;send device address
SZ C
JMP StopRead2401 ;abort if no acknowledge
MOV A,ALU3 ;send high byte of address
CALL Send1Byte01 ;
SZ C
JMP StopRead2401 ;abort if no acknowledge
; Call Current Address Read function.
JMP CurrentByteRead ;CALL CurrentByteRead Return to ExitRead1B
StopRead2401:
CALL AT24C01Stop
SNZ C
JMP ExitRead1B
ReTest250Time:
SDZ ALU1
JMP Read2401Start
ExitRead1B:
RET
;==========================================================
CurrentByteRead:
; AT24Cxx Current Address Read function.
; Returns data in A.
; Returns CY set to indicate that the busis not available
; or that the addressed device failed toacknowledge.
SET ALU1
CurRead2401:
CALL AT24C01Start
SZ C
JMP CurReRead250 ;abort if bus not available
MOV A,10100001B ;specify read operation
CALL Send1Byte01 ;send device address
SZ C
JMP StopCurRead ;abort if no acknowledge
CALL Read8Bit ;receive data byte
CALL NAK ;do not acknowledge byte
CLR C ;clear error flag
StopCurRead:
CALL AT24C01Stop
SNZ C
JMP ExitCurRead
CurReRead250:
SDZ ALU1
JMP CurRead2401
ExitCurRead:
RET
;==========================================================
Send1Byte01:
; Shift out a byte to the AT24C01, mostsignificant bit first.
; SCL, SDA expected low on entry. Returnwith SCL low.
; Called with data to send in A.
; Returns CY set to indicate failure byslave to acknowledge.
; Destroys A.
CLR ALU2
SET ALU2.3 ;8 bit counter
CLR SDA_AT24C01Dir
LoopSendBit01:
RLC ACC ;move bit into CY
SZ C
SET SDA_AT24C01
SNZ C
CLR SDA_AT24C01 ; output bit
CALL Delay5uS
SET SCL_AT24C01 ; raiseclock
CALL Delay10uS
CLR SCL_AT24C01 ;drop clock
SDZ ALU2
JMP LoopSendBit01 ;next bit
SET SDA_AT24C01Dir ;release SDA for ACK
CALL Delay5uS
SET SCL_AT24C01 ;raise ACK clock
CALL Delay10uS
CLR C
SZ SDA_AT24C01 ;get ACK bit
SET C
CLR SCL_AT24C01 ;drop ACK clock
RET
;----------------------------------------------------------------
Read8Bit:
; Shift in a byte from the AT24Cxx, mostsignificant bit first.
; SCL expected low on entry. Return withSCL low.
; Returns received data byte in A.
SET SDA_AT24C01Dir ;make SDA an input
MOV A,256-8
MOV ALU2,A ;bit count
LoopRead8B:
CALL Delay5uS
SET SCL_AT24C01 ;raise clock
CALL Delay5uS
CLR C
SZ SDA_AT24C01 ;input bit
SET C
RLC ACC ;move bit into byte
CLR SCL_AT24C01 ;drop clock
SIZ ALU2
JMP LoopRead8B ; next bit
RET
;============================================================
AT24C01Start:
; Send START, defined as high-to-low SDAwith SCL high.
; Return with SCL, SDA low.
; Returns CY set if bus is not available.
CLR SDA_AT24C01Dir
SET SDA_AT24C01
SET SCL_AT24C01
; Verify bus available.
CALL Delay10uS
SNZ SDA_AT24C01
JMP ErrorStartE ;jump if not high
CLR SDA_AT24C01
CALL Delay10uS
CLR SCL_AT24C01
CALL Delay5uS
CLR C ;clear error flag
RET
ErrorStartE:
CALL Delay10uS
SET C ;set error flag
RET
;----------------------------------------------------------
AT24C01Stop:
; Send STOP, defined as low-to-high SDAwith SCL high.
; SCL expected low on entry. Return withSCL, SDA high.
CLR SDA_AT24C01Dir
CLR SDA_AT24C01
CALL Delay5uS
SET SCL_AT24C01
CALL Delay10uS
SET SDA_AT24C01
CALL Delay10uS
RET
;========================================================
NAK:
; Clock out a negative acknowledge bit(high).
; SCL expected low on entry. Return withSCL low, SDA high.
CLR SDA_AT24C01Dir
SET SDA_AT24C01 ;NAK bit
CALL Delay5uS
SET SCL_AT24C01 ;raise clock
CALL Delay10uS
CLR SCL_AT24C01 ; drop clock
RET
;--------------------------
Delay10uS: ;Call2
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
Delay5uS:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET ;2
;======================================================
Delay10Ms: ;256*20*4
MOV A,256-20
MOV ALU2,A
CLR ALU1
Delay10msLoop:
CLR WDT ;1
SIZ ALU1 ;1
JMP Delay10msLoop ;2
SIZ ALU2
JMP Delay10msLoop
RET
;======================================================
DisplayDo:
CLR DispF
SNZ SetF
JMP DispActTempD
SNZ FlashF
JMP DispSetTempD
SZ SetMode.1
JMP DispHighChr
SZ SetMode.0
JMP DispLowChr
CLR Common1Data
CLR Common2Data
CLR Common3Data
RET
DispHighChr:
MOV A,01110101B
MOV Common1Data,A
MOV A,00010100B
MOV Common2Data,A
CLR Common3Data
RET
DispLowChr:
MOV A,00010110B
MOV Common1Data,A
MOV A,01000111B
MOV Common2Data,A
CLR Common3Data
RET
DispSetTempD:
SZ SetMode.1
JMP DispHighLimit
SZ SetMode.0
JMP DispLowLimit
MOV A,SetTemp1
MOV ALU1,A
MOV A,SetTemp2
MOV ALU2,A
JMP DoDispRout1
DispHighLimit:
MOV A,HighLimit1
MOV ALU1,A
MOV A,HighLimit2
MOV ALU2,A
JMP DoDispRout1
DispLowLimit:
MOV A,LowLimit1
MOV ALU1,A
MOV A,LowLimit2
MOV ALU2,A
JMP DoDispRout1
DispActTempD:
MOV A,TemperatureL
MOV ALU1,A
MOV A,TemperatureH
MOV ALU2,A
DoDispRout1:
CLR DispMinusF
SZ ALU1
JMP DoDispRout2
SZ ALU2
JMP DoDispRout2
INC ALU1
DoDispRout2:
MOV A,ALU1
SUB A,0C8H
MOV ALU1,A
SZ C
JMP DoDispRout3
MOV A,ALU2
SUB A,1
MOV ALU2,A
SZ C
JMP DoDispRout3
SET DispMinusF
CPL ALU2
CPL ALU1
SIZ ALU1
JMP DoDispRout3
INC ALU2
DoDispRout3:
MOV A,Hex2BCDHigh
MOV TBLP,A
MOV A,ALU2
ADDM A,TBLP
TABRDL ALU3
MOV A,TBLH
MOV ALU4,A
MOV A,Hex2BCDMid
MOV TBLP,A
SWAPA ALU1
AND A,0FH
ADDM A,TBLP
TABRDL ACC
ADD A,ALU3
DAA ALU3
MOV A,TBLH
ADC A,ALU4
DAA ALU4
MOV A,Hex2BCDLow
MOV TBLP,A
MOV A,ALU1
AND A,0FH
ADDM A,TBLP
TABRDL ACC
ADD A,ALU3
DAA ALU3
MOV A,0
ADC A,ALU4
DAA ALU4
MOV A,ALU3
AND A,0FH
MOV TBLP,A
TABRDL Common3Data
SET Common3Data.7
SWAPA ALU3
AND A,0FH
MOV TBLP,A
TABRDL Common2Data
MOV A,0AH
SZ ALU4
MOV A,ALU4
MOV TBLP,A
TABRDL Common1Data
SZ DispMinusF
SET Common1Data.6
RET
;===================================================================
ORG 700H
LCDFont1:
DW 00111111B ;'0'
DW 00100001B ;'1'
DW 01101110B ;'2'
DW 01101011B ;'3'
DW 01110001B ;'4'
DW 01011011B ;'5'
DW 01011111B ;'6'
DW 00101001B ;'7'
DW 01111111B ;'8'
DW 01111011B ;'9'
DW 00000000B ;''
Hex2BCDPoint:
DW 0
DW 1
DW 1
DW 2
DW 3
DW 3
DW 4
DW 4
DW 5
DW 6
DW 6
DW 7
DW 8
DW 8
DW 9
DW 9
Hex2BCDLow:
DW 0
DW 1
DW 2
DW 3
DW 4
DW 5
DW 6
DW 7
DW 8
DW 9
DW 10H
DW 11H
DW 12H
DW 13H
DW 14H
DW 15H
Hex2BCDMid:
DW 0
DW 16H
DW 32H
DW 48H
DW 64H
DW 80H
DW 96H
DW 112H
DW 128H
DW 144H
DW 160H
DW 176H
DW 192H
DW 208H
DW 224H
DW 240H
Hex2BCDHigh:
DW 0
DW 256H
DW 512H
DW 768H
DW 1024H
DW 2048H
TempStartAddr:
TempTab:
DW 9431 ; -20C
DW 9377 ; -19C
DW 9321 ; -18C
DW 9264 ; -17C
DW 9204 ; -16C
DW 9142 ; -15C
DW 9078 ; -14C
DW 9011 ; -13C
DW 8943 ; -12C
DW 8872 ; -11C
DW 8799 ; -10C
DW 8723 ; -09C
DW 8645 ; -08C
DW 8564 ; -07C
DW 8481 ; -06C
DW 8397 ; -05C
DW 8310 ; -04C
DW 8221 ; -03C
DW 8130 ; -02C
DW 8037 ; -01C
DW 7943 ; 00C
DW 7845 ; 01C
DW 7745 ; 02C
DW 7644 ; 03C
DW 7542 ; 04C
DW 7437 ; 05C
DW 7332 ; 06C
DW 7224 ; 07C
DW 7116 ; 08C
DW 7006 ; 09C
DW 6897 ; 10C
DW 6784 ; 11C
DW 6670 ; 12C
DW 6556 ; 13C
DW 6441 ; 14C
DW 6326 ; 15C
DW 6210 ; 16C
DW 6094 ; 17C
DW 5978 ; 18C
DW 5863 ; 19C
DW 5747 ; 20C
DW 5631 ; 21C
DW 5515 ; 22C
DW 5399 ; 23C
DW 5285 ; 24C
DW 5171 ; 25C
DW 5056 ; 26C
DW 4942 ; 27C
DW 4829 ; 28C
DW 4717 ; 29C
DW 4607 ; 30C
DW 4496 ; 31C
DW 4388 ; 32C
DW 4282 ; 33C
DW 4176 ; 34C
DW 4072 ; 35C
DW 3970 ; 36C
DW 3869 ; 37C
DW 3770 ; 38C
DW 3674 ; 39C
DW 3579 ; 40C
DW 3483 ; 41C
DW 3390 ; 42C
DW 3299 ; 43C
DW 3211 ; 44C
DW 3124 ; 45C
DW 3038 ; 46C
DW 2955 ; 47C
DW 2874 ; 48C
DW 2795 ; 49C
DW 2717 ; 50C
DW 2640 ; 51C
DW 2565 ; 52C
DW 2492 ; 53C
DW 2421 ; 54C
DW 2352 ; 55C
DW 2285 ; 56C
DW 2219 ; 57C
DW 2155 ; 58C
DW 2094 ; 59C
DW 2034 ; 60C
DW 1973 ; 61C
DW 1915 ; 62C
DW 1859 ; 63C
DW 1803 ; 64C
DW 1749 ; 65C
DW 1698 ; 66C
DW 1647 ; 67C
DW 1599 ; 68C
DW 1551 ; 69C
DW 1505 ; 70C
DW 1460 ; 71C
DW 1416 ; 72C
DW 1373 ; 73C
DW 1332 ; 74C
DW 1292 ; 75C
DW 1253 ; 76C
DW 1216 ; 77C
DW 1179 ; 78C
DW 1144 ; 79C
DW 1110 ; 80C
DW 1076 ; 81C
DW 1044 ; 82C
DW 1013 ; 83C
DW 982 ; 84C
DW 953 ; 85C
DW 924 ; 86C
DW 897 ; 87C
DW 870 ; 88C
DW 844 ; 89C
DW 819 ; 90C
DW 794 ; 91C
DW 770 ; 92C
DW 747 ; 93C
DW 725 ; 94C
DW 704 ; 95C
DW 683 ; 96C
DW 663 ; 97C
DW 643 ; 98C
DW 624 ; 99C
DW 606 ; 100C
TempEndAddr:
;===================================================================
END
联系客服