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

📄 162a.asm

📁 ATMEGA16单片机使用的LCD162A液晶屏测试程序。
💻 ASM
字号:
;FastAVR Basic Compiler, ver.4.2.0, by MicroDesign
;Created 20:44:35, 09-12-2006
;
.include	"C:\FastAVR\inc\m16def.inc"
;
		.DSEG
n:						.byte	 1
volts:					.byte	 2
voltraw:				.byte	 2
voltav:					.byte	 2
		
		.CSEG
.ORG	0x0000

_Reset:
		ldi		yl,byte1(RAMEND)
		out		SPL,yl
		ldi		yh,byte2(RAMEND)
		out		SPL+1,yh
		sbiw	yl,32
		call	LcdIni

;******	USERS BASIC CODE **********************

;-Line--0012----Start Adc,Vref=Int--
		ldi		zl,0xC0
		out		ADMUX,zl
		ldi		zl,0x86
		out		ADCSR,zl

;-Line--0013----Cursor Off--
		ldi		r24,0xC
		call	_LCtr

;-Line--0020----Do--
L0000:

;-Line--0021----For n = 1 To 40         ' sample the adc 40 times for--
		ldi		zl,byte1(1)
		sts		n,zl
		ldi		zl,byte1(40)
		push	r5
		inc		zl
		mov		r5,zl
L0002:

;-Line--0022----   WaitUs 10               '--
		ldi		zl,byte1(10)
		call	_Wus

;-Line--0023----   voltraw = Adc(1)--
		ldi		zl,byte1(1)
		in		zh,ADMUX
		andi	zh,0xe0
		or		zl,zh
		out		ADMUX,zl
		call	_Adc
		sts		voltraw,zl
		sts		voltraw+1,zh

;-Line--0024----   Locate 1,1: Lcd "Raw Input   "; voltraw; "   "--
		ldi		r24,0x7F
		push	r24
		ldi		zl,byte1(1)
		pop		r24
		add		r24,zl
		call	_LCtr
		ldi		zl,byte1(S000*2)
		ldi		zh,byte2(S000*2)
		call	_LSc
		lds		zl,voltraw
		lds		zh,voltraw+1
		call	_W2Str
		call	_LBW
		ldi		zl,byte1(S001*2)
		ldi		zh,byte2(S001*2)
		call	_LSc

;-Line--0025----   voltav = voltav + voltraw--
		lds		r24,voltav
		lds		r25,voltav+1
		lds		zl,voltraw
		lds		zh,voltraw+1
		add		zl,r24
		adc		zh,r25
		sts		voltav,zl
		sts		voltav+1,zh

;-Line--0026----Next--
		lds		zl,n
		inc		zl
		sts		n,zl
		cp		zl,r5
		brsh	PC+0x02
		rjmp	L0002
		pop		r5
L0003:

;-Line--0027----voltav = voltav / 40       ' average the ADC samples--
		lds		r24,voltav
		lds		r25,voltav+1
		ldi		zl,byte1(40)
		ldi		zh,byte2(40)
		call	Di16u
		sts		voltav,zl
		sts		voltav+1,zh

;-Line--0028----Locate 2,1: Lcd "Filtered    "; voltav; "   "--
		ldi		r24,0xBF
		push	r24
		ldi		zl,byte1(1)
		pop		r24
		add		r24,zl
		call	_LCtr
		ldi		zl,byte1(S002*2)
		ldi		zh,byte2(S002*2)
		call	_LSc
		lds		zl,voltav
		lds		zh,voltav+1
		call	_W2Str
		call	_LBW
		ldi		zl,byte1(S001*2)
		ldi		zh,byte2(S001*2)
		call	_LSc

;-Line--0029----Loop--
		rjmp	L0000
L0001:

;****** END OF USER BASIC CODE ****************

; String constants:
S000:	.db	"Raw Input   ", 0
S001:	.db	"   ", 0
S002:	.db	"Filtered    ", 0


;////// LcdInit ///////////////////////////
LcdIni:	in		zl,DDRA
		ori		zl,0xf0
		out		DDRA,zl
		sbi		DDRC,6
		sbi		DDRC,7
		cbi		PORTC,6
		cbi		PORTC,7
		ldi		zl,0x18
		rcall	_Wms
		ldi		r24,0x03
		rcall	_LOut
		ldi		zl,0x08
		rcall	_Wms
		rcall	_LEN
		ldi		zl,0x0d
		rcall	_Wus
		rcall	_LEN
		cbi		PORTA,4
		rcall	_LEN
		ldi		r24,0x28
		rcall	_LCtr
		ldi		r24,0x06
		rcall	_LCtr
		ldi		r24,0x0c
		rcall	_LCtr
		ldi		r24,0x01
		rcall	_LCtr
		ldi		zl,0x04
		rcall	_Wms
		ret

_Lch:	sbi		PORTC,6
		rjmp	_LNib
_LCtr:	cbi		PORTC,6
_LNib:	mov		r21,r24
		swap	r24
		rcall	_LOut
		mov		r24,r21
_LOut:	in		r23,PORTA
		andi	r23,0x0f
		swap	r24
		andi	r24,0xf0
		or		r24,r23
		out		PORTA,r24
		rcall	_LEN
		ret

;////// LcdEN /////////////////////////////
_LEN:	sbi		PORTC,7
		nop
		nop
		nop
		nop
		cbi		PORTC,7
		push	zl
		ldi		zl,0x04
		rcall	_Wus
		pop		zl
		ret

;////// LCD Byte & Word ///////////////////
_LBW:	ld		r24,Z+
		tst		r24
		breq	_LBW1
		rcall	_Lch
		rjmp	_LBW
_LBW1:	ret

;////// LCD string constants //////////////
_LSc:	elpm	r0,Z+
		tst		r0
		breq	_LSc1
		mov		r24,r0
		rcall	_Lch
		rjmp	_LSc
_Lsc1:	ret

;////// ADC ///////////////////////////////
_Adc:	sbi		ADCSRA,0x06
_Adc1:	sbic	ADCSRA,0x04
		rjmp	_Adc1
		in		zl,ADCL
		in		zh,ADCH
		sbi		ADCSRA,0x04
		ret

;////// IntToStr //////////////////////////
_B2str:	clr	zh
		clt
		rjmp	_W2st4
_W2str:	clt
		rjmp	_W2st4
_I2str:	clt
		sbrs	zh,0x07
		rjmp	_W2st4
		com		zl
		com		zh
		subi	zl,-0x01
		sbci	zh,-0x01
		set
_W2st4:	push	yl
		push	yh
		push	r6
		clr		r6
		st		-Y,r6
_N2str:	ldi		r21,0x10
		sub		r22,r22
_N2st1:	lsr		r6
		rol		zl
		rol		zh
		rol		r22
		rol		r6
		cpi		r22,0x0a
		brcs	_N2st2
		sbci	r22,0x0a
		inc		zl
_N2st2:	dec		r21
		brne	_N2st1
		subi	r22,-0x30
		st		-Y,r22
		mov		r22,zl
		or		r22,zh
		brne	_N2str
_N2st5:	brtc	_N2st3
		ldi		zl,0x2d
		st		-Y,zl
_N2st3:	mov		zl,yl
		pop		r6
		mov		zh,yh
		pop		yh
		pop		yl
		ret

;////// _Waitms ///////////////////////////
_Wms:	ldi		r20,0x14
_Wms1:	ldi		r21,0x7A
_Wms2:	dec		r21
		brne	_Wms2
		dec		r20
		brne	_Wms1
		dec		zl
		brne	_Wms
		ret

;////// _waitus ///////////////////////////
_wus:	ldi		r22,23
_wus1:	dec		r22
		brne	_wus1
		dec		zl
		brne	_wus
		ret

;////// 16/16 unsigned division ///////////
Di16u:	mov		r22,zl
		mov		r23,zh
		mov		zl,r24
		mov		zh,r25
		clr		r24
		sub		r25,r25
		ldi		r20,0x11
d16u1:	rol		zl
		rol		zh
		dec		r20
		brne	d16u2
		ret
d16u2:	rol		r24
		rol		r25
		sub		r24,r22
		sbc		r25,r23
		brcc	d16u3
		add		r24,r22
		adc		r25,r23
		clc
		rjmp	d16u1
d16u3:	sec
		rjmp	d16u1

;System Global Variables: 0  bytes
;User   Global Variables: 7  bytes

⌨️ 快捷键说明

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