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

📄 main02.asm

📁 motorala JL8程序代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	XDEF Entry, main
	Include 'jl8_registers.inc'
	Include 'gpregister.inc'


; code section
MyCode:     SECTION
main:
Entry:
dummyVector:
	rsp			; reset stack pointer
	jsr	initRAM
	jsr	initSPR
	jsr	parameterRead
mainLoop
	cli
	sta	COPCTL		; COP
	jsr	display
	jsr	levoutSet
	jsr	keypad
	jsr	sample
	jsr	dataDispose
	jsr	parameterSave
mainEnd
	brclr	1,flag,mainEnd
	bclr	1,flag
	jsr	time
	BRA	mainLoop       	; endless loop

; -------------------------------------
; initialize RAM
; -------------------------------------
initRAM:
	ldhx	#$60
initLP00:
	clr	,x
	incx
	cpx	#$f0
	blo	initLP00
	lda	#$08
	sta	dispBuf0
	sta	dispBuf1
	sta	dispBuf2
	rts
; -------------------------------------
; initialize special register
; -------------------------------------
initSPR
	; -----I/O-------
	lda	#$c0			; PORTB.6 7 output
	sta	PORTB
	sta	DDRB
	mov	#$1f,PORTD
	mov	#$e0,DDRD
	clr	PDCR			; disable PTD pull-up device
	mov	#$90,DDRA
	bclr	SCL,PORTA		; setting PORTA.SCL low
	mov	#$0f,PTAUE		; PORTA.0~3 pull-up enable
	clr	KBIER			; disable kaypad interrupt

	; -----initialize TIM2---------
	mov	#%01100000,T2SC		; enable TIM overflow interrupt
	mov	#$0d,T2MODH
	mov	#$00,T2MODL		; set timeout 3.3ms
	bclr	5,T2SC			; TIM active
	bset	4,T2SC			; reset TIM
	; ----------config------
	lda	#$0
	sta	CONFIG1
	lda	#$10			; Vlvr5=4.25V
	sta	CONFIG2
	rts
; -------------------------------------
; time base subroutine
; -------------------------------------
time
	inc	timeBase
	lda	#$32
	cmp	timeBase
	bls	timeLP01
	rts
timeLP01
	clr	timeBase
	inc	timeBaseS
	lda	#$3C
	cmp	timeBaseS
	bls	timeLP02
	rts
timeLP02
	clr	timeBaseS
	inc	timeBaseM
	lda	#$3C
	cmp	timeBaseM
	bls	timeLP03
	rts
timeLP03
	clr	timeBaseM
	lda	#$ff
	cmp	timeBaseH
	bls	timeLP04
	inc	timeBaseH
timeLP04
	rts
; -------------------------------------
; display time(timeBaseM:timeBaseS)
; -------------------------------------
display
	brset	7,sampleFlag,errDisp
	lda	sampleCode
	and	#$0f
	sta	dispBuf2
	lda	quotient
	and	#$0f
	sta	dispBuf0
	lda	quotient
	and	#$f0
	nsa
	sta	dispBuf1
	rts
errDisp:
	lda	errCode
	and	#$0f
	sta	dispBuf0
	lda	errCode
	and	#$f0
	nsa
	sta	dispBuf1
	mov	#$0e,dispBuf2
	rts
; -------------------------------------
; data dispose if sample end
; -------------------------------------
dataDispose:
	brset	1,sampleFlag,dataLP00
	rts
	; -----sample end,needed data dispose
dataLP00
	bclr	1,sampleFlag
	bclr	7,sampleFlag		; clear sample fault
	ldx	#$0f
	tst	TMSTR			; test
	beq	noErrorLP01

	bset	7,sampleFlag		; TMSTR result too high err
	mov	#$03,errCode		; TMSTR>0,fault
	rts
	; ---------------TMRES/TMSTR----------------
noErrorLP01:
	lda	TMRES
	cmp	TMSTR+1		; TMRES-TMSTR
	bhi	dataLP01
	brset	7,TMRES,dataLP01
	dbnzx	noErrLP02
dataLP01
	stx	sampleCode
	lsr	TMRES
	ror	TMRES+1
	ldhx	TMRES
	txa
	ldx	TMSTR+1
	div
	sta	quotient
	bcs	errLP02
	rts
noErrLP02
	lsl	TMRES+1
	rol	TMRES
	bra	noErrorLP01
errLP01
	bset	7,sampleFlag
	mov	#$04,errCode
	rts
errLP02
	bset	7,sampleFlag
	mov	#$05,errCode
	rts
; -------------------------------------
; sample,measurement charge time
; -------------------------------------
sample
	inc	sampleCounter
	lda	#$40
	cmp	sampleCounter
	beq	sampleStart	; sampleCounter=80,
	bhi	dischargeLP00	; discharge capacitor
	dec	sampleCounter	; >80,no operation
	rts
sampleStart
	bclr	4,DDRD		; setting channel 0 input
	bclr	7,T1SC
	mov	#$42,T1SC	; TIM1 reset,prescale=1/8
	lda	#$ff
	sta	T1MODH
	sta	T1MODL
	sei			; disable interrupt

	brclr	0,sampleFlag,resCharge	; sampleFlag.0=0,res charge
thermiCharge:
	mov	#%01000100,T1SC0	; input capture,capture on rising edge
	bset	thermi,PORTD	; charge
	bset	thermi,DDRD
	bset	4,T1SC		; reset TIM1
	bclr	6,sampleFlag
	cli			; enable interrupt
	rts
resCharge:
	mov	#%01000100,T1SC0	; input capture,capture on rising edge
	bset	stdRes,PORTD	; charge
	bset	stdRes,DDRD
	bset	4,T1SC		; reset TIM1
	bclr	6,sampleFlag
	cli			; enable interrupt
	rts
	; ---------dispcharge capacitor-------
dischargeLP00:
	lda	#$1
	cmp	sampleCounter
	beq	dischargeLP01
	rts
dischargeLP01
	clr	T1SC
	bclr	thermi,DDRD
	bclr	stdRes,DDRD	; as input
	mov	#$0,T1SC0
	bset	4,DDRD
	bclr	4,PTD
	rts
; -------------------------------------
; parameter save
; -------------------------------------
parameterSave
	brset	6,eepFlag,saveLP00
	brclr	7,eepFlag,saveRts	; eepRom save flag
	bclr	7,eepFlag
	mov	#$08,counterByte
	ldhx	#sc
	mov	#$1,addrEEPROM
	jsr     writeBytes
saveRts
	rts
saveLP00
	bclr	6,eepFlag
	mov	#$01,counterByte
	clr	addrEEPROM
	ldhx	#settemp
	jsr	writeBytes
	rts
; -------------------------------------
; parameter meter
; -------------------------------------
parameterRead
	jsr	BSTART
	lda	#$a0
	jsr	TXIIC		; slave address write
	clra
	jsr	TXIIC		; EEPROM address
	; -------------
	jsr	BSTART
	lda	#$A1
	jsr	TXIIC
	; -------------		; initialize register
	ldhx	#settemp
	mov	#$08,counterByte
readLP00:
	jsr	RXIIC
	sta	,x
	dbnz	counterByte,readLP01
	nop
	jsr	BSTOP
	rts
readLP01:
	incx
	clc
	jsr	BITOUT		; send ACK bit
	bra	readLP00
	
; -------------------------------------
; write 8 bytes to IIC device
; input:addrEEP(EEPROM address),counterByte,x
; output:
; -------------------------------------
writeBytes
	jsr	BSTART
	lda	#$a0		; slave address write
	jsr	TXIIC
	lda	addrEEPROM	; EEPROM address
	jsr	TXIIC
writeLP00:
	lda	,x
	jsr	TXIIC
	incx
	dbnz	counterByte,writeLP00
	nop
	jsr	BSTOP
	rts
; -------------------------------------
; transmit 8-bit data
; input:ACC
; output:
; -------------------------------------
TXIIC
	pshx
	ldx	#$08
txLP00:
	rola			; ACC.7 -->C
	jsr	BITOUT
	dbnzx	txLP00
	nop
	; transmit over,then receive ACK
	jsr	BITIN
	bcc	txLP01
	bset	0,eepFlag	; no acknowledge
	mov	#$06,errCode
txLP01
	pulx
	rts
; ---------------------------------
; receive 8-bit data
; input:none
; output:ACC
; ---------------------------------
RXIIC
	lda	#$01
rxLP00
	jsr	BITIN
	rola
	bcc	rxLP00
	rts
; ---------------------------------
; single bit receive
; input:none
; output:C
; ---------------------------------
BITIN
	bclr	SDA,DDRA	;  SDA input,ready for receive bit
	bset	SCL,PORTA
	jsr	bitDelay
	clc			; clear bit C
	brclr	SDA,PORTA,bitinLP00
	sec
bitinLP00
	bclr	SCL,PORTA
	rts
; ---------------------------------
; single bit transmit
; input:C
; output:none
; ---------------------------------
BITOUT
	bcc	bitout0
bitout1:
	bclr	SDA,DDRA	; SDA input(pull-up -->1)
	bra	bitoutLP00
bitout0:
	bset	SDA,DDRA
	bclr	SDA,PORTA	; SDA output 0
	nop
bitoutLP00
	bset	SCL,PORTA
	jsr	bitDelay
	bclr	SCL,PORTA
	rts
; ---------------------------------
; IIC start bit generation
; ---------------------------------
BSTART
	bclr	SDA,DDRA	; SDA input(pull-up -->1)
	bset	SCL,PORTA	; SCL=1
	jsr	bitDelay
	bset	SDA,DDRA
	bclr	SDA,PORTA	; SDA output 0
	jsr	bitDelay
	bclr	SCL,PORTA	; SCL=0
	rts
; ---------------------------------
; IIC stop bit generation
; ---------------------------------
BSTOP
	bset	SDA,DDRA
	bclr	SDA,PORTA	; SDA output 0
	bset	SCL,PORTA
	jsr	bitDelay
	bclr	SDA,DDRA	;  SDA input(pull-up -->1)
	bclr	SCL,PORTA
	rts
; ---------------------------------
; bit delay
; ---------------------------------
bitDelay
	nop
	rts
; -------------------------------------
; -------------------------------------
keypad
	lda	PORTA
	ora	#$f0
	inca
	beq	nokeyLP00
	clr	nokeyCounter
	clr	nokeyCounter+1
	bclr	0,keyFlag		; no any key 60S flag
	brset	0,PORTA,keyLP000
	; ---------------------
	ldhx	keySet
	sthx	keyTemp
	mov	keySet+2,keyTemp+2
	jsr	keypadSub
	ldhx	keyTemp			; subroutine
	sthx	keySet
	mov	keyTemp+2,keySet+2
	bra	keyLP00
keyLP000
	clr	keySet
	clr	keySet+1
	clr	keySet+2
keyLP00:
	brset	1,PORTA,keyLP010
	; ---------------------
	ldhx	keyUp
	sthx	keyTemp
	mov	keyUp+2,keyTemp+2
	jsr	keypadSub
	ldhx	keyTemp			; subroutine
	sthx	keyUp
	mov	keyTemp+2,keyUp+2
	bra	keyLP01
keyLP010
	clr	keyUp
	clr	keyUp+1
	clr	keyUp+2
keyLP01:
	brset	2,PORTA,keyLP020
	; ---------------------

⌨️ 快捷键说明

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