- Labornetzteil AliExpress         
Ergebnis 1 bis 4 von 4

Thema: ATMEGA16 IIC Fehler beim Compilen

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.02.2005
    Beiträge
    11

    ATMEGA16 IIC Fehler beim Compilen

    Hi,
    und zwar will ich etwas mit dem IIC Bus des ATmega16 machen.
    z.B. serielles EEprom oder eine RTC ansteuern.
    Dazu habe ich mit eine routine aus dem Datenblatt geholt:

    Code:
     .include "m16def.inc"
    
    .ORG 0x00
    	JMP	RESET 			; Reset Handler
    .ORG 0x02
    	JMP	UNUSED			; IRQ0 Handler
    .ORG 0x04
    	JMP	UNUSED			; IRQ1 Handler
    .ORG 0x06
    	JMP	UNUSED		; Timer2 Compare Handler
    .ORG 0x08
    	JMP	UNUSED		; Timer2 Overflow Handler
    .ORG 0x0A
    	JMP	UNUSED		; Timer1 Capture Handler
    .ORG 0x0C
    	JMP	UNUSED		; Timer1 CompareA Handler
    .ORG 0x0E
    	JMP	UNUSED		; Timer1 CompareB Handler
    .ORG 0x10
    	JMP	UNUSED   		; Timer1 Overflow Handler
    .ORG 0x12	
    	JMP	UNUSED		; Timer0 Overflow Handler
    .ORG 0x14
    	JMP	UNUSED	; Serial Transfer Complete Handler
    .ORG 0x16
    	JMP	UNUSED	; USART0 RX Complete Handler
    .ORG 0x18
    	JMP	UNUSED	; USART0,UDR Empty Handler
    .ORG 0x1A
    	JMP	UNUSED	; USART0 TX Complete Handler
    .ORG 0x1C
    	JMP	UNUSED	; ADC Conversion Complete Handler
    .ORG 0x1E
    	JMP	UNUSED	; EEPROM Ready Handler
    .ORG 0x20
    	JMP	UNUSED	; Analog Comparator Handler
    .ORG 0x22
    	JMP	UNUSED			; TWI Handler
    .ORG 0x24
    	JMP	UNUSED			; IRQ2 Handler
    .ORG 0x26
    	JMP	UNUSED		; Timer0 Compare Handler
    .ORG 0x28
    	JMP	UNUSED		; SPM Ready Handler
    
    UNUSED:
      ret
    
    RESET:
    
    ldi r16,high (Ramend)
    out sph,r16
    ldi r16,low (Ramend)
    out spl,r16
    sei
    
    .def SLA_W = r20
    .def MT_SLA_ACK = r17
    .def MT_DATA_ACK = r18
    .def DATA = r19
    .def START = r21
    
    Main:
    
    ldi r16, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)  ; Send START condition
    out TWCR, r16
    
    wait1:                                  ; Wait for TWINT Flag set.                           
    in r16,TWCR                               ; This indicates that the
    sbrs r16,TWINT                            ; START condition has been
    rjmp wait1                                ; transmitted
    
    in r16,TWSR                               ; Check value of TWI Status Register.
    andi r16, 0xF8                            ; Mask prescaler bits.
    cpi r16, START                            ; If status different from
    brne ERROR                                ; START go to ERROR
    
    ldi r16, SLA_W                            ; Load SLA_W into TWDR
    out TWDR, r16                             ; Register. Clear TWINT bit in 
    ldi r16, (1<<TWINT) | (1<<TWEN)           ; TWCR to start
    out TWCR, r16                             ; transmission of address
    
    wait2:		                  ; Wait for TWINT Flag set.
    in r16,TWCR		  ; This indicates that the 
    sbrs r16,TWINT                            ; SLA+W has been transmitted,
    rjmp wait2                                ; and ACK/NACK has been received.
    
    in r16,TWSR                               ; Check value of TWI Status 
    andi r16, 0xF8	                 ; Register. Mask prescaler bits.
    cpi r16, MT_SLA_ACK                       ; If status different from
    brne ERROR                                ; MT_SLA_ACK go to ERROR
    
    ldi r16, DATA                             ; Load DATA into TWDR Register.
    out TWDR, r16                             ; Clear TWINT bit in TWCR
    ldi r16, (1<<TWINT) | (1<<TWEN)           ; to start transmission
    out TWCR, r16                             ; of data
    
    wait3:                                    ; Wait for TWINT Flag set.
    in r16,TWCR                               ; This indicates that the DATA
    sbrs r16,TWINT                            ; has been transmitted, and
    rjmp wait3                                ; ACK/NACK has been received.
    
    in r16,TWSR                               ; Check value of TWI Status 
    andi r16, 0xF8                            ; Register. Mask prescaler bits.
    cpi r16, MT_DATA_ACK                      ; If status different from
    brne ERROR                                ; MT_DATA_ACK go to ERROR
    
    ldi r16, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)  ; Transmit STOPcondition
    out TWCR, r16
    
    rjmp Main
    
    
    ERROR:
    rjmp Error

    Gut mir ist klar,daß noch so sachen wie eine fehlerroutine,usw fehlen.
    Trotzdem sollte ich den Code schon compilen können.
    Nur leider bringt mein AVR Studio Fehlermeldungen.
    Siehe anhang.

    Hat jemand eine Idee woher der Fehler kommen könnte?

    Hier habe ich auch noch ein Problem für das ich bis jetzt auch keine Lösung gefunden habe:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=9972 !

    Hat vielleicht schon jemand in ASM einen fertigen Quellcode für eine IIC routine, oder weiss vielleicht eine Seite wo man die her bekommt?

    Gruß und danke schonmal
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken avrstundion.jpg  

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test