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

📄 no3b.lst

📁 AVR-AT90S8535,HD8279,等开发的洁净空调专用DDC系统,包括AD/DA,PID计算等.
💻 LST
📖 第 1 页 / 共 4 页
字号:
000021 924f      	push	r4
000022 930f      	push	r16
000023 931f      	push	r17
000024 932f      	push	r18
000025 933f      	push	r19
000026 937f      	push	r23
000027 938f      	push	r24
000028 93cf      	push	r28
000029 93df      	push	r29
00002a b72f      	in	r18,SREG	;保存状态寄存器
00002b 2733      	clr	r19
00002c 995c      lp00:	sbic	usr,4		;低电平跳行,高电平帧错误
00002d c001      	rjmp	lp01
00002e c004      	rjmp	lp02
00002f 9533      lp01:	inc	r19
000030 3f3f      	cpi	r19,$ff
000031 f0f9      	breq	qt	
000032 cff9      	rjmp	lp00
000033 b11c      lp02:	in	r17,udr		;读串口数据到r17
000034 e0d1      	ldi	r29,$01
000035 e5c8      	ldi	r28,$58		;SRAM中站号地址
000036 8108      	ld	r16,y
000037 1310      	cpse	r17,r16		;是本站则跳行执行
000038 c018      	rjmp	qt		;非本站,退出通讯中断
         
000039 9b5d      lp03:	sbis	usr,5		;测试USR第5位发送寄存器是否空
00003a cffe      	rjmp	lp03
00003b b90c      	out	udr,r16		;是本站,请求发送第二次指令数据
00003c 2733      	clr	r19
00003d 995c      lp04:	sbic	usr,4		;低电平跳行,高电平帧错误
00003e c001      	rjmp	lp05
00003f c004      	rjmp	lp06
000040 9533      lp05:	inc	r19
000041 3f3f      	cpi	r19,$ff
000042 f071      	breq	qt
000043 cff9      	rjmp	lp04
000044 b11c      lp06:	in	r17,udr		;读串口数据到r17
000045 3f1f      	cpi	r17,$ff		;第二次指令数据处理
000046 f419      	brne	lp07			
000047 d015      	rcall	txdata		;FF指令为上传数据
000048 d014      	rcall	txdata
000049 c007      	rjmp	qt
00004a 3f1e      lp07:	cpi	r17,$fe
00004b f411      	brne	lp08
00004c d021      	rcall	zxml		;FE指令为执行命令
00004d c003      	rjmp	qt
00004e 3f1d      lp08:	cpi	r17,$fd
00004f f409      	brne	qt
000050 d02f      	rcall	xgml		;FD指令为修改参数
         
000051 bf2f      qt:	out	sreg,r18	;退出通讯中断
000052 91df      	pop	r29
000053 91cf      	pop	r28
000054 918f      	pop	r24
000055 917f      	pop	r23
000056 913f      	pop	r19
000057 912f      	pop	r18
000058 911f      	pop	r17
000059 910f      	pop	r16
00005a 904f      	pop	r4
00005b 903f      	pop	r3
00005c 9518      	reti
         		
00005d e0d1      txdata:	ldi	r29,$01		;发送数据
00005e e0c0      	ldi	r28,$00
00005f 9109      lp09:	ld	r16,y+
000060 9b5d      lp10:	sbis	usr,5		;测试USR第5位发送寄存器是否空
000061 cffe      	rjmp	lp10
000062 b90c      	out	udr,r16		;发送数据
000063 35cd      	cpi	r28,$5D
000064 f7d1      	brne	lp09
000065 9b5d      lp11:	sbis	usr,5		;测试USR第5位发送寄存器是否空
000066 cffe      	rjmp	lp11
000067 ef0f      	ldi	r16,$ff		;上传数据结束符号FF
000068 b90c      	out	udr,r16	
000069 9b5d      lp12:	sbis	usr,5		;测试USR第5位发送寄存器是否空
00006a cffe      	rjmp	lp12
00006b ef0f      	ldi	r16,$ff		;上传数据结束符号FF
00006c b90c      	out	udr,r16			
00006d 9508      	ret	
         
00006e 2733      zxml:	clr	r19		;执行命令
00006f 9b5f      lp13:	sbis	usr,7		;测试接收寄存器是否为空
000070 c001      	rjmp	lp14
000071 c004      	rjmp	lp15
000072 9533      lp14:	inc	r19
000073 3f3f      	cpi	r19,$ff
000074 f2e1      	breq	qt
000075 cff9      	rjmp	lp13		;低电平为空
000076 2733      lp15:	clr	r19
000077 995c      lp16:	sbic	usr,4		;测试帧是否正确
000078 c001      	rjmp	lp17
000079 c004      	rjmp	lp18
00007a 9533      lp17:	inc	r19
00007b 3f3f      	cpi	r19,$ff
00007c f2a1      	breq	qt
00007d cff9      	rjmp	lp16		;帧错误为高电平
00007e b11c      lp18:	in	r17,udr	
         	
         	
00007f 9508      	ret	
         	
000080 e0d1      xgml:	ldi	r29,$01		;修改参数子程序
000081 e6c0      	ldi	r28,$60
000082 2733      	clr	r19
000083 9b5f      lp19:	sbis	usr,7		;测试接收寄存器是否为空
000084 c001      	rjmp	lp20
000085 c004      	rjmp	lp21
000086 9533      lp20:	inc	r19
000087 3f3f      	cpi	r19,$ff
000088 f241      	breq	qt
000089 cff9      	rjmp	lp19		;低电平为空
00008a b11c      lp21:	in	r17,udr
00008b 9319      	st	y+,r17
00008c 39ca      	cpi	r28,$9A		;接收参数29*2=58个
00008d f7a9      	brne	lp19
         
00008e e6c0      	ldi	r28,$60
00008f 8d1d      lp22:	ldd	r17,y+29	;第一次参数
000090 9109      	ld	r16,y+		;第二次参数
000091 1310      	cpse	r17,r16
000092 c016      	rjmp	xgml2		;如果两次参数不一致
000093 37cd      	cpi	r28,$7D
000094 f7d1      	brne	lp22		;如果未比较完
000095 ef0d      	ldi	r16,$fd
000096 9b5d      lp23:	sbis	usr,5		;测试USR第5位发送寄存器是否空
000097 cffe      	rjmp	lp23
000098 b90c      	out	udr,r16		;接收数据成功,可以修改参数,返回FD
         	
000099 e4c0      	ldi	r28,$40
00009a a118      xgml3:	ldd	r17,y+32
00009b 9109      	ld	r16,y+
00009c 1310      	cpse	r17,r16
00009d c004      	rjmp	xgml4
00009e 35cd      xgml5:	cpi	r28,$5D
00009f f7d1      	brne	xgml3
0000a0 d1bd      	rcall	cansujs		;^^^^^^^^^^^^^^^^^^^^
0000a1 9508      	ret
0000a2 2f8c      xgml4:	mov	r24,r28
0000a3 5481      	subi	r24,$41		;对应EEP地址为0x0100开始
0000a4 2f71      	mov	r23,r17
0000a5 d0df      	rcall	EEWrite
0000a6 95ca      	dec	r28
0000a7 9319      	st	y+,r17		;更新SRAM中的EEP参数
0000a8 cff5      	rjmp	xgml5
         	
0000a9 ef0c      xgml2:	ldi	r16,$fc
0000aa 9b5d      	sbis	usr,5		;测试USR第5位发送寄存器是否空
0000ab cffd      	rjmp	xgml2
0000ac b90c      	out	udr,r16		;修改参数失败,返回FC	
0000ad 9508      	ret
         		
          EXT_INT0:			;键盘中断子程序
0000ae 923f      	push	r3
0000af 924f      	push	r4
0000b0 925f      	push	r5
0000b1 926f      	push	r6
0000b2 927f      	push	r7
0000b3 930f      	push	r16		;压栈
0000b4 931f      	push	r17
0000b5 932f      	push	r18
0000b6 933f      	push	r19
0000b7 934f      	push	r20
0000b8 935f      	push	r21
0000b9 936f      	push	r22
0000ba 937f      	push	r23
0000bb 938f      	push	r24
0000bc 93cf      	push	r28
0000bd 93df      	push	r29
0000be 2799      	clr	r25
0000bf 2788      	clr	r24
0000c0 b332      	in	r19,portd	;保存D口状态
0000c1 b348      	in	r20,portb	;保存B口状态
0000c2 b357      	in	r21,ddrb	;保存B口方向
0000c3 b72f      	in	r18,SREG
         
0000c4 d0cf      	rcall	readkey		;读按键值
0000c5 3c10      	cpi	r17,$c0		;启动编码
0000c6 f129      	breq	startsystem
0000c7 3c18      	cpi	r17,$c8		;停止编码
0000c8 f159      	breq	stopsystem	
0000c9 3d10      	cpi	r17,$d0		;设定编码
0000ca f0f1      	breq	setup1
0000cb 3d18      	cpi	r17,$d8		;退出编码
0000cc f179      	breq	quit
0000cd 3e10      	cpi	r17,$e0		;加编码
0000ce f0d9      	breq	keyup1
0000cf 3e18      	cpi	r17,$e8		;减编码
0000d0 f0d1      	breq	keydown1
0000d1 3c11      	cpi	r17,$c1		;消音
0000d2 f189      	breq	mute
         	
0000d3 bb32      kqt:	out	portd,r19	;恢复D口状态
0000d4 9a96      	sbi	portd,6
0000d5 bb48      	out	portb,r20	;恢复B口状态
0000d6 bb57      	out	ddrb,r21	;恢复B口方向
0000d7 bf2f      	out	SREG,r18
0000d8 91df      	pop	r29		;弹出
0000d9 91cf      	pop	r28
0000da 918f      	pop	r24
0000db 917f      	pop	r23
0000dc 916f      	pop	r22
0000dd 915f      	pop	r21
0000de 914f      	pop	r20
0000df 913f      	pop	r19
0000e0 912f      	pop	r18
0000e1 911f      	pop	r17
0000e2 910f      	pop	r16
0000e3 907f      	pop	r7
0000e4 906f      	pop	r6
0000e5 905f      	pop	r5
0000e6 904f      	pop	r4
0000e7 903f      	pop	r3
0000e8 9518      	reti			;中断返回
0000e9 c01d      setup1:	rjmp	setup	
         ;quit1:	rjmp	quit		;转退出子程序
0000ea c052      keyup1:	rjmp	keyup		;转向左子程序
0000eb c070      keydown1:rjmp	keydown		;转向右子程序
          startsystem:
0000ec d0dc      	rcall	beep		;BEEP
0000ed e001      	ldi	r16,01		;启动风机输出
0000ee bb05      	out	portc,r16
0000ef 9a97      	sbi	portd,7
0000f0 0000      	nop
0000f1 0000      	nop
0000f2 9897      	cbi	portd,7
0000f3 cfdf      	rjmp	kqt
          stopsystem:
0000f4 d0d4      	rcall	beep
0000f5 e000      	ldi	r16,00		;停止风机输出
0000f6 bb05      	out	portc,r16
0000f7 9a97      	sbi	portd,7
0000f8 0000      	nop
0000f9 0000      	nop
0000fa 9897      	cbi	portd,7	
0000fb cfd7      	rjmp	kqt
         	
0000fc d0cc      quit:	rcall	beep
0000fd 3092      	cpi	r25,$02
0000fe f419      	brne	quit0		;退出按钮
0000ff d0d6      	rcall	showcs	
000100 959a      	dec	r25
000101 cfd1      	rjmp	kqt
000102 2799      quit0:	clr	r25		;0次或1次
000103 cfcf      	rjmp	kqt	
         	
000104 d0c4      mute:	rcall	beep
000105 9a96      	sbi	portd,6		;消音报警
000106 cfcc      	rjmp	kqt
         	
000107 d0c1      setup:	rcall	beep		;设定按钮
000108 9593      	inc	r25
000109 3091      	cpi	r25,$01
00010a f461      	brne	jmkz1
00010b d09b      	rcall	setupxs		;setup键按了1次
00010c e0d1      	ldi	r29,$01		;yh=$01
00010d e9cd      	ldi	r28,$9d		;yl=$9d
00010e e0b1      	ldi	r27,$01		;xh=$01
00010f e4a0      	ldi	r26,$40		;xl=$40
000110 2700      	clr	r16
000111 9309      	st	y+,r16		;初始0x019d为0
000112 910d      	ld	r16,x+
000113 9309      	st	y+,r16		;SRAM 0x019e中数=0x0140中数
000114 910d      	ld	r16,x+
000115 9309      	st	y+,r16		;SRAM 0x019f中数=0x0141中数	
000116 cfbc      	rjmp	kqt		;退出
000117 3092      jmkz1:	cpi	r25,$02
000118 f021      	breq	jmkz2		;读出EEP在SRAM中的映射值,以便修改
000119 3093      	cpi	r25,$03
00011a f069      	breq	jmkz3		;修改完毕,保存EEP值
00011b 2799      	clr	r25
00011c cfb6      	rjmp	kqt
00011d e0d1      jmkz2:	ldi	r29,$01		;yh=$01
00011e e9cd      	ldi	r28,$9d		;yl=$9d
00011f 91a9      	ld	r26,y+
000120 95a3      	inc	r26
000121 96df      	adiw	r26,63		;xl=$40+xl
000122 e0b1      	ldi	r27,$01		;xh=$01
000123 910d      	ld	r16,x+
000124 9309      	st	y+,r16		;SRAM 0x019e中数=0x0140中数
000125 910c      	ld	r16,x
000126 8308      	st	y,r16		;SRAM 0x019f中数=0x0141中数
         ;	rcall	xsgy
000127 cfab      	rjmp	kqt
000128 e0d1      jmkz3:	ldi	r29,$01		;yh=$01
000129 e9cd      	ldi	r28,$9d		;yl=$9d
00012a 91a9      	ld	r26,y+
00012b 2e3a      	mov	r3,r26
00012c 95a3      	inc	r26
00012d 96df      	adiw	r26,63		;xl=$40+xl
00012e e0b1      	ldi	r27,$01		;xh=$01
00012f 9109      	ld	r16,y+
000130 930d      	st	x+,r16		;SRAM 0x019e中数=0x0140中数
000131 2f70      	mov	r23,r16
000132 d052      	rcall	EEWrite		;保存EEP值L
000133 8108      	ld	r16,y
000134 930c      	st	x,r16		;SRAM 0x019f中数=0x0141中数
000135 2f70      	mov	r23,r16
000136 9433      	inc	r3
000137 d04d      	rcall	EEWrite		;保存EEP值H
000138 d125      	rcall	cansujs		;^^^^^^^^^^^^^^^^^^^^
000139 959a      	dec	r25
00013a 959a      	dec	r25
00013b d09a      	rcall	showcs
00013c cf96      	rjmp	kqt
         	
00013d d08b      keyup:	rcall	beep		;键盘LEFT
00013e 3090      	cpi	r25,$0
00013f f0d9      	breq	left5
000140 e0d1      	ldi	r29,$01		;yh=$01
000141 e9cd      	ldi	r28,$9d		;yl=$9d
000142 81a8      	ld	r26,y		;通道号在r26
000143 3091      	cpi	r25,$01
000144 f439      	brne	left2
000145 50a2      	subi	r26,$02
000146 f00a      	brmi	left1		;负数转移
000147 c001      	rjmp	left6
000148 e1ac      left1:	ldi	r26,$1c
000149 93a9      left6:	st	y+,r26		;保存通道号到0x019d
00014a d08b      	rcall	showcs		;显示通道标示
00014b cf87      	rjmp	kqt
00014c 3092      left2:	cpi	r25,$02
00014d f469      	brne	left5
00014e 95a3      	inc	r26
00014f 96df      	adiw	r26,63		;通道号+$40=xl
000150 e0b1      	ldi	r27,$01		;xh=$01	
000151 910d      	ld	r16,x+		;eep映射参数低字节
000152 911c      	ld	r17,x
         	;rcall	tdhpd		;根据通道号判断是否需转换成BCD码
000153 3081      	cpi	r24,$01
000154 f411      	brne	left3		;r24<>1则需转换
000155 950a      	dec	r16		;单字节EEP参数
000156 c001      	rjmp	left4
000157 e000      left3:	ldi	r16,$0;1	;000000
         	;rcall	subcd		;BCD码减法
         	;rcall	tzbcd		;BCD码调整
000158 d2b7      left4:	rcall	display;1
000159 9309      	st	y+,r16
00015a 8318      	st	y,r17
00015b cf77      left5:	rjmp	kqt
         
00015c d06c      keydown:rcall	beep		;键盘RIGHT
00015d 3090      	cpi	r25,$0
00015e f0d9      	breq	right5
00015f e0d1      	ldi	r29,$01		;yh=$01
000160 e9cd      	ldi	r28,$9d		;yl=$9d
000161 81a8      	ld	r26,y		;通道号在r26
000162 3091      	cpi	r25,$01
000163 f439      	brne	right2
000164 9612      	adiw	r26,$02
000165 31ae      	cpi	r26,$1e
000166 f409      	brne	right1
000167 e0a0      	ldi	r26,$0
000168 93a9      right1:	st	y+,r26		;保存通道号到0x019d
000169 d06c      	rcall	showcs		;显示通道标示
00016a cf68      	rjmp	kqt
00016b 3092      right2:	cpi	r25,$02
00016c f469      	brne	right5
00016d 95a3      	inc	r26
00016e 96df      	adiw	r26,63		;通道号+$40=xl
00016f e0b1      	ldi	r27,$01		;xh=$01	
000170 910d      	ld	r16,x+		;eep映射参数低字节
000171 911c      	ld	r17,x
         	;rcall	tdhpd		;根据通道号判断是否需转换成BCD码
000172 3081      	cpi	r24,$01
000173 f411      	brne	right3		;r24<>1则需转换
000174 9503      	inc	r16		;单字节EEP参数
000175 c001      	rjmp	right4
000176 e000      right3:	ldi	r16,$0;1	;0000000
         	;rcall	adbcd		;BCD码加法
         	;rcall	tzbcd		;BCD码调整
000177 d298      right4:	rcall	display;1
000178 9309      	st	y+,r16
000179 8318      	st	y,r17
00017a cf58      right5:	rjmp	kqt
         	
         ;xsgy:	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,cnt2d
         ;	rcall	outpd
         ;	mov	r16,cnt1d
         ;	swap	r16
         ;	rcall	outpd
         ;	mov	r16,cnt1d
         ;	rcall	outpd
         ;	sbi	portd,5	
         ;	ret	
         
00017b 99e1      EERead:	sbic	EECR,EEWE	;if EEWE not clear
00017c cffe      	rjmp	EERead
00017d e001      	ldi	r16,$01
00017e 2e40      	mov	r4,r16
00017f 2e38      	mov     r3,r24		;    wait more
000180 ba4f      	out 	EEARH,r4	;output address high for 8515
000181 ba3e      	out	EEARL,r3	;output address low for 8515
000182 9ae0      	sbi	EECR,EERE	;set EEPROM Read strobe
         				;This instruction takes 4 clock cycles since
         				;it halts the CPU for two clock cycles
000183 b30d      	in	r16,EEDR	;get data
000184 9508      	ret
         
000185 99e1      EEWrite:sbic	EECR,EEWE	;if EEWE not clear
000186 cffe      	rjmp	EEWrite		;    wait more
000187 e001      	ldi	r16,$01
000188 2e40      	mov	r4,r16

⌨️ 快捷键说明

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