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

📄 no30a.asm

📁 AVR-AT90S8535,HD8279,等开发的洁净空调专用DDC系统,包括AD/DA,PID计算等.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;************* 宏方科技  HFKJAVR.asm  ************************
;*
;* 标题:AT90S8535 集散式洁净空调自动控制系统
;* 版本:	        1.0
;* 最后更新日期:	2002.11.01
;* 支援                 TEL: 8102124 & 8106097
;*
;*************************************************************

.include"8535def.inc"

.def    temp   = r19			;十六进制转换暂存器
.def    count  = r8			;十六进制转换计数器
.def    res1   = r4			;存放结果的十六进制低位
.def    res2   = r5			;存放结果的十六进制高位
.def    cnt1d  = r6			;存放结果的十进制低位
.def    cnt2d  = r7			;存放结果的十进制高位

.org	0x00
.equ	label=$0300
	rjmp	RESET		;  

.org	INT0addr	 	;通用中断
INTT0:	rjmp	KEYINT		;

;.org	0x06			;timerl
;INTTT:	RJMP	TINT 		;


	
.org	0x0020			;
;*****************************
;************中断*************
;*****************************
keyint:	push	r3
	push	r4
	push	r5
	push	r6
	push	r7
	push	r16		;压栈
	push	r17
	push	r18
	push	r19
	push	r20
	push	r21
	push	r22
	push	r23
	push	r24
	push	r25
	clr	r25
	clr	r24
	in	r19,portd	;保存D口状态
	in	r20,portb	;保存B口状态
	in	r21,ddrb	;保存B口方向
	in	r18,SREG
	
	ldi	r16,$00		;INT0可用,INT1屏蔽 0b01000000
	out	GIMSK,R16
	
read:	rcall	readkey		;读按键值
	cpi	r17,$c0		;启动编码
	breq	startsystem
	cpi	r17,$c8		;停止编码
	breq	stopsystem	
	cpi	r17,$d0		;设定编码
	breq	setup
	cpi	r17,$d8		;退出编码
	breq	quit1
	cpi	r17,$e0		;加编码
	breq	keyup1
	cpi	r17,$e8		;减编码
	breq	keydown1
	cpi	r17,$c1		;消音
	breq	mute

kqt:	
	ldi	r16,$40		;INT0可用,INT1屏蔽 0b01000000
	out	GIMSK,R16
	out	GIFR,r16
	out	portd,r19	;恢复D口状态
	sbi	portd,6
	out	portb,r20	;恢复B口状态
	out	ddrb,r21	;恢复B口方向
	out	SREG,r18
	pop	r25		;弹出
	pop	r24
	pop	r23
	pop	r22
	pop	r21
	pop	r20
	pop	r19
	pop	r18
	pop	r17
	pop	r16
	pop	r7
	pop	r6
	pop	r5
	pop	r4
	pop	r3
	reti			;中断返回
		
quit1:	rjmp	quit		;转退出子程序
keyup1:	rjmp	keyup		;转向左子程序
keydown1:rjmp	keydown		;转向右子程序
	
intr:	sbis	pind,2		;8279的中断信号有则跳行
	rjmp	intr		
	rjmp	read		;读8279中断信息
	
startsystem:
	rcall	beep		;BEEP
	ldi	r16,01		;启动风机输出
	out	portc,r16
	sbi	portd,7
	nop
	nop
	cbi	portd,7
	cpi	r25,$00
	brne	intr
	rjmp	kqt
	
stopsystem:
	rcall	beep
	ldi	r16,00		;停止风机输出
	out	portc,r16
	sbi	portd,7
	nop
	nop
	cbi	portd,7	
	cpi	r25,$00
	brne	intr
	rjmp	kqt
	
mute:	rcall	beep
	sbi	portd,6		;消音报警
	cpi	r25,$00
	brne	intr
	rjmp	kqt
	
setup:	rcall	beep		;设定按钮
	inc	r25
	cpi	r25,$01
	brne	jmkz1
	rcall	setupxs		;setup键按了1次
	rjmp	intr		;再去读中断口
jmkz1:	cpi	r25,$02
	breq	jmkz2		;读出EEP值,以便修改
	cpi	r25,$03
	breq	jmkz3		;修改完毕,保存EEP值
	rjmp	kqt
jmkz2:	rcall	EERead		;读出EEP值
	mov	r23,r16
	mov	res1,r23
	ldi	r16,$00
	mov	res2,r16
	rcall	htd3
	sbi	portd,5		;初始化8279控制字
	cbi	portd,4
	sbi	portd,3
	ldi	r16,$91
	out	portb,r16
	nop
	sbi	portd,4
	cbi	portd,5	
	mov	r16,cnt1d
	swap	r16
	rcall	outpd
	mov	r16,cnt1d
	rcall	outpd
	sbi	portd,5	
	rjmp	intr
jmkz3:	rcall	EEWrite		;保存EEP值
	dec	r25
	dec	r25
	rcall	showcs
	rjmp	intr
	
quit:	rcall	beep
	cpi	r25,$02
	brne	kqt4		;退出按钮eeeeeeeeeeeeeee
	rcall	showcs	
	dec	r25
	rjmp	intr
kqt4:	rjmp	kqt
	
keyup:	rcall	beep		;键盘LEFT
	cpi	r25,$00
	brne	kqt3
	rjmp	kqt
kqt3:	cpi	r25,$01
	brne	to
	dec	r24
	brmi	lp1		;r24为负转移
lp2:	rcall	showcs
	rjmp	intr		
to:	cpi	r25,$02
	brne	tczgc
	dec	r23
	mov	res1,r23
	ldi	r16,$00
	mov	res2,r16
	rcall	htd3
	sbi	portd,5		;初始化8279控制字
	cbi	portd,4
	sbi	portd,3
	ldi	r16,$91
	out	portb,r16
	nop
	sbi	portd,4
	cbi	portd,5	
	mov	r16,cnt1d
	swap	r16
	rcall	outpd
	mov	r16,cnt1d
	rcall	outpd
	sbi	portd,5	
	rjmp	intr
lp1:	ldi	r24,$b
	rjmp	lp2	
tczgc:	rjmp	intr

keydown:rcall	beep		;键盘RIGHT
	cpi	r25,$00
	brne	kqt2
	rjmp	kqt
kqt2:	cpi	r25,$01
	brne	to1	
	inc	r24
	cpi	r24,$c
	brge	lp3		;r24>=$c 跳转
lp4:	rcall	showcs
	rjmp	intr		
to1:	cpi	r25,$02
	brne	tczgc
	inc	r23
	mov	res1,r23
	ldi	r16,$00
	mov	res2,r16
	rcall	htd3
	sbi	portd,5		;初始化8279控制字
	cbi	portd,4
	sbi	portd,3
	ldi	r16,$91
	out	portb,r16
	nop
	sbi	portd,4
	cbi	portd,5	
	mov	r16,cnt1d
	swap	r16
	rcall	outpd
	mov	r16,cnt1d
	rcall	outpd
	sbi	portd,5	
	rjmp	intr
lp3:	ldi	r24,$00
	rjmp	lp4	

EERead: 
	sbic	EECR,EEWE	;if EEWE not clear
	rjmp	EERead
	ldi	r16,$01
	mov	r4,r16
	mov     r3,r24		;    wait more
	out 	EEARH,r4	;output address high for 8515
	out	EEARL,r3	;output address low for 8515
	sbi	EECR,EERE	;set EEPROM Read strobe
				;This instruction takes 4 clock cycles since
				;it halts the CPU for two clock cycles
	in	r16,EEDR	;get data
	nop
	nop
	ret
EEWrite:
	sbic	EECR,EEWE	;if EEWE not clear
	rjmp	EEWrite		;    wait more
	ldi	r16,$01
	mov	r4,r16
	mov	r3,r24
	out 	EEARH,r4	;output address high for 8515
	out	EEARL,r3	;output address low for 8515
	out	EEDR,r23	        ;output data
	sbi 	EECR,EEMWE	;set master write enable, remove if 1200 is used	
	sbi	EECR,EEWE	;set EEPROM Write strobe
	nop			;This instruction takes 4 clock cycles since
	nop			;it halts the CPU for two clock cycles
	nop
	nop	
	ret 		         	

readkey:
	;ser	r16
	;out	ddrb,r16	;置B口方向为输出
	;out	portb,r16	;置B口为输出
	;clr	r16
	;out	ddrb,r16
	;out	portb,r16	;清B口
	;sbi	portd,5		;8279写控制字
	;sbi	portd,4
	;cbi	portd,3	
	;nop
	;in	r17,pinb
	;sbi	portd,3
	;andi	r17,$7
	;cpi	r17,$00
	;breq	kqt1
	ser	r16
	out	ddrb,r16
	sbi	portd,5		;初始化8279控制字
	cbi	portd,4
	ldi	r16,$40
	out	portb,r16
	sbi	portd,4
	cbi	portd,5
	clr	r16
	out	ddrb,r16
	out	portb,r16
	cbi	portd,3
	nop
	in	r17,pinb
	sbi	portd,5	
	sbi	portd,3
	ser	r16
	out	ddrb,r16
kqt1:	ret
	
setupxs:rcall	cs8279		;显示字符

	ldi	r16,$6d		;'S'
	rcall	outxs	
	ldi	r16,$79		;'E'
	rcall	outxs
	ldi	r16,$78		;'t'
	rcall	outxs
	ldi	r16,$3e		;'u'
	rcall	outxs
	ldi	r16,$73		;'p'
	rcall	outxs
	sbi	portd,5	
	ldi	r20,$56		;调用延时
	rcall	delay
	rcall	cs8279		;显示温度设定
	ldi	r16,$78		;'t'
	rcall	outxs
	ldi	r16,$06		;'-'
	rcall	outxs
	rcall	jy
	ret
	
cs8279:	sbi	portd,5		;初始化8279控制字
	cbi	portd,4
	sbi	portd,3
	ldi	r16,$90
	out	portb,r16
	nop
	sbi	portd,4
	cbi	portd,5	
	ret
			
outxs:				;显示输出
	cbi	portd,4
	out	portb,r16
	sbi	portd,4	
	ret

beep:	
	cbi	portd,6	
	ldi	r20,$19		;调用延时
	rcall	delay
	sbi	portd,6	
	ret
	
jy:	ldi	r16,$40		;'-'
	rcall	outxs	
	ldi	r16,$40		;'-'
	rcall	outxs	
	ldi	r16,$40		;'-'
	rcall	outxs	
	sbi	portd,5	
	ret	

showcs:	rcall	cs8279
	cpi	r24,$00		;显示温度设定
	brne	csbsf1
	ldi	r16,$78		;'t'
	rcall	outxs	
	ldi	r16,$06		;'1'
	rcall	outxs	
	rcall	jy
	ret
csbsf1:	cpi	r24,$01		;显示温度周期
	brne	csbsf2
	ldi	r16,$6d		;'s'
	rcall	outxs	
	ldi	r16,$06		;'1'
	rcall	outxs	
	rcall	jy
	ret
csbsf2:	cpi	r24,$02		;显示湿度设定
	brne	csbsf3
	ldi	r16,$76		;'h'
	rcall	outxs	
	ldi	r16,$06		;'1'
	rcall	outxs	
	rcall	jy
	ret
csbsf3:	cpi	r24,$03		;显示湿度周期
	brne	csbsf4
	ldi	r16,$6d		;'s'
	rcall	outxs	
	ldi	r16,$5b		;'2'
	rcall	outxs	
	rcall	jy
	ret
csbsf4:	cpi	r24,$04		;显示P1
	brne	csbsf5
	ldi	r16,$73		;'p'
	rcall	outxs	
	ldi	r16,$06		;'1'
	rcall	outxs	
	rcall	jy
	ret
csbsf5:	cpi	r24,$05		;显示I1
	brne	csbsf6
	ldi	r16,$30		;'i'
	rcall	outxs	
	ldi	r16,$06		;'1'
	rcall	outxs	
	rcall	jy
	ret
csbsf6:	cpi	r24,$06		;显示D1
	brne	csbsf7
	ldi	r16,$5e		;'d'
	rcall	outxs	
	ldi	r16,$06		;'1'
	rcall	outxs	
	rcall	jy
	ret
csbsf7:	cpi	r24,$07		;显示P2
	brne	csbsf8

⌨️ 快捷键说明

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