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

📄 no3a.lst

📁 AVR-AT90S8535,HD8279,等开发的洁净空调专用DDC系统,包括AD/DA,PID计算等.
💻 LST
📖 第 1 页 / 共 4 页
字号:
          .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 c270      rjmp	RESET		  
         
          .org	INT0addr		;外部中断服务子程序
000001 c0ab      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 923f      	push	r3		;压栈
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 c015      	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 c003      	rjmp	xgml4
00009e 35cd      xgml5:	cpi	r28,$5D
00009f f7d1      	brne	xgml3
         	;rcall	cansujs		;^^^^^^^^^^^^^^^^^^^^
0000a0 9508      	ret
0000a1 2f8c      xgml4:	mov	r24,r28
0000a2 5481      	subi	r24,$41		;对应EEP地址为0x0100开始
0000a3 2f71      	mov	r23,r17
0000a4 d0f3      	rcall	EEWrite
0000a5 95ca      	dec	r28
0000a6 9319      	st	y+,r17		;更新SRAM中的EEP参数
0000a7 cff6      	rjmp	xgml5
         	
0000a8 ef0c      xgml2:	ldi	r16,$fc
0000a9 9b5d      	sbis	usr,5		;测试USR第5位发送寄存器是否空
0000aa cffd      	rjmp	xgml2
0000ab b90c      	out	udr,r16		;修改参数失败,返回FC	
0000ac 9508      	ret
         	
         		
         	
          EXT_INT0:			;键盘中断子程序
0000ad 923f      	push	r3
0000ae 924f      	push	r4
0000af 925f      	push	r5
0000b0 926f      	push	r6
0000b1 927f      	push	r7
0000b2 930f      	push	r16		;压栈
0000b3 931f      	push	r17
0000b4 932f      	push	r18
0000b5 933f      	push	r19
0000b6 934f      	push	r20
0000b7 935f      	push	r21
0000b8 936f      	push	r22
0000b9 937f      	push	r23
0000ba 938f      	push	r24
0000bb 93cf      	push	r28
0000bc 93df      	push	r29
0000bd 2799      	clr	r25
0000be 2788      	clr	r24
         	;sei
0000bf b332      	in	r19,portd	;保存D口状态
0000c0 b348      	in	r20,portb	;保存B口状态
0000c1 b357      	in	r21,ddrb	;保存B口方向
0000c2 b72f      	in	r18,SREG
         
0000c3 d0e3      	rcall	readkey		;读按键值
0000c4 3c10      	cpi	r17,$c0		;启动编码
0000c5 f129      	breq	startsystem
0000c6 3c18      	cpi	r17,$c8		;停止编码
0000c7 f159      	breq	stopsystem	
0000c8 3d10      	cpi	r17,$d0		;设定编码
0000c9 f0f1      	breq	setup1
0000ca 3d18      	cpi	r17,$d8		;退出编码
0000cb f179      	breq	quit
0000cc 3e10      	cpi	r17,$e0		;加编码
0000cd f0d9      	breq	keyup1
0000ce 3e18      	cpi	r17,$e8		;减编码
0000cf f0d1      	breq	keydown1
0000d0 3c11      	cpi	r17,$c1		;消音
0000d1 f189      	breq	mute
         	
0000d2 bb32      kqt:	out	portd,r19	;恢复D口状态
0000d3 9a96      	sbi	portd,6
0000d4 bb48      	out	portb,r20	;恢复B口状态
0000d5 bb57      	out	ddrb,r21	;恢复B口方向
0000d6 bf2f      	out	SREG,r18
0000d7 91df      	pop	r29		;弹出
0000d8 91cf      	pop	r28
0000d9 918f      	pop	r24
0000da 917f      	pop	r23
0000db 916f      	pop	r22
0000dc 915f      	pop	r21
0000dd 914f      	pop	r20
0000de 913f      	pop	r19
0000df 912f      	pop	r18
0000e0 911f      	pop	r17
0000e1 910f      	pop	r16
0000e2 907f      	pop	r7
0000e3 906f      	pop	r6
0000e4 905f      	pop	r5
0000e5 904f      	pop	r4
0000e6 903f      	pop	r3
0000e7 9518      	reti			;中断返回
0000e8 c01d      setup1:	rjmp	setup	
         ;quit1:	rjmp	quit		;转退出子程序
0000e9 c051      keyup1:	rjmp	keyup		;转向左子程序
0000ea c06f      keydown1:rjmp	keydown		;转向右子程序
          startsystem:
0000eb d0f0      	rcall	beep		;BEEP
0000ec e001      	ldi	r16,01		;启动风机输出
0000ed bb05      	out	portc,r16
0000ee 9a97      	sbi	portd,7
0000ef 0000      	nop
0000f0 0000      	nop
0000f1 9897      	cbi	portd,7
0000f2 cfdf      	rjmp	kqt
          stopsystem:
0000f3 d0e8      	rcall	beep
0000f4 e000      	ldi	r16,00		;停止风机输出
0000f5 bb05      	out	portc,r16
0000f6 9a97      	sbi	portd,7
0000f7 0000      	nop
0000f8 0000      	nop
0000f9 9897      	cbi	portd,7	
0000fa cfd7      	rjmp	kqt
         	
0000fb d0e0      quit:	rcall	beep
0000fc 3092      	cpi	r25,$02
0000fd f419      	brne	quit0		;退出按钮
0000fe d0ea      	rcall	showcs	
0000ff 959a      	dec	r25
000100 cfd1      	rjmp	kqt
000101 2799      quit0:	clr	r25		;0次或1次
000102 cfcf      	rjmp	kqt	
         	
000103 d0d8      mute:	rcall	beep
000104 9a96      	sbi	portd,6		;消音报警
000105 cfcc      	rjmp	kqt
         	
000106 d0d5      setup:	rcall	beep		;设定按钮
000107 9593      	inc	r25
000108 3091      	cpi	r25,$01
000109 f461      	brne	jmkz1
00010a d0af      	rcall	setupxs		;setup键按了1次
00010b e0d1      	ldi	r29,$01		;yh=$01
00010c e9cd      	ldi	r28,$9d		;yl=$9d
00010d e0b1      	ldi	r27,$01		;xh=$01
00010e e4a0      	ldi	r26,$40		;xl=$40
00010f 2700      	clr	r16
000110 9309      	st	y+,r16		;初始0x019d为0
000111 910d      	ld	r16,x+
000112 9309      	st	y+,r16		;SRAM 0x019e中数=0x0140中数
000113 910d      	ld	r16,x+
000114 9309      	st	y+,r16		;SRAM 0x019f中数=0x0141中数	
000115 cfbc      	rjmp	kqt		;退出
000116 3092      jmkz1:	cpi	r25,$02
000117 f021      	breq	jmkz2		;读出EEP在SRAM中的映射值,以便修改
000118 3093      	cpi	r25,$03
000119 f069      	breq	jmkz3		;修改完毕,保存EEP值
00011a 2799      	clr	r25
00011b cfb6      	rjmp	kqt
00011c e0d1      jmkz2:	ldi	r29,$01		;yh=$01
00011d e9cd      	ldi	r28,$9d		;yl=$9d
00011e 91a9      	ld	r26,y+
00011f 95a3      	inc	r26
000120 96df      	adiw	r26,63		;xl=$40+xl
000121 e0b1      	ldi	r27,$01		;xh=$01
000122 910d      	ld	r16,x+
000123 9309      	st	y+,r16		;SRAM 0x019e中数=0x0140中数
000124 910c      	ld	r16,x
000125 8308      	st	y,r16		;SRAM 0x019f中数=0x0141中数
         ;	rcall	xsgy
000126 cfab      	rjmp	kqt
000127 e0d1      jmkz3:	ldi	r29,$01		;yh=$01
000128 e9cd      	ldi	r28,$9d		;yl=$9d
000129 91a9      	ld	r26,y+
00012a 2e3a      	mov	r3,r26
00012b 95a3      	inc	r26
00012c 96df      	adiw	r26,63		;xl=$40+xl
00012d e0b1      	ldi	r27,$01		;xh=$01
00012e 9109      	ld	r16,y+
00012f 930d      	st	x+,r16		;SRAM 0x019e中数=0x0140中数
000130 2f70      	mov	r23,r16
000131 d066      	rcall	EEWrite		;保存EEP值L
000132 8108      	ld	r16,y
000133 930c      	st	x,r16		;SRAM 0x019f中数=0x0141中数
000134 2f70      	mov	r23,r16
000135 9433      	inc	r3
000136 d061      	rcall	EEWrite		;保存EEP值H
         	;rcall	cansujs		;^^^^^^^^^^^^^^^^^^^^
000137 959a      	dec	r25
000138 959a      	dec	r25
000139 d0af      	rcall	showcs
00013a cf97      	rjmp	kqt
         	
00013b d0a0      keyup:	rcall	beep		;键盘LEFT
00013c 3090      	cpi	r25,$0
00013d f0d9      	breq	left5
00013e e0d1      	ldi	r29,$01		;yh=$01
00013f e9cd      	ldi	r28,$9d		;yl=$9d
000140 81a8      	ld	r26,y		;通道号在r26
000141 3091      	cpi	r25,$01
000142 f439      	brne	left2
000143 50a2      	subi	r26,$02
000144 f00a      	brmi	left1		;负数转移
000145 c001      	rjmp	left6
000146 e1ac      left1:	ldi	r26,$1c
000147 93a9      left6:	st	y+,r26		;保存通道号到0x019d
000148 d0a0      	rcall	showcs		;显示通道标示
000149 cf88      	rjmp	kqt
00014a 3092      left2:	cpi	r25,$02
00014b f469      	brne	left5
00014c 95a3      	inc	r26

⌨️ 快捷键说明

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