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

📄 no3a.lst

📁 AVR-AT90S8535,HD8279,等开发的洁净空调专用DDC系统,包括AD/DA,PID计算等.
💻 LST
📖 第 1 页 / 共 4 页
字号:
00029e 930d      	st	x+,r16
00029f 9583      	inc	r24
0002a0 308f      	cpi	r24,$0f
0002a1 f7a9      	brne	EEpRead
         	;rcall	cansujs		;^^^^^^^^^^^^^^^^^^^^
         	
0002a2 e908      	ldi	r16,$98		;初始化COM
0002a3 b90a              out	ucr,r16		;设置UART控制寄存器---UCR
0002a4 e5aa              ldi	r26,$5a		;波特率在SRAM的0x015a处
0002a5 910c              ld	r16,x
         	;ldi	r16,25
0002a6 b909      	out	ubrr,r16	;设置UART波特率
         	
0002a7 e003      	ldi	r16,$3		;INT0上升沿触发 0b00000011   
0002a8 bf05      	out	mcucr,r16
0002a9 e400      	ldi	r16,$40		
0002aa bf0b      	out	GIMSK,R16	;INT0可用,INT1屏蔽 0b01000000
0002ab bf0a      	out	GIFR,r16
0002ac 9478      	sei	
         	
0002ad 9894      	cbi	portd,4
0002ae e000      	ldi	r16,$00		;8279键盘显示方式初始
0002af bb08      	out	portb,r16
0002b0 9a94      	sbi	portd,4
0002b1 0000      	nop
0002b2 9894      	cbi	portd,4
0002b3 e202      	ldi	r16,$22		;8279时钟分频=2
0002b4 bb08      	out	portb,r16
0002b5 9a94      	sbi	portd,4	
         
0002b6 df18      	rcall	cs8279		;显示字符
0002b7 e400      	ldi	r16,$40		;'-'
0002b8 df1f      	rcall	outxs
0002b9 e441      	ldi	r20,$41		;调用延时
0002ba d0fc      	rcall	delay		
0002bb e400      	ldi	r16,$40		;'-'
0002bc df1b      	rcall	outxs
0002bd e441      	ldi	r20,$41		;调用延时
0002be d0f8      	rcall	delay	
0002bf e400      	ldi	r16,$40		;'-'
0002c0 df17      	rcall	outxs
0002c1 e441      	ldi	r20,$41		;调用延时
0002c2 d0f4      	rcall	delay	
0002c3 e400      	ldi	r16,$40		;'-'
0002c4 df13      	rcall	outxs
0002c5 e441      	ldi	r20,$41		;调用延时
0002c6 d0f0      	rcall	delay	
0002c7 e400      	ldi	r16,$40		;'-'
0002c8 df0f      	rcall	outxs
0002c9 e441      	ldi	r20,$41		;调用延时
0002ca d0ec      	rcall	delay	
0002cb e400      	ldi	r16,$40		;'-'
0002cc df0b      	rcall	outxs
0002cd 9a95      	sbi	portd,5	
0002ce e441      	ldi	r20,$41		;调用延时
0002cf d0e7      	rcall	delay
0002d0 df0b      	rcall	beep
0002d1 e441      	ldi	r20,$41		;调用延时
0002d2 d0e4      	rcall	delay
0002d3 df08      	rcall	beep	
0002d4 2711      	clr	r17		;ADIN 4051地址计数
0002d5 2799      	clr	r25		;setup键计数器
         
0002d6 d031      main:	rcall	ADC1
0002d7 d042      	rcall	zhcwsd		;转换成温度
0002d8 fd10      	sbrc	r17,0		;r17的0位清0跳行
0002d9 d064      	rcall	zhcsd		;转换成湿度
0002da 2c4b      	mov	res1,m16ua
0002db 2c5c      	mov	res2,m16ub
0002dc d08a      	rcall	htd3		;16进制转10进制
0002dd fd10      	sbrc	r17,0		;r17的0位清0跳行
0002de c001      	rjmp	main0		;1\3\5\7 通道为湿度
0002df c002      	rjmp	main1		;0\2\4\6 通道为温度
0002e0 e100      main0:	ldi	r16,$10		;湿度补偿10%
0002e1 0e70      	add	cnt2d,r16
0002e2 3090      main1:	cpi	r25,$0		;setup键计数器为0
0002e3 f409      	brne	main2
0002e4 d0a3      	rcall	display		;调用显示子程序
0002e5 3017      main2:	cpi	r17,$07	
0002e6 f439      	brne	addre1		;不等于7则跳转
0002e7 2711      	clr	r17		;等于7
0002e8 9938      	sbic	admux,0		;内地址
0002e9 c002        	rjmp	addre2		;如果admux=1则置0
0002ea 9a38        	sbi	admux,0		;如果admux=0则置1
0002eb c003        	rjmp	addre3
0002ec 9838      addre2:	cbi	admux,0
0002ed c001      	rjmp	addre3
0002ee 9513      addre1:	inc	r17
0002ef 2f21      addre3:	mov	r18,r17
0002f0 7021      	andi	r18,$01
0002f1 3021      	cpi	r18,$01
0002f2 f411      	brne	addre4
0002f3 9adb      	sbi	porta,3
0002f4 c001      	rjmp	addre5
0002f5 98db      addre4:	cbi	porta,3
0002f6 2f21      addre5:	mov	r18,r17
0002f7 7022      	andi	r18,$02
0002f8 3022      	cpi	r18,$02
0002f9 f411      	brne	addre6
0002fa 9adc      	sbi	porta,4
0002fb c001      	rjmp	addre7
0002fc 98dc      addre6:	cbi	porta,4
0002fd 2f21      addre7:	mov	r18,r17
0002fe 7024      	andi	r18,$04
0002ff 3024      	cpi	r18,$04
000300 f411      	brne	addre8
000301 9add      	sbi	porta,5
000302 c001      	rjmp	addre9
000303 98dd      addre8:	cbi	porta,5
000304 e546      addre9:	ldi	r20,0X56	;延时1秒
000305 d0b1      	rcall	Delay
000306 9a36      	sbi	adcsr,6		;启动ADC
000307 cfce      	rjmp	main		;
         
         ;*********  子程序区  ********* 
         ;**** ADC转换子程序
000308 9b34      ADC1:	sbis	adcsr,adif	;转换结束 ADC中断发生跳行否则等待
000309 cffe      	rjmp	ADC1
00030a b024      	in	r2,adcl		;把转换结果送r2,r3
00030b b035      	in	r3,adch
00030c 99ca      	sbic	pina,2		;读开关量
00030d e020      	ldi	r18,$0		;开关量关
00030e e021      	ldi	r18,$1		;开关量开
          			
00030f e0b1      	ldi	r27,$01		;传数据到SRAM 0100 处
000310 2fa1       	mov	r26,r17
000311 932c      	st	x,r18		;传开关量到 0100
000312 9938      	sbic	admux,0
000313 c002        	rjmp	admux1
000314 9650        	adiw	r26,$10		;传A0数据到SRAM 0110 处
000315 c001      	rjmp	chuan
000316 9690      admux1:	adiw	r26,$20		;传A1数据到SRAM 0120 处
000317 922d      chuan:	st	x+,r2		;传低位数据 
000318 923c      	st	x,r3		;传高位数据 
000319 9508      	ret	
         ;**** 数据转换成温湿度
00031a 2c92      zhcwsd:	mov	mc16ul,r2	;T=D*40/1023=D*50/11*10/3*4/31*2
00031b 2ca3      	mov	mc16uh,r3
00031c 24cc      	clr	mp16uh
00031d e352      	ldi	mcnt16u,50
00031e 2eb5      	mov	mp16ul,mcnt16u
00031f d025      	rcall	mpy16u
         	
000320 2cbb      	mov	mp16ul,m16ua
000321 2ccc      	mov	mp16uh,m16ub
000322 e05b      	ldi	mcnt16u,11
000323 2e95      	mov	mc16ul,mcnt16u
000324 24aa      	clr	mc16uh
000325 d02e      	rcall	div16u
         	
000326 2c9b      	mov	mc16ul,m16ua
000327 2cac      	mov	mc16uh,m16ub
000328 e05a      	ldi	mcnt16u,10
000329 2eb5      	mov	mp16ul,mcnt16u
00032a 24cc      	clr	mp16uh
00032b d019      	rcall	mpy16u
         	
00032c 2cbb      	mov	mp16ul,m16ua
00032d 2ccc      	mov	mp16uh,m16ub
00032e e053      	ldi	mcnt16u,3
00032f 2e95      	mov	mc16ul,mcnt16u
000330 24aa      	clr	mc16uh
000331 d022      	rcall	div16u
         	
000332 2c9b      	mov	mc16ul,m16ua
000333 2cac      	mov	mc16uh,m16ub
000334 e054      	ldi	mcnt16u,4
000335 2eb5      	mov	mp16ul,mcnt16u
000336 24cc      	clr	mp16uh
000337 d00d      	rcall	mpy16u
         	
000338 2cbb      	mov	mp16ul,m16ua
000339 2ccc      	mov	mp16uh,m16ub
00033a e15f      	ldi	mcnt16u,31
00033b 2e95      	mov	mc16ul,mcnt16u
00033c 24aa      	clr	mc16uh
00033d d016      	rcall	div16u
         	
00033e 2c9b      zhcsd:	mov	mc16ul,m16ua	;湿度10~90%,应多乘2
00033f 2cac      	mov	mc16uh,m16ub
000340 e052      	ldi	mcnt16u,2
000341 2eb5      	mov	mp16ul,mcnt16u
000342 24cc      	clr	mp16uh
000343 d001      	rcall	mpy16u
000344 9508      	ret
         ;**** 16位无符号乘法
          .def	mc16uL	=r9		;被乘数低字节
          .def	mc16uH	=r10		;被乘数高字节
          .def	mp16uL	=r11		;乘数低字节
          .def	mp16uH	=r12		;乘数高字节
          .def	m16ua	=r11		;结果 字节 0 (LSB)
          .def	m16ub	=r12		;结果 字节 1
          .def	m16u2	=r13		;结果 字节 2
          .def	m16u3	=r14		;结果 字节 3 (MSB)
          .def	mcnt16u	=r21		;循环计数
         
000345 24ee      mpy16u:	clr	m16u3		;清2.3
000346 24dd      	clr	m16u2
000347 e150      	ldi	mcnt16u,16	;
000348 94c6      	lsr	mp16uH
000349 94b7      	ror	mp16uL
00034a f410      m16u_1:	brcc	noad8		;C清零转
00034b 0cd9      	add	m16u2,mc16uL	;加被乘数到2
00034c 1cea      	adc	m16u3,mc16uH	;加被乘数到3
00034d 94e7      noad8:	ror	m16u3		;带进位右循环
00034e 94d7      	ror	m16u2		;带进位右循环
00034f 94c7      	ror	m16ub 		;带进位右循环
000350 94b7      	ror	m16ua		;带进位右循环
000351 955a      	dec	mcnt16u		;计数减1
000352 f7b9      	brne	m16u_1		;不为零转
000353 9508      	ret
         ;***** 16位无符号除法
          .def	drem16uL=r13		;余数  低位
          .def	drem16uH=r14		;余数  高位
          .def	dres16uL=r11		;  商  低位
          .def	dres16uH=r12		;  商  高位
          .def	dd16uL	=r11		;被除数 低位
          .def	dd16uH	=r12		;被除数 高位
          .def	dv16uL	=r9		;除数   低位
          .def	dv16uH	=r10		;除数   高位
          .def	dcnt16u	=r21		
         
000354 24dd      div16u:	clr	drem16uL		;清除余数低位
000355 18ee      	sub	drem16uH,drem16uH	;清除余数高位
000356 e151      	ldi	dcnt16u,17		;循环计数
000357 1cbb      d16u_1:	rol	dd16uL			;带进位左移
000358 1ccc      	rol	dd16uH
000359 955a      	dec	dcnt16u			;decrement counter
00035a f409      	brne	d16u_2			;不为0转
00035b 9508      	ret				;return
00035c 1cdd      d16u_2:	rol	drem16uL		;shift dividend into remainder
00035d 1cee      	rol	drem16uH
00035e 18d9      	sub	drem16uL,dv16uL		;remainder = remainder - divisor
00035f 08ea      	sbc	drem16uH,dv16uH	;
000360 f420      	brcc	d16u_3			;if result negative
000361 0cd9      	add	drem16uL,dv16uL		;restore remainder
000362 1cea      	adc	drem16uH,dv16uH
000363 9488      	clc				;clear carry to be shifted into result
000364 cff2      	rjmp	d16u_1			;else
000365 9408      d16u_3:	sec				;set carry to be shifted into result
000366 cff0      	rjmp	d16u_1
         
         ;**** 16进制转10进制子程序
000367 e130      htd3:	ldi	temp,16
000368 2e83      	mov	count,temp
000369 2733      	clr	temp
00036a 2466      	clr	cnt1d
00036b 2477      	clr	cnt2d
00036c 9488      	clc
          loopd:
00036d 1c44      	rol	res1
00036e 1c55      	rol	res2
00036f 1c66      	rol	cnt1d
000370 1c77      	rol	cnt2d
000371 948a      	dec	count
000372 f409      	brne	c	
000373 9508      	ret
000374 d001      c:	rcall	adjn
000375 cff7      	rjmp	loopd
         
          adjn:
000376 928f      	push	count
000377 2c86      	mov	count,cnt1d
000378 d006      	rcall	adjd1
000379 2c68      	mov	cnt1d,count
00037a 2c87      	mov	count,cnt2d
00037b d003      	rcall	adjd1
00037c 2c78      	mov	cnt2d,count
00037d 908f      	pop	count
00037e 9508      	ret
          adjd1:
00037f e033      	ldi	temp,3
000380 0d38      	add	temp,count
000381 fd33      	sbrc	temp,3
000382 2e83      	mov	count,temp
000383 e330      	ldi	temp,$30
000384 0d38      	add	temp,count
000385 fd37      	sbrc	temp,7
000386 2e83      	mov	count,temp
000387 9508      	ret
         ;**** LED数显子程序
000388 9a95      display:sbi	portd,5		;初始化8279控制字
000389 9894      	cbi	portd,4
00038a 9a93      	sbi	portd,3
00038b e970      	ldi	r23,$90
00038c bb78      	out	portb,r23
00038d 0000      	nop
00038e 9a94      	sbi	portd,4
00038f 9895      	cbi	portd,5
         
000390 e0f8      	ldi	zh,high(label*2) 	;0~15通道号切换
000391 2fe1      	mov	zl,r17
000392 9938      	sbic	admux,0
000393 c001        	rjmp	dis1
000394 c001        	rjmp	dis0
000395 9638      dis1:  	adiw	zl,$08
000396 95c8      dis0:	lpm
000397 ba08      	out	portb,r0
000398 9894      	cbi	portd,4	
000399 0000      	nop
00039a 9a94      	sbi	portd,4		
         
00039b 2d07      	mov	r16,cnt2d
00039c 9502      	swap	r16
00039d d010      	rcall	outpd
         	
00039e e1e0      	ldi	zl,$10	
00039f 2d07      	mov	r16,cnt2d
0003a0 700f      	andi	r16,$0f
0003a1 0fe0      	add	zl,r16	
0003a2 95c8      	lpm
0003a3 ba08      	out	portb,r0
0003a4 9894      	cbi	portd,4
0003a5 0000      	nop
0003a6 9a94      	sbi	portd,4
         		
0003a7 2d06      	mov	r16,cnt1d
0003a8 9502      	swap	r16
0003a9 d004      	rcall	outpd
0003aa 2d06      	mov	r16,cnt1d
0003ab d002      	rcall	outpd
0003ac 9a95      	sbi	portd,5		;向8279传送数据结束
0003ad 9508      	ret	
         
0003ae e0e0      outpd:  ldi	zl,low(label*2)
0003af 700f      	andi	r16,$0f
0003b0 0fe0      	add	zl,r16
0003b1 95c8      	lpm
0003b2 ba08      	out	portb,r0
0003b3 9894      	cbi	portd,4
0003b4 0000      	nop
0003b5 9a94      	sbi	portd,4	
0003b6 9508      	ret
         ;****  延时子程序
         ;delay:	ret
         	
0003b7 934f      delay:  push	r20		;2t
0003b8 934f      l0:     push	r20		;2t
0003b9 934f      l1:     push	r20		;2t
0003ba 934f      l2:     push	r20		;2t
0003bb 954a      l3:     dec	r20		;1t
0003bc f7f1              brne	l3		;1t/2t
0003bd 914f              pop	r20		;2t
0003be 954a              dec	r20		;1t 
0003bf f7d1              brne	l2		;1t/2t
0003c0 914f              pop	r20		;2t
0003c1 954a              dec	r20		;1t 
0003c2 f7b1              brne	l1		;1t/2t
0003c3 914f              pop	r20		;2t
0003c4 954a              dec	r20		;1t 
0003c5 f791              brne	l0		;1T/2T
0003c6 914f              pop	r20		;2t
0003c7 9508              ret			;4t
         ;**** 数据区
          .cseg
          .org	$0400
          .dw	0x063f,0x4f5b,0x6d66,0x077d	
000400 063f
000401 4f5b
000402 6d66
000403 077d
          .dw	0x6f7f,0x7c77,0x5e39,0x7179
000404 6f7f
000405 7c77
000406 5e39
000407 7179
          .dw	0x86bf,0xcfdb,0xede6,0x87fd	
000408 86bf
000409 cfdb
00040a ede6
00040b 87fd
          .dw	0xefff00040c efff

Assembly complete with no errors.

⌨️ 快捷键说明

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