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

📄 no3b.lst

📁 AVR-AT90S8535,HD8279,等开发的洁净空调专用DDC系统,包括AD/DA,PID计算等.
💻 LST
📖 第 1 页 / 共 4 页
字号:
000304 d138      	rcall	delay		
000305 e400      	ldi	r16,$40		;'-'
000306 debe      	rcall	outxs
000307 e441      	ldi	r20,$41		;调用延时
000308 d134      	rcall	delay	
000309 e400      	ldi	r16,$40		;'-'
00030a deba      	rcall	outxs
00030b e441      	ldi	r20,$41		;调用延时
00030c d130      	rcall	delay	
00030d e400      	ldi	r16,$40		;'-'
00030e deb6      	rcall	outxs
00030f e441      	ldi	r20,$41		;调用延时
000310 d12c      	rcall	delay	
000311 e400      	ldi	r16,$40		;'-'
000312 deb2      	rcall	outxs
000313 e441      	ldi	r20,$41		;调用延时
000314 d128      	rcall	delay	
000315 e400      	ldi	r16,$40		;'-'
000316 deae      	rcall	outxs
000317 9a95      	sbi	portd,5	
000318 e441      	ldi	r20,$41		;调用延时
000319 d123      	rcall	delay
00031a deae      	rcall	beep
00031b e441      	ldi	r20,$41		;调用延时
00031c d120      	rcall	delay
00031d deab      	rcall	beep	
00031e 2711      	clr	r17		;ADIN 4051地址计数
00031f 2799      	clr	r25		;setup键计数器
         
         	;rcall	ADC1
000320 9b34      main:	sbis	adcsr,adif	;转换结束 ADC中断发生跳行否则等待   ADC1:
000321 cffe      	rjmp	main
000322 b024      	in	r2,adcl		;把转换结果送r2,r3
000323 b035      	in	r3,adch
000324 99ca      	sbic	pina,2		;读开关量
000325 e020      	ldi	r18,$0		;开关量关
000326 e021      	ldi	r18,$1		;开关量开
000327 e0b1      	ldi	r27,$01		;传数据到SRAM 0100 处
000328 2fa1       	mov	r26,r17
000329 932c      	st	x,r18		;传开关量到 0100
         
         
00032a 9938      	sbic	admux,0
00032b c002        	rjmp	admux1
00032c 9650        	adiw	r26,$10		;传A0数据到SRAM 0110 处
00032d c001      	rjmp	chuan
00032e 9690      admux1:	adiw	r26,$20		;传A1数据到SRAM 0120 处
00032f 922d      chuan:	st	x+,r2		;传低位数据 
000330 923c      	st	x,r3		;传高位数据    
         
         
         
         
         
         
         
000331 d030      	rcall	zhcwsd		;转换成温度
000332 fd10      	sbrc	r17,0		;r17的0位清0跳行
000333 d030      	rcall	zhcsd		;转换成湿度
000334 2c4f      	mov	res1,R15	;00000000000000000000
000335 2e50      	mov	res2,R16	;00000000000000000000
000336 d088      	rcall	htd3		;16进制转10进制
000337 fd10      	sbrc	r17,0		;r17的0位清0跳行
000338 c001      	rjmp	main0		;1\3\5\7 通道为湿度
000339 c002      	rjmp	main1		;0\2\4\6 通道为温度
00033a e100      main0:	ldi	r16,$10		;湿度补偿10%
00033b 0e80      	add	cnt2d,r16
00033c 3090      main1:	cpi	r25,$0		;setup键计数器为0
00033d f409      	brne	main2
00033e d0d1      	rcall	display		;调用显示子程序
00033f 3017      main2:	cpi	r17,$07	
000340 f439      	brne	addre1		;不等于7则跳转
000341 2711      	clr	r17		;等于7
000342 9938      	sbic	admux,0		;内地址
000343 c002        	rjmp	addre2		;如果admux=1则置0
000344 9a38        	sbi	admux,0		;如果admux=0则置1
000345 c003        	rjmp	addre3
000346 9838      addre2:	cbi	admux,0
000347 c001      	rjmp	addre3
000348 9513      addre1:	inc	r17
000349 2f21      addre3:	mov	r18,r17
00034a 7021      	andi	r18,$01
00034b 3021      	cpi	r18,$01
00034c f411      	brne	addre4
00034d 9adb      	sbi	porta,3
00034e c001      	rjmp	addre5
00034f 98db      addre4:	cbi	porta,3
000350 2f21      addre5:	mov	r18,r17
000351 7022      	andi	r18,$02
000352 3022      	cpi	r18,$02
000353 f411      	brne	addre6
000354 9adc      	sbi	porta,4
000355 c001      	rjmp	addre7
000356 98dc      addre6:	cbi	porta,4
000357 2f21      addre7:	mov	r18,r17
000358 7024      	andi	r18,$04
000359 3024      	cpi	r18,$04
00035a f411      	brne	addre8
00035b 9add      	sbi	porta,5
00035c c001      	rjmp	addre9
00035d 98dd      addre8:	cbi	porta,5
00035e e546      addre9:	ldi	r20,0X56	;延时1秒
00035f d0dd      	rcall	Delay
000360 9a36      	sbi	adcsr,6		;启动ADC
000361 cfbe      	rjmp	main		;
         
         ;*********  子程序区  ********* 
         ;**** ADC转换子程序 
         ;ADC1:	sbis	adcsr,adif	;转换结束 ADC中断发生跳行否则等待
         ;	rjmp	ADC1
         ;	in	r2,adcl		;把转换结果送r2,r3
         ;	in	r3,adch
         ;	sbic	pina,2		;读开关量
         ;	ldi	r18,$0		;开关量关
         ;	ldi	r18,$1		;开关量开
         ; 			
         ;	ldi	r27,$01		;传数据到SRAM 0100 处
         ; 	mov	r26,r17
         ;	st	x,r18		;传开关量到 0100
         ;	sbic	admux,0
         ;  	rjmp	admux1
         ;  	adiw	r26,$10		;传A0数据到SRAM 0110 处
         ;	rjmp	chuan
         ;admux1:	adiw	r26,$20		;传A1数据到SRAM 0120 处
         ;chuan:	st	x+,r2		;传低位数据 
         ;	st	x,r3		;传高位数据    
         ;	ret	
         ;**** 数据转换成温湿度
000362 d049      zhcwsd:	rcall	div16
000363 9508      	ret
          zhcsd:				;湿度10~90%,应多乘2
000364 d039      	rcall	MUL16
000365 9508      	ret
         	
         ;**** 四字节压缩BCD码相加子程序(R15,R14,R13,R12)+(R11,R10,R9,R8)→R15,R14,R13,R12	
000366 0cc8      ADBCD:	add	R12,R8		;最低位字节相加
000367 2d4c      	mov     R20,R12
000368 d00e      	rcall   ADAA		;在R20里进行加法十进制调整
000369 2ec4      	mov     R12,R20 	;调整后结果送回
00036a 1cd9      	adc     R13,R9		;对高位字节也照此处理
00036b 2d4d      	mov     R20,R13
00036c d00a      	rcall   ADAA
00036d 2ed4      	mov     R13,R20
00036e 1cea      	adc     R14,R10
00036f 2d4e      	mov     R20,R14
000370 d006      	rcall	ADAA
000371 2ee4      	mov	R14,R20
000372 1cfb      	adc	R15,R11
000373 2d4f      	mov     R20,R15
000374 d002      	rcall	ADAA
000375 2ef4      	mov	R15,R20 	;最高位字节相加调整完毕
000376 9508      	ret
         ;**** BCD码相加或左移十进制调整子程序
000377 b67f      ADAA: 	in	R7,SREG		;BCD码相加十进制调整子程序,先保存相加后的状态
000378 e666      	ldi	R22,$66  	   		
000379 0f46      	add     R20,R22		;予加$66
00037a b66f      	in	R6,SREG		;存加$66后的状态
00037b 2867      	or	R6,R7		;将新旧两状态或起来(只用C,H两位)
00037c fe60      	sbrs	R6,0		;若进位C置位,跳过下条指令
00037d 5640      	subi	R20,$60		;否则减去$60
00037e fe65      	sbrs	R6,5		;若半进位H置位,跳过下条指令
00037f 5046      	subi	R20,6		;否则减去6
000380 be6f      	out	SREG,R6		;恢复进位C,以保证高位字节正确相加
000381 9508      	ret
         	
         ;**** 四字节压缩BCD码相加子程序(R15,R14,R13,R12)-(R11,R10,R9,R8)→R15,R14,R13,R12
000382 18c8      SUBCD:	sub     R12,R8 	;最低位字节相减
000383 2d4c      	mov   	R20,R12
000384 d00e      	rcall	SDAA		;在R20里进行减法十进制调整
000385 2ec4      	mov	R12,R20
000386 08d9      	sbc	R13,R9
000387 2d4d      	mov	R20,R13
000388 d00a      	rcall	SDAA
000389 2ed4      	mov	R13,R20
00038a 08ea      	sbc	R14,R10
00038b 2d4e      	mov	R20,R14
00038c d006      	rcall	SDAA
00038d 2ee4      	mov	R14,R20
00038e 08fb      	sbc	R15,R11
00038f 2d4f      	mov	R20,R15
000390 d002      	rcall	SDAA
000391 2ef4      	mov	R15,R20		;最高位字节相减调整完毕并回送
000392 9508      	ret	
         ;**** 十进制减法调整子程序
000393 f420      SDAA:	brcc	SBD1		;进位位清除,跳转
000394 f435      	brhc	SBD2		;半进位清除,跳转
000395 5646      	subi	R20,$66		;否则将差减去$66
000396 9408      	sec			;并恢复借位C
000397 9508      	ret
000398 f425      SBD1:	brhc	SBD3		;半进位也清除,返回(不须调整)
000399 5046      	subi	R20,$6		;否则将差减去6
00039a 9508      	ret
00039b 5640      SBD2:	subi	R20,$60		;将差减去$60
00039c 9408      	sec 			;并恢复借位C
00039d 9508      SBD3: 	ret	
         	
         ;**** 定点整数乘法子程序 (R5,R4)×(R7,R6)→R9,R8,R7,R6
00039e e121      MUL16:	ldi 	R18,$11		;循环右移17次
00039f 2499      	clr	R9
0003a0 2488      	clr	R8		;积高位部分予清除
0003a1 9488      	clc			;第一次只移位
0003a2 f410      MLOP:	brcc	MUL1    	;进位位被清除,跳转
0003a3 0c84      	add	R8,R4
0003a4 1c95      	adc	R9,R5		;否则,被乘数加入部分积
0003a5 9497      MUL1:	ror 	R9
0003a6 9487      	ror	R8
0003a7 9477      	ror	R7
0003a8 9467      	ror	R6		;并将部分积(及乘数)带进位右移
0003a9 952a      	dec	R18
0003aa f7b9      	brne	MLOP    	;相加右移16次,结束
0003ab 9508      	ret
         
         ;**** 定点整数除法子程序 R7,R6←(R9,R8,R7,R6)÷(R5,R4)
0003ac e120      DIV16:	ldi	R18,$10		;循环左移16次
0003ad 0c66      DLOP:	lsl	R6
0003ae 1c77      	rol	R7
0003af 1c88      	rol	R8
0003b0 1c99      	rol	R9		;被除数算数左移一位
0003b1 f418      	brcc	DIV1		;进位清除,跳转
0003b2 1884      	sub	R8,R4
0003b3 0895      	sbc	R9,R5
0003b4 c006      	rjmp	DIV2		;否则将被除数(比除数多1位)减去除数并转记商1
0003b5 1884      DIV1: 	sub	R8,R4
0003b6 0895      	sbc	R9,R5		;相减试商
0003b7 f418      	brcc	DIV2		;进位被清除(够减),本位商为1
0003b8 0c84      	add	R8,R4
0003b9 1c95      	adc	R9,R5
0003ba c001      	rjmp	DIV3		;不够减,恢复被减数,本位商为0
0003bb 9463      DIV2: 	inc	R6		;记商1 
0003bc 952a      DIV3:	dec	R18      
0003bd f779      	brne	DLOP    	;16次循环,除法结束
0003be 9508      	ret
         
         ;**** HEX TO BCD 子程序
0003bf e138      htd3:	ldi	temp,24
0003c0 2ea3      	mov	count,temp
0003c1 2733      	clr	temp
0003c2 2477      	clr	cnt1d
0003c3 2488      	clr	cnt2d
0003c4 2499      	clr	cnt3d
0003c5 9488      	clc
0003c6 1c44      htd31:	rol	res1
0003c7 1c55      	rol	res2
0003c8 1c66      	rol	res3
0003c9 1c77      	rol	cnt1d
0003ca 1c88      	rol	cnt2d
0003cb 1c99      	rol	cnt3d
0003cc 94aa      	dec	count
0003cd f409      	brne	htd32	
0003ce 9508      	ret
0003cf 92af      htd32:	push	count
0003d0 2ca7      	mov	count,cnt1d
0003d1 d009      	rcall	htd33
0003d2 2c7a      	mov	cnt1d,count
0003d3 2ca8      	mov	count,cnt2d
0003d4 d006      	rcall	htd33
0003d5 2c8a      	mov	cnt2d,count
0003d6 2ca9      	mov	count,cnt3d
0003d7 d003      	rcall	htd33
0003d8 2c9a      	mov	cnt3d,count
0003d9 90af      	pop	count
0003da cfeb      	rjmp	htd31
0003db e033      htd33:	ldi	temp,3
0003dc 0d3a      	add	temp,count
0003dd fd33      	sbrc	temp,3
0003de 2ea3      	mov	count,temp
0003df e330      	ldi	temp,$30
0003e0 0d3a      	add	temp,count
0003e1 fd37      	sbrc	temp,7
0003e2 2ea3      	mov	count,temp
0003e3 9508      	ret
         	
         ;**** BCD TO HEX 子程序	
0003e4 2444      btoh:	clr	r4
0003e5 2455      	clr	r5
0003e6 e033      	ldi	r19,$03
0003e7 ee28      	ldi	r18,$e8	
0003e8 2d07      	mov	r16,r7
0003e9 9502      	swap	r16
0003ea 700f      	andi	r16,$0f
0003eb f039      	breq	btoh03
0003ec 0e53      btoh01:	add	r5,r19
0003ed 0e42      	add	r4,r18		
0003ee 1642      	cp	r4,r18
0003ef f408      	brsh	btoh02
0003f0 9453      	inc	r5
0003f1 950a      btoh02:	dec	r16
0003f2 f7c9      	brne	btoh01
         	
0003f3 e624      btoh03:	ldi	r18,$64	
0003f4 2d07      	mov	r16,r7
0003f5 700f      	andi	r16,$0f
0003f6 f031      	breq	btoh06
0003f7 0e42      btoh04:	add	r4,r18		
0003f8 1642      	cp	r4,r18
0003f9 f408      	brsh	btoh05
0003fa 9453      	inc	r5
0003fb 950a      btoh05:	dec	r16
0003fc f7d1      	brne	btoh04	
         	
0003fd e02a      btoh06:	ldi	r18,$0a	
0003fe 2d06      	mov	r16,r6
0003ff 9502      	swap	r16
000400 700f      	andi	r16,$0f
000401 f031      	breq	btoh09
000402 0e42      btoh07:	add	r4,r18		
000403 1642      	cp	r4,r18
000404 f408      	brsh	btoh08
000405 9453      	inc	r5
000406 950a      btoh08:	dec	r16
000407 f7d1      	brne	btoh07
         	
000408 2d06      btoh09:	mov	r16,r6
000409 700f      	andi	r16,$0f
00040a f021      	breq	btoh11
00040b 0e40      btoh10:	add	r4,r16		
00040c 1640      	cp	r4,r16
00040d f408      	brsh	btoh11
00040e 9453      	inc	r5
00040f 9508      btoh11:	ret
         
         ;**** LED数显子程序
000410 9a95      display:sbi	portd,5		;初始化8279控制字
000411 9894      	cbi	portd,4
000412 9a93      	sbi	portd,3
000413 e970      	ldi	r23,$90
000414 bb78      	out	portb,r23
000415 0000      	nop
000416 9a94      	sbi	portd,4
000417 9895      	cbi	portd,5
         
000418 e0fc      	ldi	zh,high(label*2);0~15通道号切换
000419 2fe1      	mov	zl,r17
00041a 9938      	sbic	admux,0
00041b 9638        	adiw	zl,8
00041c 95c8      	lpm
00041d ba08      	out	portb,r0
00041e 9894      	cbi	portd,4	
00041f 0000      	nop
000420 9a94      	sbi	portd,4		
         
000421 2d08      	mov	r16,cnt2d
000422 9502      	swap	r16
000423 d010      	rcall	outpd
         	
000424 e1e0      	ldi	zl,$10	
000425 2d08      	mov	r16,cnt2d
000426 700f      	andi	r16,$0f
000427 0fe0      	add	zl,r16	
000428 95c8      	lpm
000429 ba08      	out	portb,r0
00042a 9894      	cbi	portd,4
00042b 0000      	nop
00042c 9a94      	sbi	portd,4
         		
00042d 2d07      	mov	r16,cnt1d
00042e 9502      	swap	r16
00042f d004      	rcall	outpd
000430 2d07      	mov	r16,cnt1d
000431 d002      	rcall	outpd
000432 9a95      	sbi	portd,5		;向8279传送数据结束
000433 9508      	ret	
         
000434 e0e0      outpd:  ldi	zl,low(label*2)
000435 700f      	andi	r16,$0f
000436 0fe0      	add	zl,r16
000437 95c8      	lpm
000438 ba08      	out	portb,r0
000439 9894      	cbi	portd,4
00043a 0000      	nop
00043b 9a94      	sbi	portd,4	
00043c 9508      	ret
         
         ;****  延时子程序
         ;delay:	ret
00043d 934f      delay:  push	r20		;2t
00043e 934f      l0:     push	r20		;2t
00043f 934f      l1:     push	r20		;2t
000440 934f      l2:     push	r20		;2t
000441 954a      l3:     dec	r20		;1t
000442 f7f1              brne	l3		;1t/2t
000443 914f              pop	r20		;2t
000444 954a              dec	r20		;1t 
000445 f7d1              brne	l2		;1t/2t
000446 914f              pop	r20		;2t
000447 954a              dec	r20		;1t 
000448 f7b1              brne	l1		;1t/2t
000449 914f              pop	r20		;2t
00044a 954a              dec	r20		;1t 
00044b f791              brne	l0		;1T/2T
00044c 914f              pop	r20		;2t
00044d 9508              ret			;4t
         ;**** 数据区
          .cseg
          .org	$0600
          .dw	0x063f,0x4f5b,0x6d66,0x077d	
000600 063f
000601 4f5b
000602 6d66
000603 077d
          .dw	0x6f7f,0x7c77,0x5e39,0x7179
000604 6f7f
000605 7c77
000606 5e39
000607 7179
          .dw	0x86bf,0xcfdb,0xede6,0x87fd	
000608 86bf
000609 cfdb
00060a ede6
00060b 87fd
          .dw	0xefff00060c efff

Assembly complete with no errors.

⌨️ 快捷键说明

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