TWI_DATASHEET.asm
1 | .include "m8def.inc"
| 2 |
| 3 | .def temp1 = r16
| 4 | .def temp2 = r17
| 5 | .def temp3 = r18
| 6 |
| 7 | ldi temp1, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse
| 8 | out SPL, temp1
| 9 | ldi temp1, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse
| 10 | out SPH, temp1
| 11 |
| 12 | ldi temp1, 0xFF ; Port B & C als Ausgang schalten
| 13 | out DDRB, temp1
| 14 | out DDRC, temp1
| 15 |
| 16 | ;===========================================================================
| 17 |
| 18 | ldi temp1, 12
| 19 | out TWBR, temp1
| 20 | ldi temp1, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
| 21 | out TWCR, temp1 ; Sende Start condition
| 22 |
| 23 | wait1:
| 24 | in temp1,TWCR ; Warten bis das TWINT Flag gesetzt ist.
| 25 | sbrs temp1,TWINT ; Das bedeutet das die START Condition gesetzt ist
| 26 | rjmp wait1
| 27 |
| 28 | in temp1,TWSR ; TWI Statusregister abfragen
| 29 | andi temp1, 0xF8 ; Prescalerbits Maskieren
| 30 | ; sbrs temp1, TWSTA ;
| 31 | ; brne ERROR_1
| 32 |
| 33 | ldi temp1, 0x40
| 34 | out TWDR, temp1
| 35 | ldi temp1, (1<<TWINT) | (1<<TWEN)
| 36 | out TWCR, temp1
| 37 |
| 38 | wait2:
| 39 | in temp1,TWCR
| 40 | sbrs temp1,TWINT
| 41 | rjmp wait2
| 42 |
| 43 | in temp1,TWSR
| 44 | andi temp1, 0xF8
| 45 | sbrs temp1, TWEA ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
| 46 | brne ERROR
| 47 |
| 48 | ldi temp1, 0x40
| 49 | out TWDR, temp1
| 50 | ldi temp1, (1<<TWINT) | (1<<TWEN)
| 51 | out TWCR, temp1
| 52 |
| 53 | wait3:
| 54 | in temp1,TWCR
| 55 | sbrs temp1,TWINT
| 56 | rjmp wait3
| 57 |
| 58 | in temp1,TWSR
| 59 | andi temp1, 0xF8
| 60 | sbrs temp1, TWEA ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
| 61 | brne ERROR
| 62 |
| 63 | ldi temp1, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
| 64 | out TWCR, temp1
| 65 |
| 66 | main:
| 67 | ldi temp1, 0x04
| 68 | out PORTB, temp1
| 69 | rjmp main
| 70 |
| 71 | ERROR:
| 72 | ldi temp1, 0x01
| 73 | out PORTB, temp1
| 74 | rjmp ERROR
| 75 |
| 76 | ERROR_1:
| 77 | ldi temp1, 0x02
| 78 | out PORTB, temp1
| 79 | rjmp ERROR
|
|