.include"m8def.inc"
rjmp init
init:
ldi r16,high(ramend)
out sph,r16
ldi r16,low(ramend)
out spl,r16
ldi r17,0xE0 ;Slave Adresse
clr r18 ;für leerbyte
sei ;interrupts aktivieren
;initialisiere TWI
ldi r16,0b00000000 ;SCL Prescaler /1
out TWSR,r16
ldi r16,10 ;Bit rate generator Prescaler
out TWBR,r16
;initialisiere Slave
initslave:
rcall start
ldi r16,0x21 ;Oszillator einschalten
out TWDR,r16
rcall waitbyte
rcall stop
rcall start
ldi r16,0x81 ;Blinken aus,Display ein
out TWDR,r16
rcall waitbyte
rcall stop
rcall start
ldi r16,0xEF ;Display MAX Helligkeit
out TWDR,r16
rcall waitbyte
rcall stop
;Hauptprogramm
main:
rcall start
ldi r16,0x00 ;Startadresse senden
out TWDR,r16
rcall send
rcall leerbyte ;Byte0
ldi r16,0x7f ;Byte1,1000er,8
out TWDR,r16
rcall send
rcall leerbyte ;Byte2
ldi r16,0x7f ;Byte3,100er,8
out TWDR,r16
rcall send
rcall leerbyte ;Byte4
ldi r16,0x00 ;Byte5,Doppelpunkt,aus
out TWDR,r16
rcall send
rcall leerbyte ;Byte6
ldi r16,0x7f ;Byte7,10er,8
out TWDR,r16
rcall send
rcall leerbyte ;Byte8
ldi r16,0x7f ;Byte9,1er,8
out TWDR,r16
rcall send
rcall stop
rjmp main
;Unterprogramme
start:
out TWDR,r17 ;Sende Slave Adresse
ldi r16,0b10100100 ;Setze TWINT,TWSTA,TWEN
out TWCR,r16 ;Sende Start Byte
rcall waitbyte
ret
send:
ldi r16,0b10000100 ;setze TWINT,TWEN
out TWCR,r16 ;Byte Senden
rcall waitbyte
ret
waitbyte:
in r16,TWCR
sbrs r16,TWINT ;Senden erfolgt?
rjmp waitbyte
ret
stop:
ldi r16,0b10010100 ;setze TWINT,TWSTO,TWEN
out TWCR,r16 ;Sende Stop Byte
ret
leerbyte:
out TWDR,r18
rcall send
rcall waitbyte
ret