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

📄 dout.lst

📁 AVR-AT90S8535,HD8279,等开发的洁净空调专用DDC系统,包括AD/DA,PID计算等.
💻 LST
📖 第 1 页 / 共 4 页
字号:
         	
00027e 9a8e      	sbi	ddrd,6
00027f 9a96      	sbi	portd,6
         	
000280 df17      	rcall	cs8279		;显示字符
000281 e400      	ldi	r16,$40		;'-'
000282 df1e      	rcall	outxs
000283 e441      	ldi	r20,$41		;调用延时
000284 d107      	rcall	delay		
000285 e400      	ldi	r16,$40		;'-'
000286 df1a      	rcall	outxs
000287 e441      	ldi	r20,$41		;调用延时
000288 d103      	rcall	delay	
000289 e400      	ldi	r16,$40		;'-'
00028a df16      	rcall	outxs
00028b e441      	ldi	r20,$41		;调用延时
00028c d0ff      	rcall	delay	
00028d e400      	ldi	r16,$40		;'-'
00028e df12      	rcall	outxs
00028f e441      	ldi	r20,$41		;调用延时
000290 d0fb      	rcall	delay	
000291 e400      	ldi	r16,$40		;'-'
000292 df0e      	rcall	outxs
000293 e441      	ldi	r20,$41		;调用延时
000294 d0f7      	rcall	delay	
000295 e400      	ldi	r16,$40		;'-'
000296 df0a      	rcall	outxs
000297 9a95      	sbi	portd,5	
000298 e441      	ldi	r20,$41		;调用延时
000299 d0f2      	rcall	delay
00029a df0a      	rcall	beep
00029b e441      	ldi	r20,$41		;调用延时
00029c d0ef      	rcall	delay
00029d df07      	rcall	beep	
00029e 2711      	clr	r17		;ADIN 4051地址计数
         
00029f d02f      main:	rcall	ADC1
0002a0 d040      	rcall	zhcwsd		;转换成温度
0002a1 fd10      	sbrc	r17,0		;r17的0位清0跳行
0002a2 d062      	rcall	zhcsd		;转换成湿度
0002a3 2c4b      	mov	res1,m16ua
0002a4 2c5c      	mov	res2,m16ub
0002a5 d088      	rcall	htd3		;16进制转10进制
0002a6 fd10      	sbrc	r17,0		;r17的0位清0跳行
0002a7 c001      	rjmp	main0		;1\3\5\7 通道为湿度
0002a8 c002      	rjmp	main1		;0\2\4\6 通道为温度
0002a9 e100      main0:	ldi	r16,$10		;湿度补偿10%
0002aa 0e70      	add	cnt2d,r16
0002ab d0a3      main1:	rcall	display		;调用显示子程序
         	
0002ac 3017      	cpi	r17,$07	
0002ad f439      	brne	addre1		;不等于7则跳转
0002ae 2711      	clr	r17		;等于7
0002af 9938      	sbic	admux,0		;内地址
0002b0 c002        	rjmp	addre2		;如果admux=1则置0
0002b1 9a38        	sbi	admux,0		;如果admux=0则置1
0002b2 c003        	rjmp	addre3
0002b3 9838      addre2:	cbi	admux,0
0002b4 c001      	rjmp	addre3
0002b5 9513      addre1:	inc	r17
0002b6 2f21      addre3:	mov	r18,r17
0002b7 7021      	andi	r18,$01
0002b8 3021      	cpi	r18,$01
0002b9 f411      	brne	addre4
0002ba 9adb      	sbi	porta,3
0002bb c001      	rjmp	addre5
0002bc 98db      addre4:	cbi	porta,3
0002bd 2f21      addre5:	mov	r18,r17
0002be 7022      	andi	r18,$02
0002bf 3022      	cpi	r18,$02
0002c0 f411      	brne	addre6
0002c1 9adc      	sbi	porta,4
0002c2 c001      	rjmp	addre7
0002c3 98dc      addre6:	cbi	porta,4
0002c4 2f21      addre7:	mov	r18,r17
0002c5 7024      	andi	r18,$04
0002c6 3024      	cpi	r18,$04
0002c7 f411      	brne	addre8
0002c8 9add      	sbi	porta,5
0002c9 c001      	rjmp	addre9
0002ca 98dd      addre8:	cbi	porta,5
0002cb e546      addre9:	ldi	r20,0X56	;延时1秒
0002cc d0bf      	rcall	Delay
0002cd 9a36      	sbi	adcsr,6		;启动ADC
0002ce cfd0      	rjmp	main		;
         
         ;*********  子程序区  ********* 
         ;**** ADC转换子程序
0002cf 9b34      ADC1:	sbis	adcsr,adif	;转换结束 ADC中断发生跳行否则等待
0002d0 cffe      	rjmp	ADC1
0002d1 b024      	in	r2,adcl		;把转换结果送r2,r3
0002d2 b035      	in	r3,adch
0002d3 99ca      	sbic	pina,2		;读开关量
0002d4 e020      	ldi	r18,$0		;开关量关
0002d5 e021      	ldi	r18,$1		;开关量开
          			
0002d6 e0b1      	ldi	r27,$01		;传数据到SRAM 0100 处
0002d7 2fa1       	mov	r26,r17
0002d8 932c      	st	x,r18		;传开关量到 0100
0002d9 9938      	sbic	admux,0
0002da c002        	rjmp	admux1
0002db 9650        	adiw	r26,$10		;传A0数据到SRAM 0110 处
0002dc c001      	rjmp	chuan
0002dd 9690      admux1:	adiw	r26,$20		;传A1数据到SRAM 0120 处
0002de 922d      chuan:	st	x+,r2		;传低位数据 
0002df 923c      	st	x,r3		;传高位数据 
0002e0 9508      	ret	
         ;**** 数据转换成温湿度
0002e1 2c92      zhcwsd:	mov	mc16ul,r2	;T=D*40/1023=D*50/11*10/3*4/31*2
0002e2 2ca3      	mov	mc16uh,r3
0002e3 24cc      	clr	mp16uh
0002e4 e352      	ldi	mcnt16u,50
0002e5 2eb5      	mov	mp16ul,mcnt16u
0002e6 d025      	rcall	mpy16u
         	
0002e7 2cbb      	mov	mp16ul,m16ua
0002e8 2ccc      	mov	mp16uh,m16ub
0002e9 e05b      	ldi	mcnt16u,11
0002ea 2e95      	mov	mc16ul,mcnt16u
0002eb 24aa      	clr	mc16uh
0002ec d02e      	rcall	div16u
         	
0002ed 2c9b      	mov	mc16ul,m16ua
0002ee 2cac      	mov	mc16uh,m16ub
0002ef e05a      	ldi	mcnt16u,10
0002f0 2eb5      	mov	mp16ul,mcnt16u
0002f1 24cc      	clr	mp16uh
0002f2 d019      	rcall	mpy16u
         	
0002f3 2cbb      	mov	mp16ul,m16ua
0002f4 2ccc      	mov	mp16uh,m16ub
0002f5 e053      	ldi	mcnt16u,3
0002f6 2e95      	mov	mc16ul,mcnt16u
0002f7 24aa      	clr	mc16uh
0002f8 d022      	rcall	div16u
         	
0002f9 2c9b      	mov	mc16ul,m16ua
0002fa 2cac      	mov	mc16uh,m16ub
0002fb e054      	ldi	mcnt16u,4
0002fc 2eb5      	mov	mp16ul,mcnt16u
0002fd 24cc      	clr	mp16uh
0002fe d00d      	rcall	mpy16u
         	
0002ff 2cbb      	mov	mp16ul,m16ua
000300 2ccc      	mov	mp16uh,m16ub
000301 e15f      	ldi	mcnt16u,31
000302 2e95      	mov	mc16ul,mcnt16u
000303 24aa      	clr	mc16uh
000304 d016      	rcall	div16u
         	
000305 2c9b      zhcsd:	mov	mc16ul,m16ua	;湿度10~90%,应多乘2
000306 2cac      	mov	mc16uh,m16ub
000307 e052      	ldi	mcnt16u,2
000308 2eb5      	mov	mp16ul,mcnt16u
000309 24cc      	clr	mp16uh
00030a d001      	rcall	mpy16u
00030b 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		;循环计数
         
00030c 24ee      mpy16u:	clr	m16u3		;清2.3
00030d 24dd      	clr	m16u2
00030e e150      	ldi	mcnt16u,16	;
00030f 94c6      	lsr	mp16uH
000310 94b7      	ror	mp16uL
000311 f410      m16u_1:	brcc	noad8		;C清零转
000312 0cd9      	add	m16u2,mc16uL	;加被乘数到2
000313 1cea      	adc	m16u3,mc16uH	;加被乘数到3
000314 94e7      noad8:	ror	m16u3		;带进位右循环
000315 94d7      	ror	m16u2		;带进位右循环
000316 94c7      	ror	m16ub 		;带进位右循环
000317 94b7      	ror	m16ua		;带进位右循环
000318 955a      	dec	mcnt16u		;计数减1
000319 f7b9      	brne	m16u_1		;不为零转
00031a 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		
         
00031b 24dd      div16u:	clr	drem16uL		;清除余数低位
00031c 18ee      	sub	drem16uH,drem16uH	;清除余数高位
00031d e151      	ldi	dcnt16u,17		;循环计数
00031e 1cbb      d16u_1:	rol	dd16uL			;带进位左移
00031f 1ccc      	rol	dd16uH
000320 955a      	dec	dcnt16u			;decrement counter
000321 f409      	brne	d16u_2			;不为0转
000322 9508      	ret				;return
000323 1cdd      d16u_2:	rol	drem16uL		;shift dividend into remainder
000324 1cee      	rol	drem16uH
000325 18d9      	sub	drem16uL,dv16uL		;remainder = remainder - divisor
000326 08ea      	sbc	drem16uH,dv16uH	;
000327 f420      	brcc	d16u_3			;if result negative
000328 0cd9      	add	drem16uL,dv16uL		;restore remainder
000329 1cea      	adc	drem16uH,dv16uH
00032a 9488      	clc				;clear carry to be shifted into result
00032b cff2      	rjmp	d16u_1			;else
00032c 9408      d16u_3:	sec				;set carry to be shifted into result
00032d cff0      	rjmp	d16u_1
         
         ;**** 16进制转10进制子程序
00032e e130      htd3:	ldi	temp,16
00032f 2e83      	mov	count,temp
000330 2733      	clr	temp
000331 2466      	clr	cnt1d
000332 2477      	clr	cnt2d
000333 9488      	clc
          loopd:
000334 1c44      	rol	res1
000335 1c55      	rol	res2
000336 1c66      	rol	cnt1d
000337 1c77      	rol	cnt2d
000338 948a      	dec	count
000339 f409      	brne	c	
00033a 9508      	ret
00033b d001      c:	rcall	adjn
00033c cff7      	rjmp	loopd
         
          adjn:
00033d 928f      	push	count
00033e 2c86      	mov	count,cnt1d
00033f d006      	rcall	adjd1
000340 2c68      	mov	cnt1d,count
000341 2c87      	mov	count,cnt2d
000342 d003      	rcall	adjd1
000343 2c78      	mov	cnt2d,count
000344 908f      	pop	count
000345 9508      	ret
          adjd1:
000346 e033      	ldi	temp,3
000347 0d38      	add	temp,count
000348 fd33      	sbrc	temp,3
000349 2e83      	mov	count,temp
00034a e330      	ldi	temp,$30
00034b 0d38      	add	temp,count
00034c fd37      	sbrc	temp,7
00034d 2e83      	mov	count,temp
00034e 9508      	ret
         ;**** LED数显子程序
00034f 9a95      display:sbi	portd,5		;初始化8279控制字
000350 9894      	cbi	portd,4
000351 9a93      	sbi	portd,3
000352 e970      	ldi	r23,$90
000353 bb78      	out	portb,r23
000354 0000      	nop
000355 9a94      	sbi	portd,4
000356 9895      	cbi	portd,5
         
000357 e0f8      	ldi	zh,high(label*2) 	;0~15通道号切换
000358 2fe1      	mov	zl,r17
000359 9938      	sbic	admux,0
00035a c001        	rjmp	dis1
00035b c001        	rjmp	dis0
00035c 9638      dis1:  	adiw	zl,$08
00035d 95c8      dis0:	lpm
00035e ba08      	out	portb,r0
00035f 9894      	cbi	portd,4	
000360 0000      	nop
000361 9a94      	sbi	portd,4		
         
000362 2d07      	mov	r16,cnt2d
000363 9502      	swap	r16
000364 d010      	rcall	outpd
         	
000365 e1e0      	ldi	zl,$10	
000366 2d07      	mov	r16,cnt2d
000367 700f      	andi	r16,$0f
000368 0fe0      	add	zl,r16	
000369 95c8      	lpm
00036a ba08      	out	portb,r0
00036b 9894      	cbi	portd,4
00036c 0000      	nop
00036d 9a94      	sbi	portd,4
         		
00036e 2d06      	mov	r16,cnt1d
00036f 9502      	swap	r16
000370 d004      	rcall	outpd
000371 2d06      	mov	r16,cnt1d
000372 d002      	rcall	outpd
000373 9a95      	sbi	portd,5		;向8279传送数据结束
000374 9508      	ret	
         
000375 e0e0      outpd:  ldi	zl,low(label*2)
000376 700f      	andi	r16,$0f
000377 0fe0      	add	zl,r16
000378 95c8      	lpm
000379 ba08      	out	portb,r0
00037a 9894      	cbi	portd,4
00037b 0000      	nop
00037c 9a94      	sbi	portd,4	
00037d 9508      	ret
         	
00037e bb05      AOOUT:	out	portc,r16	;out data
00037f 9adf      	sbi	porta,7		;打开DAC锁存
000380 0000      	nop
000381 98df      	cbi	porta,7
000382 bb15      	out	portc,r17	;地址
000383 9ade      	sbi	porta,6		;打开地址锁存
000384 0000      	nop
000385 98de      	cbi	porta,6
000386 9508      	ret
         	
000387 bb05      DOOUT:	out	portc,r16	;out data
000388 9a97      	sbi	portD,7		;打开DO锁存
000389 0000      	nop
00038a 9897      	cbi	portD,7
00038b 9508      	ret		
         	
         	
         ;****  延时子程序
         ;delay:	ret
         	
00038c 934f      delay:  push	r20		;2t
00038d 934f      l0:     push	r20		;2t
00038e 934f      l1:     push	r20		;2t
00038f 934f      l2:     push	r20		;2t
000390 954a      l3:     dec	r20		;1t
000391 f7f1              brne	l3		;1t/2t
000392 914f              pop	r20		;2t
000393 954a              dec	r20		;1t 
000394 f7d1              brne	l2		;1t/2t
000395 914f              pop	r20		;2t
000396 954a              dec	r20		;1t 
000397 f7b1              brne	l1		;1t/2t
000398 914f              pop	r20		;2t
000399 954a              dec	r20		;1t 
00039a f791              brne	l0		;1T/2T
00039b 914f              pop	r20		;2t
00039c 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 + -