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

📄 no3.lst

📁 AVR-AT90S8535,HD8279,等开发的洁净空调专用DDC系统,包括AD/DA,PID计算等.
💻 LST
📖 第 1 页 / 共 2 页
字号:
          .equ	ADEN	=7
          .equ	ADSC	=6
          .equ	ADFR	=5
          .equ	ADIF	=4
          .equ	ADIE	=3
          .equ	ADPS2	=2
          .equ	ADPS1	=1
          .equ	ADPS0	=0
         
          .def	XL	=r26
          .def	XH	=r27
          .def	YL	=r28
          .def	YH	=r29
          .def	ZL	=r30
          .def	ZH	=r31
         
          .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			;res1、res2存放结果的十六进制
          .def    cnt1d  = r6
          .def    cnt2d  = r7			;cnt1、dcnt2d存放结果的十进制
         
          .org	0x00
          .equ	label=$0200
000000 c01f      	rjmp	RESET	; 
         
         ;.org	0x01		;通用中断
         ;INTT0:	RJMP	GINT	;
         
         ;.org	0x06		;timerl
         ;INTTT:	RJMP	TINT	;
         
         	
          .org	0x020			;
         
          RESET:
000020 e50f      SYS:	ldi	R16,low(RAMEND)	;设置堆栈
000021 bf0d      	out	SPL,R16
000022 e002      	ldi	R16,high(RAMEND)
000023 bf0e      	out	SPH,R16
         	
000024 e208      	ldi	r16,$28	 	;8279写控制寄存器
000025 bb02      	out	portd,r16
000026 ed01      	ldi	r16,$d1
000027 bb08      	out	portb,r16
000028 9a94      	sbi	portd,4
         	
         ;	ldi	r20,0X30	
         ;	rcall	Delay
         	
         	;wdr			;看门狗复位
         	;ldi	R16,$0F		;0b00001111
         	;out	WDTCR,R16	;狗周期2048MS
         
000029 ef08      	ldi	R16,$F8		;0B11111000
00002a bb0a      	out	DDRA,R16	;A口0~2输入,3~7输出
00002b 9ada      	sbi	porta,2
00002c ef0a      	ldi	R16,$FA		;0B11111110
00002d bb01      	out	DDRD,R16	;D口0/2输入,1/3~7输出
00002e ef0f      	ldi	R16,$FF		;0B11111111
00002f bb04      	out	DDRC,R16	;C口输出
000030 bb07      	out	DDRB,R16	;B口输出
         
000031 e805      	ldi	R16,$85		;设置ADC转换,中断触发,ADC为单次模式且32M分频
000032 b906      	out	adcsr,R16
000033 2700      	clr	R16
000034 b907      	out	admux,R16	;ADC  0通道
000035 9a36      	sbi	adcsr,6		;启动ADC
         
000036 e908      	ldi	r16,$98		;初始化COM
000037 b90a              out	ucr,r16		;设置UART控制寄存器---UCR
000038 e109      	ldi	r16,25
000039 b909      	out	ubrr,r16	;设置UART波特率
         
         	;ldi	r16,$40		;INT0可用,INT1屏蔽
         	;out	GIMSK,R16
         	;ldi	r16,$3		;INT0上升沿触发   
         	;out	mcucr,r16
         	
00003a 9894      	cbi	portd,4
00003b e000      	ldi	r16,$00		;8279键盘显示方式初始
00003c bb08      	out	portb,r16
00003d 9a94      	sbi	portd,4
00003e 0000      	nop
00003f 9894      	cbi	portd,4
000040 e202      	ldi	r16,$22		;8279时钟分频=2
000041 bb08      	out	portb,r16
000042 9a94      	sbi	portd,4	
         	
000043 2711      	clr	r17		;ADIN 4051地址计数
         
000044 d027      main:	rcall	ADC1
000045 2c42      	mov	res1,r2
000046 2c53      	mov	res2,r3
000047 d058      	rcall	htd3		;16进制转10进制
000048 d078      	rcall	display		;调用显示子程序
         	
000049 3017      	cpi	r17,$07	
00004a f439      	brne	addre1		;不等于7则跳转
00004b 2711      	clr	r17		;等于7
00004c 9938      	sbic	admux,0		;内地址
00004d c002        	rjmp	addre2		;如果admux=1则置0
00004e 9a38        	sbi	admux,0		;如果admux=0则置1
00004f c003        	rjmp	addre3
000050 9838      addre2:	cbi	admux,0
000051 c001      	rjmp	addre3
000052 9513      addre1:	inc	r17
000053 2f21      addre3:	mov	r18,r17
000054 7021      	andi	r18,$01
000055 3021      	cpi	r18,$01
000056 f411      	brne	addre4
000057 9adb      	sbi	porta,3
000058 c001      	rjmp	addre5
000059 98db      addre4:	cbi	porta,3
00005a 2f21      addre5:	mov	r18,r17
00005b 7022      	andi	r18,$02
00005c 3022      	cpi	r18,$02
00005d f411      	brne	addre6
00005e 9adc      	sbi	porta,4
00005f c001      	rjmp	addre7
000060 98dc      addre6:	cbi	porta,4
000061 2f21      addre7:	mov	r18,r17
000062 7024      	andi	r18,$04
000063 3024      	cpi	r18,$04
000064 f411      	brne	addre8
000065 9add      	sbi	porta,5
000066 c001      	rjmp	addre9
000067 98dd      addre8:	cbi	porta,5
000068 e546      addre9:	ldi	r20,0X56	;延时1秒
000069 d07d      	rcall	Delay
00006a 9a36      	sbi	adcsr,6		;启动ADC
00006b cfd8      	rjmp	main		;
         	
         
         ;**** 子程序
00006c 9936      ADC1:	sbic	adcsr,adsc	;转换结束跳行否则等待
00006d cffe      	rjmp	ADC1
00006e b024      	in	r2,adcl		;把转换结果送r2,r3
00006f b035      	in	r3,adch
000070 99ca      	sbic	pina,2		;读开关量
000071 e020      	ldi	r18,$0		;开关量关
000072 e021      	ldi	r18,$1		;开关量开
          			
000073 e0b1      	ldi	r27,$01		;传数据到SRAM 0100 处
000074 2fa1       	mov	r26,r17
000075 932c      	st	x,r18		;传开关量到 0100
000076 9938      	sbic	admux,0
000077 c002        	rjmp	admux1
000078 9650        	adiw	r26,$10		;传A0数据到SRAM 0110 处
000079 c001      	rjmp	chuan
00007a 9690      admux1:	adiw	r26,$20		;传A1数据到SRAM 0120 处
00007b 922d      chuan:	st	x+,r2		;传低位数据 
00007c 923c      	st	x,r3		;传高位数据 
00007d 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		;循环计数
         
00007e 24ee      mpy16u:	clr	m16u3		;清2.3
00007f 24dd      	clr	m16u2
000080 e150      	ldi	mcnt16u,16	;
000081 94c6      	lsr	mp16uH
000082 94b7      	ror	mp16uL
000083 f410      m16u_1:	brcc	noad8		;C清零转
000084 0cd9      	add	m16u2,mc16uL	;加被乘数到2
000085 1cea      	adc	m16u3,mc16uH	;加被乘数到3
000086 94e7      noad8:	ror	m16u3		;带进位右循环
000087 94d7      	ror	m16u2		;带进位右循环
000088 94c7      	ror	m16ub		;带进位右循环
000089 94b7      	ror	m16ua		;带进位右循环
00008a 955a      	dec	mcnt16u		;计数减1
00008b f7b9      	brne	m16u_1		;不为零转
00008c 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		
         
00008d 24dd      div16u:	clr	drem16uL		;清除余数低位
00008e 18ee      	sub	drem16uH,drem16uH	;清除余数高位
00008f e151      	ldi	dcnt16u,17		;循环计数
000090 1cbb      d16u_1:	rol	dd16uL			;带进位左移
000091 1ccc      	rol	dd16uH
000092 955a      	dec	dcnt16u			;decrement counter
000093 f409      	brne	d16u_2			;不为0转
000094 9508      	ret				;return
000095 1cdd      d16u_2:	rol	drem16uL		;shift dividend into remainder
000096 1cee      	rol	drem16uH
000097 18d9      	sub	drem16uL,dv16uL		;remainder = remainder - divisor
000098 08ea      	sbc	drem16uH,dv16uH	;
000099 f420      	brcc	d16u_3			;if result negative
00009a 0cd9      	add	drem16uL,dv16uL		;restore remainder
00009b 1cea      	adc	drem16uH,dv16uH
00009c 9488      	clc				;clear carry to be shifted into result
00009d cff2      	rjmp	d16u_1			;else
00009e 9408      d16u_3:	sec				;set carry to be shifted into result
00009f cff0      	rjmp	d16u_1
         
         
         
          htd3:					;16转10子程序
0000a0 e130      	ldi	temp,16
0000a1 2e83      	mov	count,temp
0000a2 2733      	clr	temp
0000a3 2466      	clr	cnt1d
0000a4 2477      	clr	cnt2d
0000a5 9488      	clc
          loopd:
0000a6 1c44      	rol	res1
0000a7 1c55      	rol	res2
0000a8 1c66      	rol	cnt1d
0000a9 1c77      	rol	cnt2d
0000aa 948a      	dec	count
0000ab f409      	brne	c	
0000ac 9508      	ret
0000ad d001      c:	rcall	adjn
0000ae cff7      	rjmp	loopd
         
          adjn:
0000af 928f      	push	count
0000b0 2c86      	mov	count,cnt1d
0000b1 d006      	rcall	adjd1
0000b2 2c68      	mov	cnt1d,count
0000b3 2c87      	mov	count,cnt2d
0000b4 d003      	rcall	adjd1
0000b5 2c78      	mov	cnt2d,count
0000b6 908f      	pop	count
0000b7 9508      	ret
          adjd1:
0000b8 e033      	ldi	temp,3
0000b9 0d38      	add	temp,count
0000ba fd33      	sbrc	temp,3
0000bb 2e83      	mov	count,temp
0000bc e330      	ldi	temp,$30
0000bd 0d38      	add	temp,count
0000be fd37      	sbrc	temp,7
0000bf 2e83      	mov	count,temp
0000c0 9508      	ret
         
0000c1 9a95      display:sbi	portd,5		;初始化8279控制字
0000c2 9894      	cbi	portd,4
0000c3 e970      	ldi	r23,$90
0000c4 bb78      	out	portb,r23
0000c5 9a94      	sbi	portd,4
0000c6 9895      	cbi	portd,5
         
0000c7 e0f4      	ldi	zh,high(label*2) 	;0~15通道号切换
0000c8 2fe1      	mov	zl,r17
0000c9 9938      	sbic	admux,0
0000ca c001        	rjmp	dis1
0000cb c001        	rjmp	dis0
0000cc 9638      dis1:  	adiw	zl,$08		
0000cd 95c8      dis0:	lpm
0000ce ba08      	out	portb,r0
0000cf 9894      	cbi	portd,4	
0000d0 0000      	nop
0000d1 9a94      	sbi	portd,4		
         
0000d2 2d07      	mov	r16,cnt2d
0000d3 9502      	swap	r16
0000d4 d009      	rcall	outpd
0000d5 2d07      	mov	r16,cnt2d
0000d6 d007      	rcall	outpd
0000d7 2d06      	mov	r16,cnt1d
0000d8 9502      	swap	r16
0000d9 d004      	rcall	outpd
0000da 2d06      	mov	r16,cnt1d
0000db d002      	rcall	outpd
0000dc 9a95      	sbi	portd,5		;向8279传送数据结束
0000dd 9508      	ret	
         
0000de e0e0      outpd:	ldi	zl,low(label*2)
0000df 700f      	andi	r16,$0f
0000e0 0fe0      	add	zl,r16
0000e1 95c8      	lpm
0000e2 ba08      	out	portb,r0
0000e3 9894      	cbi	portd,4
0000e4 0000      	nop
0000e5 9a94      	sbi	portd,4	
0000e6 9508      	ret
         	
         
         	
0000e7 934f      delay:  push	r20		;2t延时子程序
0000e8 934f      l0:     push	r20		;2t
0000e9 934f      l1:     push	r20		;2t
0000ea 934f      l2:     push	r20		;2t
0000eb 954a      l3:     dec	r20		;1t
0000ec f7f1              brne	l3		;1t/2t
0000ed 914f              pop	r20		;2t
0000ee 954a              dec	r20		;1t 
0000ef f7d1              brne	l2		;1t/2t
0000f0 914f              pop	r20		;2t
0000f1 954a              dec	r20		;1t 
0000f2 f7b1              brne	l1		;1t/2t
0000f3 914f              pop	r20		;2t
0000f4 954a              dec	r20		;1t 
0000f5 f791              brne	l0		;1T/2T
0000f6 914f              pop	r20		;2t
0000f7 9508              ret			;4t
         
         
          .cseg
          .org	$0200
          .dw	0x063f,0x4f5b,0x6d66,0x077d	
000200 063f
000201 4f5b
000202 6d66
000203 077d
          .dw	0x6f7f,0x7c77,0x5e39,0x7179000204 6f7f
000205 7c77
000206 5e39
000207 7179

Assembly complete with no errors.

⌨️ 快捷键说明

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