📄 avr_108_load_program_memory.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 + -