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

📄 lu.asm

📁 压缩文件包括电磁炉的控制程序和其原理电路图!方便大家阅读程序
💻 ASM
📖 第 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

⌨️ 快捷键说明

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