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