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

📄 avr_108_load_program_memory.asm

📁 Collected AVR assembler code samples to learn assembler. I use it in my classes.
💻 ASM
字号:
;**** A P P L I C A T I O N   N O T E   A V R 1 0 8 ************************
;*
;* Title:		Load Program Memory
;* Version:		1.0
;* Last updated:	98.02.27
;* Target:		AT90Sxx1x and higher (Devices with SRAM)
;*
;* Support E-mail:	avr@atmel.com
;*
;* DESCRIPTION
;* This Application note shows how to use the Load Program Memory (LPM)
;* instruction. The App. note loads the string "Hello World" from 
;* program memory byte by byte, and puts it onto port B.
;*
;***************************************************************************


.include "8515def.inc"

.device AT90S8515			; Specify device

.def	temp	=r16			; Define temporary variable


start:	ldi	temp,low(RAMEND)
	out	SPL,temp		; Set stack pointer to last internal RAM location
	ldi	temp,high(RAMEND)
	out	SPH,temp

	ldi	temp,$ff
	out	PORTB,temp		; Set all pins at port B high
	out	DDRB,temp		; Set port B as output

	; Load the address of 'message' into the Z register. Multiplies
	; word address with 2 to achieve the byte address, and uses the
	; functions high() and low() to calculate high and low address byte.

	ldi	ZH,high(2*message)	; Load high part of byte address into ZH
	ldi	ZL,low(2*message)	; Load low part of byte address into ZL

loadbyte:
	lpm				; Load byte from program memory into r0

	tst	r0			; Check if we've reached the end of the message
	breq	quit			; If so, quit

	out	PORTB,r0		; Put the character onto Port B

	rcall	one_sec_delay		; A short delay

	adiw	ZL,1			; Increase Z registers
	rjmp	loadbyte


quit:	rjmp quit


one_sec_delay:
	ldi	r20, 20
	ldi	r21, 255
	ldi	r22, 255
delay:	dec	r22
	brne	delay
	dec	r21
	brne	delay
	dec	r20
	brne	delay
	ret


message:
.db	"Hello World"
.db	0

⌨️ 快捷键说明

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