Gast
#54987
Hallo!
uC: ATmega8
Entwicklungsumgebung AVRStudio
folgendes problem mit nachfolgendem Code:
Nach reset wird auf PortC 0b?1111111 ausgegeben.
Wenn der Timer Interrupt kommt, wird PortC eingelesen, invertiert und
wieder auf PortC ausgegeben. (sollte dann etwa auf 0V ausgegeben
werden). An den Ports liegt allerdings 2,5V (Vcc/2) an.
wenn ich direkt auf den PortC 0x00 ausgebe, erhalte ich das gewünschte
Ergebnis.
danke für eure hilfe
stefan
----------------------------------------------------------------------
.include "m8def.inc"
.def temp = r16
.equ AUS = 0x00
.equ EIN = 0xff
.equ TIMERSET = 0x00
.org 0x000
rjmp RESET
reti; rjmp EXT_INT0 ; IRQ0 Handler
reti; rjmp EXT_INT1 ; IRQ1 Handler
reti; rjmp TIM2_COMP
reti; rjmp TIM2_OVF
reti; rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_Compare_A ; Timer1 CompareA Handler
reti; rjmp TIM1_COMPB ; Timer1 CompareB Handler
reti; rjmp TIM1_OVF ; Timer1 Overflow Handler
reti; rjmp TIM0_OVF ; Timer0 Overflow Handler
reti; rjmp SPI_STC ; SPI Transfer Complete Handler
reti; rjmp USART_RXC ; USART RX Complete Handler
reti; rjmp USART_DRE ; UDR Empty Handler
reti; rjmp USART_TXC ; USART TX Complete Handler
reti; rjmp ADC ; ADC Conversion Complete Interrupt
Handler
reti; rjmp EE_RDY ; EEPROM Ready Handler
reti; rjmp ANA_COMP ; Analog Comparator Handler
reti; rjmp TWSI ; Two-wire Serial Interface Handler
reti; rjmp SPM_RDY ; Store Program Memory Ready
Handler
RESET:
;set stack
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
;set port
ldi temp, 0xff
out DDRC, temp
ldi temp, EIN
out PORTC, temp
;set timer
ldi temp, (1<<CS11) | (1<<CS10)
out TCCR1B, temp
ldi temp, 1<<OCF1A
out TIFR, temp
ldi temp, 1<<OCIE1A
out TIMSK, temp
ldi temp, 0x09
out OCR1AL, temp
ldi temp, 0x3D
out OCR1AH, temp
sei
ldi temp, 0x00
out TCNT1L, temp
out TCNT1H, temp
work:
rjmp work
TIM1_Compare_A:
;Werte sichern
push temp
in temp, SREG
push temp
;Port toggeln
in temp, PINC
com temp
out PORTC, temp
;Timer zurücksetzten
ldi temp, 0x00
out TCNT1L, temp
out TCNT1H, temp
;Werte zurückspielen
pop temp
out SREG, temp
pop temp
reti