All pastes #224538 Raw Edit

pepsi

public text v1 · immutable
#224538 ·published 2006-10-27 13:12 UTC
rendered paste body
#include "1200def.inc"

#define LCD_CTRL	PORTD
#define LCD_DATA	PORTB

#define COM_RESET	PORTD3
#define COM_EOC		PORTD4
#define LCD_RS		PORTD5
#define LCD_E		PORTD6

#define COM_PC		PORTB4
#define COM_SDO		PORTB5
#define COM_SCLK	PORTB7

.org 0
cbi		LCD_CTRL, LCD_RS
ldi		r16, 0x10
out		PORTB, r16
ldi		r16, 0x80
out		PORTD, r16
ldi		r16, 0x1F
out		DDRB, r16
ldi		r16, 0x68
out		DDRD, r16
ldi		r16, 0x03
out		LCD_DATA, r16
rcall	Delay15ms
rcall	ToggleE
rcall	Delay15ms
rcall	ToggleE
rcall	Delay15ms
rcall	ToggleE
rcall	Delay15ms
ldi		r16, 0x02
out		LCD_DATA, r16
rcall	ToggleE
rcall	Delay15ms
ldi		r16, 0x28
rcall	LCDWrite
rcall	Delay15ms
ldi		r16, 0x08
rcall	LCDWrite
rcall	Delay15ms
ldi		r16, 0x01
rcall	LCDWrite
rcall	Delay15ms
ldi		r16, 0x06
rcall	LCDWrite
rcall	Delay15ms
ldi		r16, 0x0E
rcall	LCDWrite
rcall	Delay15ms

sbi		LCD_CTRL, LCD_RS
nop
ldi		r16, 'A'
rcall	LCDWrite

ldi		r18, 0	// eeprom start address
ldi		r19, 16	// position counter
cbi		LCD_CTRL, LCD_RS
ldi		r16, 0x80
rcall	LCDWrite
rcall	Delay15ms

sbi		LCD_CTRL, LCD_RS

DrawCompass:
out		EEAR, r18 // start address
sbi		EECR, EERE // read
in		r16, EEDR
rcall	LCDWrite
rcall	Delay15ms
inc		r18
dec		r19
brne	DrawCompass

wait:
cbi		PORTB, COM_PC
sbic	PIND, COM_EOC
rjmp	wait
sbi		PORTB, COM_PC
WaitForHigh:
sbis	PIND, COM_EOC
rjmp	waitForHigh
ldi		r20, 7

WaitClockLow:
sbic	PINB, COM_SCLK
rjmp	WaitClockLow
WaitClockHigh:
sbis	PINB, COM_SCLK
rjmp	WaitClockHigh
dec		r20
brne	WaitClockLow

sbic	PINB, COM_SCLK
rjmp	PC-1
sbis	PINB, COM_SCLK
rjmp	PC-1

ldi		r21, 0
sbic	PINB, COM_SDO
ldi		r21, 1

ldi		r20, 8
Load2ndByte:
sbic	PINB, COM_SCLK
rjmp	PC-1
sbis	PINB, COM_SCLK
rjmp	PC-1
clc
sbis	PINB, COM_SDO
sec		
rol		r22
dec		r20
brne	Load2ndByte

cbi		LCD_CTRL, LCD_RS
ldi		r16, 0x80
rcall	LCDWrite
rcall	Delay15ms
sbi		LCD_CTRL, LCD_RS
mov		r16, r21
subi	r16, -'A'
rcall	LCDWrite
rcall	Delay15ms
mov		r16, r22
andi	r16, 0xF0
swap	r16
subi	r16, -'A'
rcall	LCDWrite
rcall	Delay15ms
mov		r16, r22
andi	r16, 0x0F
subi	r16, -'A'
rcall	LCDWrite
rcall	Delay15ms


done:
rjmp done
nop


ToggleE:
nop
nop
nop
sbi		LCD_CTRL, LCD_E
nop
nop
nop
cbi		LCD_CTRL, LCD_E
nop
nop
nop
ret


Delay15ms:
ldi		r17, 20
ldi		r16, low(250)
dec		r16
brne	PC-1
dec		r17
brne	PC-4
ret


LCDWrite:
in		r29, LCD_DATA
andi	r29, 0xF0

mov		r31, r16
mov		r30, r31

andi	r31, 0x0F
andi	r30, 0xF0
swap	r30

or		r30, r29
out		LCD_DATA, r30
rcall	ToggleE

or		r31, r29
out		LCD_DATA, r31
rcall	ToggleE
ret


.eseg
.org 0
.db "---|---N---|---W---|---S---|---E---|---N---|---W---|---S---|---E"

.exit

---|---N---|---W---|---S---|---E---|---N---|---W---|---S---|---E---|


PD0:
PD1:
PD2:
PD3: /RESET
PD4: EOC
PD5: RS
PD6: E
PB0: D4
PB1: D5
PB2: D6
PB3: D7
PB4: P/C
PB5: SDO
PB6:
PB7: SCLK


-NW-|--N--|--NE
NW-|--N--|--NE-
W-|--N--|--NE-|
-|--N--|--NE-|-
|--N--|--NE-|--
--N--|--NE-|--E
-N--|--NE-|--E-
N--|--NE-|--E--
--|--NE-|--E--|
-|--NE-|--E--|-
|--NE-|--E--|--
--NE-|--E--|--S
-NE-|--E--|--SE
NE-|--E--|--SE-
E-|--E--|--SE-|
-|--E--|--SE-|-
|--E--|--SE-|--
--E--|--SE-|--S
-E--|--SE-|--S-
E--|--SE-|--S--
--|--SE-|--S--|
-|--SE-|--S--|-
|--SE-|--S--|--
--SE-|--S--|--S
-SE-|--S--|--SW
SE-|--S--|--SW-
E-|--S--|--SW-|
-|--S--|--SW-|-
|--S--|--SW-|--
--S--|--SW-|--W
-S--|--SW-|--W-
S--|--SW-|--W--
--|--SW-|--W--|
-|--SW-|--W--|-
|--SW-|--W--|--
--SW-|--W--|--N
-SW-|--W--|--NW
SW-|--W--|--NW-
W-|--W--|--NW-|
-|--W--|--NW-|-
|--W--|--NW-|--
--W--|--NW-|--N
-W--|--NW-|--N-
W--|--NW-|--N--
--|--NW-|--N--|
-|--NW-|--N--|-
|--NW-|--N--|--
--NW-|--N--|--N