All pastes #640263 Raw Edit

Something

public text v1 · immutable
#640263 ·published 2007-07-31 07:58 UTC
rendered paste body

.NOLIST
.INCLUDE 	"m8def.inc"
.LIST

; Send a null terminated string over UART

WriteHelloWorld:
	ldi ZH, HIGH(HelloWorldString)
	ldi ZL, LOW(HelloWorldString)
	; Set R16 to 0x00 which we'll use for terminating a character later
	ldi R16, 0x00

CharSendLoop:
	; Load the memory located at address Z into register R4,
	; Then increase Z so on the next run it will by the next memory slot
	lpm R4, Z+

WaitToTransmit: 
	; sbis, skip next instruction if bit is set, so
	; Basically skip next instruction if UDRE (ready to send) isset in UCSRA
	; otherwise it will do rjmp WaitToTransmit and loop back around
	sbis UCSRA, UDRE 
	rjmp WaitToTransmit
	; Because there is room to transmit, it's now time to send something
	; Send the contents of R4 (whatever is stored in memory at that address)
	; to serial port. 
	out UDR, R4
	; Now compare R4 and R16 (which is 0x00, termination) to see if R4 is 0
	cp R4, R16
	; Branch-Not-Equal (brne) back to send the character since we're R4 is not 
	; 0x00 yet, it must still have something to send. 
	brne CharSendLoop
	; Otherwise we should return (where?)
	ret

HelloWorldString: 
	; Here we define the immediates that will be inserted into ZH and ZL
	; one byte at a time. 
	.db 'H'
	.db 'e'
	.db 'l'
	.db 'l'
	.db 'o'
	.db ','
	.db ' '
	.db 'W'
	.db 'o'
	.db 'r'
	.db 'l'
	.db 'd'
	.db 0