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