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

📄 dcl1.c

📁 基于SN8P1706芯片的电磁炉(源程序)
💻 C
📖 第 1 页 / 共 2 页
字号:
Title induction cooker controller
;OSC:16.000MHz
 chip SN8P1706
//{{SONIX_CODE_OPTION
 .Code_Option OSG  Enable
 .Code_Option High_Clk 12M_X''tal
 .Code_Option High_Clk/2 Disable
 .Code_Option Security Enable
 .Code_Option LVD  Enable
 .Code_Option Watch_Dog Enable
//}}SONIX_CODE_OPTION
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 InitPort macro 
 mov a,#01110000b  ;p4.7,p4.3 as A/D input 
 b0mov P4M,a
 
 mov a,#00111111b
 b0mov P5M,a 
 
 mov a,#0xff
 b0mov P2M,a
 mov a,#11000000b
 b0mov P1M,a
 @set_pur 0x23
 clr P1 
 clr P2
 clr P4
 clr P5 
 mov a,#0x44
 b0mov TC1M,a
 mov a,#225  ;225
 b0mov TC1R,a
 b0bset FTC1OUT  ;buzzer on
 b0bset FTC1ENB
 
 mov a,#11110101b  ;1:16 16uS
 b0mov TC0M,a
 mov a,#0xff
 b0mov TC0R,a
 mov a,#11110000b  ;1:2 1uS
 b0mov T0M,a
 mov a,#00010000b
 b0mov INTEN,a
 clr INTRQ
 endm
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;*****************************
;clear ram (00h-->7fh)
;*****************************
 ClearRam macro
 clr Y
 b0mov Z,#0x7f
Clear_Ram01: 
 clr @YZ
 decms Z
 jmp Clear_Ram01
 endm
;\\\\\\\\\\\\\\\\\\\\\\
 BuzzerActive macro
 b0bts1 BuzzerEnable
 jmp BuzzerStop
        b0mov a,BuzNumber
        b0bts0 FZ 
        jmp BuzzerStop
        b0bts1 BuzzerShort
        jmp BuzNormal01
        mov a,#50
        jmp BuzNormal02
BuzNormal01:
 mov a,#100
BuzNormal02:          
        sub a,TimerBuz
        b0bts0 FC
        jmp BuzzerRet
            ;else   buzzer time over
BuzzerTimeOver:
        clr TimerBuz
        b0bts1 BuzzerIsOn
        jmp BuzzerTimeOver01
        b0bclr BuzzerIsOn  ;buzzer on
        b0bset BUZZER
        jmp BuzzerTimeOver02
BuzzerTimeOver01:
 b0bclr BUZZER   ;buzzer off
        b0bset BuzzerIsOn               
BuzzerTimeOver02:
 b0bts0 BuzzerIsOn
 jmp BuzzerRet
        decms  BuzNumber
 jmp BuzzerRet                
BuzzerStop:
 b0bclr BuzzerEnable
        b0bclr BuzzerIsOn
BuzzerRet:
 endm
;***************************** 
 include define.asm
.CODE 
 org 0x00
 jmp Reset
 org 0x08
 jmp Interrupt

 org 0x10
;*******************
Multiplication:
; b0mov a,CurrentL
 b0mov a,VoltageL
 mul a,VoltageL
 b0mov ELO,a
 b0mov a,R
 b0mov ALO,a
; b0mov a,CurrentH
 b0mov a,VoltageH
 mul a,VoltageL
 add a,ALO
 b0mov EHI,a
 b0mov a,R
 b0mov DLO,a
 b0bts0 FC
 incms DLO
 nop
 clr DHI

; b0mov a,CurrentL
 b0mov a,VoltageL
 mul a,VoltageH
 b0mov CLO,a
 b0mov a,R
 b0mov ALO,a
; b0mov a,CurrentH
 b0mov a,VoltageH
 mul a,VoltageH
 add a,ALO
 b0mov CHI,a
 b0mov a,R
 b0mov BLO,a
 b0bts0 FC
 incms BLO
 nop
 
 b0bclr FC
 b0mov a,CLO
 adc EHI,a
 b0mov a,CHI
 adc DLO,a
 b0mov a,BLO
 adc DHI,a 
 
 b0mov a,ELO
 mul a,CurrentH
 b0mov CLO,a
 b0mov a,R
 b0mov ALO,a
 b0mov a,EHI
 mul a,CurrentH
 add a,ALO
 b0mov CHI,a
 b0mov a,R
 b0mov ALO,a
 b0mov a,DLO
 mul a,CurrentH
 add a,ALO
 b0mov BLO,a
 b0mov a,R
 b0mov BHI,a

 b0mov a,ELO
 mul a,CurrentL
 b0mov ELO,a
 b0mov a,R
 b0mov ALO,a
 b0mov a,EHI
 mul a,CurrentL
 add a,ALO
 b0mov EHI,a
 b0mov a,R
 b0mov ALO,a
 b0mov a,DLO
 mul a,CurrentL
 add a,ALO
 b0mov DLO,a
 b0mov a,R
 b0mov DHI,a
 
 b0bclr FC
 b0mov a,CLO
 adc EHI,a
 b0mov a,CHI
 adc DLO,a
 b0mov a,BLO
 adc DHI,a
 b0bts0 FC
 incms BHI
 nop
 ret
 ;;;;;====================================
Mpy16: ;;;INPUT (BY MULTIPLIER)AHI,ALO;(MULTIPLIER)BHI,BLO
 ;;;OUT  DHI,DLO,EHI,ELO
 ;;;======================================
        mov a,#10h
        b0mov counter,a
        clr DHI
        clr DLO
        b0bclr FC
 ;;;;;
Mpyloop:
        rrcm     BHI
        rrcm     BLO
       b0bts1 FC
        jmp Notadd
 ;;;;
        mov a,ALO
        add DLO,a
        b0bts0 FC
        incms DHI
        nop
        mov a,AHI
        add DHI,a
 ;;;;
Notadd:
 rrcm     DHI
 rrcm     DLO
 rrcm     EHI                            
 rrcm     ELO                            
 decms counter
 jmp Mpyloop
 
 ret
 ;;==========================================
Div32: ;;;INPUT    :(DIVID)AHI,ALO;(BY DIVID)DHI,DLO,EHI,ELO
 ;;;OUTPUT   :(RESULT)BHI,BLO;(REST)CHI,CLO
 ;;==========================================
 mov a,#20h
 b0mov counter,a
 clr BHI
 clr BLO
 clr CHI
 clr CLO
 ;;;;;;;;;;;
Divloop:
 b0bclr FC
 rlcm ELO
 rlcm EHI
 rlcm DLO
 rlcm DHI
 rlcm CLO
 rlcm CHI
 b0mov a,CHI
 sub a,AHI
 b0bts1 FZ
 jmp Nochk
 b0mov a,CLO
 sub a,ALO
 b0bts1 FC
 jmp Nogo
 jmp Nochk01 
Nochk:
 b0bts1 FC
 jmp Nogo             
 b0mov a,CLO
 sub a,ALO
 b0bts1 FC
 decms CHI
 nop
Nochk01:       
 b0mov a,CLO
 sub a,ALO
 b0mov CLO,a
 b0mov a,CHI
 sub a,AHI
 b0mov CHI,a     
 b0bset FC
Nogo:
 rlcm BLO
 rlcm BHI
 decms counter
 jmp Divloop
 ret
;*********
;***************************
CalculatePower:
; CLR AHI
; mov a,#0xdc
; b0mov ALO,a  ;220V
; b0mov a,CurrentL
; b0mov BLO,a
; b0mov a,CurrentH
; b0mov BHI,a
; call Mpy16
 b0mov a,CurrentH
 sub a,#3
 b0bts1 FC
; jmp $+5
; b0mov a,CurrentL
; sub a,#0xf0
; b0bts1 FC
 jmp CalculatePowerError
 clr errorcounter1
 b0bclr CurrentError
 call Multiplication

 b0mov a,BHI
 b0bts1 FZ
 jmp DecTime
 
 b0mov a,DHI
 sub a,PowerBufferHH
 b0bts1 FZ
 jmp NotAdj


 b0mov a,DLO
 sub a,PowerBufferH
 b0bts1 FZ
 jmp NotAdj
AdjMiddle:
 b0mov a,EHI
 sub a,PowerBufferM
 b0bts1 FZ
 jmp NotAdj
AdjLow:
 b0mov a,ELO
 sub a,PowerBufferL
NotAdj: 
 b0bts1 FC
 jmp IncTime
DecTime:
 b0mov a,TimerDrvH
 sub a,#0x30
 b0bts1 FC
 ret
 decms TimerDrvH
 nop
 ret
IncTime:
 b0mov a,TimerDrvH
 sub a,#0xf0
 b0bts0 FC
 ret
 incms TimerDrvH
 nop
 ret
CalculatePowerError:
 b0mov a,errorcounter1
 sub a,#250
 b0bts0 FC 
 jmp $+3
 incms errorcounter1
 ret
 b0bset CurrentError
 ret  
;****************************
BuzShort_10:
 b0bset BuzzerShort
 mov a,#10
 jmp BuzActive
BuzLong_5:
 b0bclr BuzzerShort
 mov a,#5
        jmp BuzActive
BuzShort_3:        
 mov a,#3
 jmp $+2
BuzShort_1:
 mov a,#1
 b0bset BuzzerShort 
BuzActive:
 b0mov BuzNumber,a
        b0bset BuzzerIsOn
        clr TimerBuz
        b0bclr BUZZER
        b0bset BuzzerEnable
        ret

;****************************
;Test temperature subroutine
;****************************
TestTemperature:
; b0bclr TestTemperatureEnable
 b0bclr FADLEN
 mov a,#0x93
 b0mov ADM,a
 mov a,#0x20
 b0mov ADR,a
 b0bset FADS
 b0bts1 FEOC
 jmp $-1  
 b0mov a,ADB
 b0mov resultH,a
 b0mov a,ADR
 and a,#00001111b
 b0mov resultL,a
 swap resultH 
 and a,#11110000b
 or resultL,a
 swapm resultH
 mov a,#00001111b
 and resultH,a
 
 b0mov a,resultH
 b0bts1 FZ
 jmp $+5
 b0mov a,resultL
 sub a,#0x10
 b0bts1 FC
 jmp TestTemperature01 
 
 b0mov a,resultH
 sub a,#0x0f
 b0bts0 FC
 jmp TestTemperature01

 clr errorcounter
 b0bclr TempError
 ret
TestTemperature01:
 b0mov a,errorcounter
 sub a,#5
 b0bts0 FC 
 jmp $+3
 incms errorcounter
 ret
 b0bset TempError
 ret
;****************************
;Test  current subroutine
;****************************
TestCurrent:
 b0bclr FADLEN
 mov a,#0x97
 b0mov ADM,a
 mov a,#0x20
 b0mov ADR,a
 b0bset FADS
 b0bts1 FEOC
 jmp $-1  
 b0mov a,ADB
 b0mov CurrentH,a
 b0mov a,ADR
 and a,#00001111b
 b0mov CurrentL,a
 swap CurrentH 
 and a,#11110000b
 or CurrentL,a
 swapm CurrentH
 mov a,#00001111b
 and CurrentH,a
 ret 
;****************************
;Test  voltage subroutine
;****************************
TestVoltage:
 b0bclr FADLEN
 mov a,#0x91
 b0mov ADM,a
 mov a,#0x20
 b0mov ADR,a
 b0bset FADS
 b0bts1 FEOC
 jmp $-1  
 b0mov a,ADB
 b0mov VoltageH,a
 b0mov a,ADR
 and a,#00001111b
 b0mov VoltageL,a
 swap VoltageH 
 and a,#11110000b
 or VoltageL,a
 swapm VoltageH
 mov a,#00001111b
 and VoltageH,a
 ret  
;*********************
SystemTimerEnd:
 b0bclr F4mS
 incms TimerBuz
 nop
 incms Timer
 nop
 b0bclr Flash
 b0mov a,Timer
 sub a,#125
 b0bts1 FC
 jmp SystemTimerEnd01
 b0bset Flash
 b0mov a,Timer
 sub a,#250
 b0bts1 FC
 jmp SystemTimerEnd01
 clr Timer
 b0bts1 FanActive
 jmp $+5
 decms FanTime
 jmp $+3
 b0bclr FanActive
 b0bclr Fan
 
 b0bts1 Timering
 jmp SystemTimerEnd01
 incms Second
 nop
 b0mov a,Second
 sub a,#60
 b0bts1 FC
 jmp SystemTimerEnd01
 clr Second
 decms Minute
 nop
SystemTimerEnd01: 
 incms TestTemperatureTime
 nop
 b0mov a,TestTemperatureTime
 sub a,#125
 b0bts1 FC
 jmp $+3
 clr TestTemperatureTime
 b0bset TestTemperatureEnable 
 
 incms TestCurrentTime
 nop
 mov a,TestCurrentTime
 sub a,#10
 b0bts1 FC
 jmp $+3
 clr TestCurrentTime
 b0bset TestCurrentEnable

 incms KeyScanTime
 nop
 mov a,KeyScanTime
 sub a,#10
 b0bts1 FC
 jmp $+3
 clr KeyScanTime
 b0bset KeyScanEnable
DisplayScan:
 clr P2
 call TimeDisplay  
 incms commbuffer
 nop
 b0mov a,commbuffer
 sub a,#0x05
 b0bts1 FC
 jmp DisplayScan01
 clr commbuffer
; clr keyactivebuffer

⌨️ 快捷键说明

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