打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用HT单片机的调功温控
这是使用我国台湾盛群单片机 HT48R30 制作的调功温控项目,该文曾经在<<家庭电子>>杂志发表. 作为单片机实践的参考,现在公开发布其有关文件,可以直接使用.并且希望有更多更好的修改完善.
由于采用工业 PID 算法,相关系数需根据实际使用环境进行调整,才能达到比较理想的效果,根据现阶段的测试,第一次温度上升有大约5--10度的过冲,温度稳定点在+/- 1度范围内,(开发时用一800W发热盘控制温度,测试其表面温度,主要是温度测试有一定的滞后,所以可能会造成过冲)。 
 
 
 
HT48R30 调功温控完整源代码

;==   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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
电压表
分享雷军22年前编写的代码
单片机和Pc机串口通信<转>_飞鸟留痕
时钟芯片PCF8583应用
六足爬虫机器人设计
如何判断一个程序,是否当前运行在虚拟机中,而不是我现在用的电脑?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服