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

📄 dout.lst

📁 AVR-AT90S8535,HD8279,等开发的洁净空调专用DDC系统,包括AD/DA,PID计算等.
💻 LST
📖 第 1 页 / 共 4 页
字号:
         
          .equ 	RAMEND  =$25F	;Last On-Chip SRAM location
          .equ	XRAMEND =$25F
          .equ	E2END	=$1FF
          .equ	FLASHEND=$FFF
         
          .equ	INT0addr=$001	;External Interrupt0 Vector Address
          .equ	INT1addr=$002	;External Interrupt1 Vector Address
          .equ	OC2addr =$003	;Timer2 compare match Vector Address
          .equ	OVF2addr=$004	;Timer2 overflow Vector Address
          .equ	ICP1addr=$005	;Timer1 Input Capture Vector Address
          .equ	OC1Aaddr=$006	;Timer1 Output Compare A Interrupt Vector Address
          .equ	OC1Baddr=$007	;Timer1 Output Compare B Interrupt Vector Address
          .equ	OVF1addr=$008	;Overflow1 Interrupt Vector Address
          .equ	OVF0addr=$009	;Overflow0 Interrupt Vector Address
          .equ	SPIaddr =$00A	;SPI Interrupt Vector Address
          .equ	URXCaddr=$00B	;UART Receive Complete Interrupt Vector Address
          .equ	UDREaddr=$00C	;UART Data Register Empty Interrupt Vector Address
          .equ	UTXCaddr=$00D	;UART Transmit Complete Interrupt Vector Address
          .equ	ADCCaddr=$00E	;ADC Conversion Complete Interrupt Vector Address
          .equ	ERDYaddr=$00F	;EEPROM Write Complete Interrupt Vector Address
          .equ	ACIaddr =$010	;Analog Comparator Interrupt Vector Address         
          .def    temp   = r19			;十六进制转换暂存器
          .def    count  = r8			;十六进制转换计数器
          .def    res1   = r4			;存放结果的十六进制低位
          .def    res2   = r5			;存放结果的十六进制高位
          .def    cnt1d  = r6			;存放结果的十进制低位
          .def    cnt2d  = r7			;存放结果的十进制高位
         
          .org	0x00
          .equ	label=$0400
000000 c239      rjmp	RESET		  
         
          .org	INT0addr		;外部中断服务子程序
000001 c09b      rjmp	EXT_INT0		
         
          .org	URXCaddr		;UART接收结束
00000b c014      rjmp	UART_RXC
         
         ;.org	UDREaddr		;UART数据空		
         ;rjmp	UART_DRE
               
          .org  	UTXCaddr		;UART发送结束
         ;rjmp	UART_TXC
         
         ;.org	0x06			;timerl
         ;INTTT:	RJMP	TINT 		;
00000d 9518      reti
         
         	
          .org	0x0020			;
         ;*****************************
         ;************中断*************
         ;*****************************
          UART_RXC:			;通讯中断子程序
         
000020 930f      	push	r16		;压栈
000021 931f      	push	r17
000022 932f      	push	r18
000023 933f      	push	r19
000024 937f      	push	r23
000025 938f      	push	r24
000026 93cf      	push	r28
000027 93df      	push	r29
000028 b72f      	in	r18,SREG	;保存状态寄存器
000029 995c      loop:	sbic	usr,4		;低电平跳行,高电平帧错误
00002a cffe      	rjmp	loop
00002b b11c      loop1:	in	r17,udr		;读串口数据到r17
00002c e0d1      	ldi	r29,$01
00002d e4cc      	ldi	r28,$4c		;SRAM中站号地址
00002e 8108      	ld	r16,y
00002f 1310      	cpse	r17,r16		;是本站则跳行
000030 c012      	rjmp	qt		;非本站,退出
         	
         	
         	
         	
000031 2d01      	mov	r16,r1
000032 3000      	cpi	r16,$00		;本机是否为第一次接收到数据	
000033 f009      	breq	EERead1		;是第一次需验证站号
000034 c018      	rjmp	datapd		;第二次则处理命令
000035 99e1      EERead1:sbic	EECR,EEWE	;if EEWE not clear
000036 cffe      	rjmp	EERead1
000037 e001      	ldi	r16,$01
000038 bb0f      	out 	EEARH,r16	;output address high for 8515
000039 e00c      	ldi	r16,$c
00003a bb0e      	out	EEARL,r16	;output address low for 8515
00003b 9ae0      	sbi	EECR,EERE	;set EEPROM Read strobe
00003c b30d      	in	r16,EEDR	;get data
00003d 1310      	cpse	r17,r16		;比较相等跳行.
00003e c004      	rjmp	qt		;非本站,退出
00003f 9b5d      loop3:	sbis	usr,5		;测试USR第5位发送寄存器是否空
000040 cffe      	rjmp	loop3
000041 b90c      	out	udr,r16		;是本站,请求发送第二次指令数据
000042 9413      	inc	r1
         	
000043 bf2f      qt:	out	sreg,r18	;退出通讯中断
         	
000044 91df      	pop	r29
000045 91cf      	pop	r28
000046 918f      	pop	r24
000047 917f      	pop	r23
000048 913f      	pop	r19
000049 912f      	pop	r18
00004a 911f      	pop	r17
00004b 910f      	pop	r16
00004c 9518      	reti
         
          datapd:				;第二次指令数据处理
00004d 3f1f      	cpi	r17,$ff
00004e f419      	brne	tzxml			
00004f d00c      	rcall	txdata		;FF指令为上传数据
000050 2411      	clr	r1
000051 cff1      	rjmp	qt
000052 3f1e      tzxml:	cpi	r17,$fe
000053 f419      	brne	tzxml1
000054 d00a      	rcall	zxml		;FE指令为执行命令
000055 2411      	clr	r1
000056 cfec      	rjmp	qt
000057 3f1d      tzxml1:	cpi	r17,$fd
000058 f751      	brne	qt
000059 d00b      	rcall	xgml		;FD指令为修改参数
00005a 2411      	clr	r1
00005b cfe7      	rjmp	qt	
         
          txdata:				;发送数据
00005c d02f      	rcall	txdt		;上传数据
00005d d02e      	rcall	txdt
00005e 9508      	ret	
          zxml:				;执行命令
00005f 9b5f      loop6:	sbis	usr,7		;测试接收寄存器是否为空
000060 cffe      	rjmp	loop6		;低电平为空
000061 995c      loop7:	sbic	usr,4		;测试帧是否正确
000062 cffe      	rjmp	loop7		;帧错误为高电平
000063 b11c      	in	r17,udr	
         	
         	
000064 9508      	ret	
         	
000065 e0d1      xgml:	ldi	r29,$01		;修改参数子程序
000066 e5c0      	ldi	r28,$50
000067 9b5f      xgml0:	sbis	usr,7		;测试接收寄存器是否为空
000068 cffe      	rjmp	xgml0		;低电平为空
000069 b11c      	in	r17,udr
00006a 9319      	st	y+,r17
00006b 36ce      	cpi	r28,$6e
00006c f7d1      	brne	xgml0
         
00006d e5c0      	ldi	r28,$50
00006e 851f      xgml1:	ldd	r17,y+15
00006f 9109      	ld	r16,y+
000070 1310      	cpse	r17,r16
000071 c015      	rjmp	xgml2
000072 35cf      	cpi	r28,$5f
000073 f7d1      	brne	xgml1
000074 ef0d      	ldi	r16,$fd
000075 9b5d      	sbis	usr,5		;测试USR第5位发送寄存器是否空
000076 c010      	rjmp	xgml2
000077 b90c      	out	udr,r16		;接收数据成功,可以修改参数,返回FD
         	
000078 e4c0      	ldi	r28,$40
000079 851a      xgml3:	ldd	r17,y+10
00007a 9109      	ld	r16,y+
00007b 1310      	cpse	r17,r16
00007c c003      	rjmp	xgml4
00007d 34cf      xgml5:	cpi	r28,$4f
00007e f7d1      	brne	xgml3
         	;rcall	cansujs		;^^^^^^^^^^^^^^^^^^^^
00007f 9508      	ret
000080 2f8c      xgml4:	mov	r24,r28
000081 5481      	subi	r24,$41		;对应EEP地址为0x0100开始
000082 2f71      	mov	r23,r17
000083 d0dd      	rcall	EEWrite
000084 95ca      	dec	r28
000085 9319      	st	y+,r17		;更新SRAM中的EEP参数
000086 cff6      	rjmp	xgml5
         	
000087 ef0c      xgml2:	ldi	r16,$fc
000088 9b5d      	sbis	usr,5		;测试USR第5位发送寄存器是否空
000089 cffd      	rjmp	xgml2
00008a b90c      	out	udr,r16		;修改参数失败,返回FC	
00008b 9508      	ret
         	
00008c e0d1      txdt:	ldi	r29,$01
00008d e0c0      	ldi	r28,$00
00008e 9109      loop5:	ld	r16,y+
00008f 9b5d      loop4:	sbis	usr,5		;测试USR第5位发送寄存器是否空
000090 cffe      	rjmp	loop4
000091 b90c      	out	udr,r16		;发送数据
000092 34cf      	cpi	r28,$4F
000093 f7d1      	brne	loop5
000094 9b5d      loep:	sbis	usr,5		;测试USR第5位发送寄存器是否空
000095 cffe      	rjmp	loep
000096 ef0f      	ldi	r16,$ff		;
000097 b90c      	out	udr,r16	
000098 9b5d      loep1:	sbis	usr,5		;测试USR第5位发送寄存器是否空
000099 cffe      	rjmp	loep1
00009a ef0f      	ldi	r16,$ff		;
00009b b90c      	out	udr,r16			
00009c 9508      	ret		
         	
          EXT_INT0:			;键盘中断子程序
00009d 923f      	push	r3
00009e 924f      	push	r4
00009f 925f      	push	r5
0000a0 926f      	push	r6
0000a1 927f      	push	r7
0000a2 930f      	push	r16		;压栈
0000a3 931f      	push	r17
0000a4 932f      	push	r18
0000a5 933f      	push	r19
0000a6 934f      	push	r20
0000a7 935f      	push	r21
0000a8 936f      	push	r22
0000a9 937f      	push	r23
0000aa 938f      	push	r24
0000ab 939f      	push	r25
0000ac 93cf      	push	r28
0000ad 93df      	push	r29
0000ae 2799      	clr	r25
0000af 2788      	clr	r24
0000b0 b332      	in	r19,portd	;保存D口状态
0000b1 b348      	in	r20,portb	;保存B口状态
0000b2 b357      	in	r21,ddrb	;保存B口方向
0000b3 b72f      	in	r18,SREG
         	
0000b4 e000      	ldi	r16,$00		;INT0可用,INT1屏蔽 0b01000000
0000b5 bf0b      	out	GIMSK,R16
         	
0000b6 d0b9      read:	rcall	readkey		;读按键值
0000b7 3c10      	cpi	r17,$c0		;启动编码
0000b8 f169      	breq	startsystem
0000b9 3c18      	cpi	r17,$c8		;停止编码
0000ba f1a9      	breq	stopsystem	
0000bb 3d10      	cpi	r17,$d0		;设定编码
0000bc f111      	breq	setup1
0000bd 3d18      	cpi	r17,$d8		;退出编码
0000be f109      	breq	quit1
0000bf 3e10      	cpi	r17,$e0		;加编码
0000c0 f101      	breq	keyup1
0000c1 3e18      	cpi	r17,$e8		;减编码
0000c2 f0f9      	breq	keydown1
0000c3 3c11      	cpi	r17,$c1		;消音
0000c4 f1a9      	breq	mute
         	
          kqt:	
0000c5 e400      	ldi	r16,$40		;INT0可用,INT1屏蔽 0b01000000
0000c6 bf0b      	out	GIMSK,R16
0000c7 bf0a      	out	GIFR,r16
0000c8 bb32      	out	portd,r19	;恢复D口状态
0000c9 9a96      	sbi	portd,6
0000ca bb48      	out	portb,r20	;恢复B口状态
0000cb bb57      	out	ddrb,r21	;恢复B口方向
0000cc bf2f      	out	SREG,r18
0000cd 91df      	pop	r29		;弹出
0000ce 91cf      	pop	r28
0000cf 919f      	pop	r25		;弹出
0000d0 918f      	pop	r24
0000d1 917f      	pop	r23
0000d2 916f      	pop	r22
0000d3 915f      	pop	r21
0000d4 914f      	pop	r20
0000d5 913f      	pop	r19
0000d6 912f      	pop	r18
0000d7 911f      	pop	r17
0000d8 910f      	pop	r16
0000d9 907f      	pop	r7
0000da 906f      	pop	r6
0000db 905f      	pop	r5
0000dc 904f      	pop	r4
0000dd 903f      	pop	r3
0000de 9518      	reti			;中断返回
0000df c01f      setup1:	rjmp	setup	
0000e0 c036      quit1:	rjmp	quit		;转退出子程序
0000e1 c03c      keyup1:	rjmp	keyup		;转向左子程序
0000e2 c04d      keydown1:rjmp	keydown		;转向右子程序
         	
0000e3 9b82      intr:	sbis	pind,2		;8279的中断信号有则跳行
0000e4 cffe      	rjmp	intr		
0000e5 cfd0      	rjmp	read		;读8279中断信息
         	
          startsystem:
0000e6 d0be      	rcall	beep		;BEEP
0000e7 e001      	ldi	r16,01		;启动风机输出
0000e8 bb05      	out	portc,r16
0000e9 9a97      	sbi	portd,7
0000ea 0000      	nop
0000eb 0000      	nop
0000ec 9897      	cbi	portd,7
0000ed 3090      	cpi	r25,$00
0000ee f7a1      	brne	intr
0000ef cfd5      	rjmp	kqt
         	
          stopsystem:
0000f0 d0b4      	rcall	beep
0000f1 e000      	ldi	r16,00		;停止风机输出
0000f2 bb05      	out	portc,r16
0000f3 9a97      	sbi	portd,7
0000f4 0000      	nop
0000f5 0000      	nop
0000f6 9897      	cbi	portd,7	
0000f7 3090      	cpi	r25,$00
0000f8 f751      	brne	intr
0000f9 cfcb      	rjmp	kqt
         	
0000fa d0aa      mute:	rcall	beep
0000fb 9a96      	sbi	portd,6		;消音报警
0000fc 3090      	cpi	r25,$00
0000fd f729      	brne	intr
0000fe cfc6      	rjmp	kqt
         	
0000ff d0a5      setup:	rcall	beep		;设定按钮
000100 9593      	inc	r25
000101 3091      	cpi	r25,$01
000102 f411      	brne	jmkz1
000103 d07f      	rcall	setupxs		;setup键按了1次
000104 cfde      	rjmp	intr		;再去读中断口
000105 3092      jmkz1:	cpi	r25,$02
000106 f019      	breq	jmkz2		;读出EEP值,以便修改
000107 3093      	cpi	r25,$03
000108 f029      	breq	jmkz3		;修改完毕,保存EEP值
000109 cfbb      	rjmp	kqt
00010a d04c      jmkz2:	rcall	EERead		;读出EEP值
00010b 2f70      	mov	r23,r16
00010c d035      	rcall	xsgy
00010d cfd5      	rjmp	intr
00010e d052      jmkz3:	rcall	EEWrite		;保存EEP值
00010f e0d1      	ldi	r29,$01
000110 e4c0      	ldi	r28,$40
000111 0fc8      	add	r28,r24
000112 8378      	st	y,r23
         	;rcall	cansujs		;^^^^^^^^^^^^^^^^^^^^
000113 959a      	dec	r25
000114 959a      	dec	r25
000115 d09c      	rcall	showcs
000116 cfcc      	rjmp	intr
         	
000117 d08d      quit:	rcall	beep
000118 3092      	cpi	r25,$02
000119 f419      	brne	kqt4		;退出按钮
00011a d097      	rcall	showcs	
00011b 959a      	dec	r25
00011c cfc6      	rjmp	intr
00011d cfa7      kqt4:	rjmp	kqt
         	
00011e d086      keyup:	rcall	beep		;键盘LEFT
00011f 3090      	cpi	r25,$00
000120 f409      	brne	kqt3
000121 cfa3      	rjmp	kqt
000122 3091      kqt3:	cpi	r25,$01
000123 f421      	brne	to
000124 958a      	dec	r24
000125 f03a      	brmi	lp1		;r24为负转移
000126 d08b      lp2:	rcall	showcs
000127 cfbb      	rjmp	intr		
000128 3092      to:	cpi	r25,$02
000129 f429      	brne	tczgc
00012a 957a      	dec	r23
00012b d016      	rcall	xsgy
00012c cfb6      	rjmp	intr
00012d e08e      lp1:	ldi	r24,$e
00012e cff7      	rjmp	lp2	
00012f cfb3      tczgc:	rjmp	intr
         
000130 d074      keydown:rcall	beep		;键盘RIGHT
000131 3090      	cpi	r25,$00
000132 f409      	brne	kqt2
000133 cf91      	rjmp	kqt

⌨️ 快捷键说明

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