atmega 128 portd problémák

VFX info at vfx.hu
Mon Sep 13 23:44:02 CEST 2004


Hali!

> attól még a progi többi részének muködnie kell. Egy köztes tesztet próbáltam
> meg lefuttatni, természetesen készül a kiszolgáló rutin is. Íme a progi
> 
> .org 0x0000
> rjmp init
> reti
> rjmp INT0
> reti
> rjmp INT1
> reti
> rjmp INT2
> reti
> rjmp INT3

Szerintem inkabb hasznald a teljes vektort, abbol baj nem lehet:

	jmp	RESET			; Reset Handler
	jmp	EXT_INT0		; IRQ0 Handler
	jmp	EXT_INT1		; IRQ1 Handler
	jmp	EXT_INT2		; IRQ2 Handler
	jmp	EXT_INT3		; IRQ3 Handler
	jmp	EXT_INT4		; IRQ4 Handler
	jmp	EXT_INT5		; IRQ5 Handler
	jmp	EXT_INT6		; IRQ6 Handler
	jmp	EXT_INT7		; IRQ7 Handler
	jmp	TIM2_COMP		; Timer2 Compare Handler
	jmp	TIM2_OVF		; Timer2 Overflow Handler
	jmp	TIM1_CAPT		; Timer1 Capture Handler
	jmp	TIM1_COMPA		; Timer1 CompareA Handler
	jmp	TIM1_COMPB		; Timer1 CompareB Handler
	jmp	TIM1_OVF		; Timer1 Overflow Handler
	jmp	TIM0_COMP		; Timer0 Compare Handler
	jmp	TIM0_OVF		; Timer0 Overflow Handler
	jmp	SPI_STC			; SPI Transfer Complete Handler
	jmp	USART0_RXC		; USART0 RX Complete Handler
	jmp	USART0_DRE		; USART0,UDR Empty Handler
	jmp	USART0_TXC		; USART0 TX Complete Handler
	jmp	AADC			; ADC Conversion Complete Handler
	jmp	EE_RDY			; EEPROM Ready Handler
	jmp	ANA_COMP		; Analog Comparator Handler
	jmp	TIM1_COMPC		; Timer1 CompareC Handler
	jmp	TIM3_CAPT		; Timer3 Capture Handler
	jmp	TIM3_COMPA		; Timer3 CompareA Handler
	jmp	TIM3_COMPB		; Timer3 CompareB Handler
	jmp	TIM3_COMPC		; Timer3 CompareC Handler
	jmp	TIM3_OVF		; Timer3 Overflow Handler
	jmp	USART1_RXC		; USART1 RX Complete Handler
	jmp	USART1_DRE		; USART1,UDR Empty Handler
	jmp	USART1_TXC		; USART1 TX Complete Handler
	jmp	TWI			; Two-wire Serial Interface Interrupt Handler
	jmp	SPM_RDY			; SPM Ready Handler



RESET:

> 
> init:
>  ldi r16, low(RAMEND)
>  out SPL, r16
>  ldi r16, high(RAMEND)
>  out SPH, r16
> 
>  ldi r16, 0xFF                             ;PORTA
>  out DDRA, r16                          ;kimenet
> 
Itt a D-port bemenet, de nincs pull-up:
>  ldi r16, 0x00                             ;POTRD
>  out DDRD, r16                         ;bemenet

Ettol lett pull-up:
  ldi R16,0xFF
  out PORTD,R16				;etto mind a 8 bit pull-up

Ezt meg a sei ele tennem, mert lesz egy rakat vetlen interruptod.
A maik, hogy engedelyezted, de low-level allapotra fogsz majd
interruptot kapni.

>  ldi r16, 0x0F                             ;int0-3

Ez a sor azert kell, hogy ne legyen interrupt egybol, ha kiadod a SEI-t:
   out EFIR,R16

>  out EIMSK, r16                         ;engedélyezve



> 
>  sei                                             ;megszakítások engedélyezve
> (általános)


> 
> flashing_line:
> 
>  ldi r16, 0xFF
>  out PORTA, r16
>  rcall delay
>  ldi r16, 0x00
>  out PORTA, r16
>  rcall delay
>  rjmp flashing_line
> 
> delay:                                        ;ez itt egy szoftveres
> késleltetés akar lenni
>  ldi r16, 8                                  ;ha igaz 4 MHz-es órajelnél 0.5
> sec
>   outer_loop:                              ;forrás: www.avrbeginners.net
>   ldi r24, low(3037)
>   ldi r25, high(3037)
>    delay_loop:
>     adiw r24, 1
>     brne delay_loop
> 
>   dec r16
>   brne outer_loop
> ret


Ettol meg jo is lehet, de minek az interrupt, ha nem hasznalod?

Ezket azert meg ird bele:
INT0: RETI
INT1: RETI
INT2: RETI stb...
...



UDV. VFX.
http://www.vfx.hu

> 
> -----------------------------------
>  Szponzorunk: http://tonerbolt.hu/




More information about the Elektro mailing list