Error al programar atmega8

Saludos amigos foreros, les escribo para ver si me pueden dar una ayuda en el siguiente codigo que me tira el siguiente error:

overlap detected in .cseg

este error lo tira en la tercera instruccion despues de los vectores de interrupcion, aun asi cambie yo la instruccion sale el error en esa linea les dejo el codigo, ojala me puedan ayudar, gracias.



.INCLUDE "m8def.inc"
.ORG $000
RJMP inicio
.ORG $00e
RJMP adco
.ORG $00b
RJMP rx
inicio:
SEI ;//HABILITA INTERRUPCIONES GLOBALES
LDI r18,$03 ;//
LDI r19,$FF ;// <<<<<-------------AQUI SALE EL ERROR
OUT sph,r18 ;// INICIA EL PUNTERO DE PILA
OUT spl,r19 ;//
LDI r16,$FF ;//
OUT ddrb,r16 ;//CONFIGURA PUERTOB COMO SALIDA
LDI r17,$00 ;//
OUT portb,r27 ;//EN PRINCIPIO PUERTO B SALEN CEROS

LDI r20,$00 ;//
OUT ADMUX,r20 ;//
LDI r21,$6B ;//CONFIGURA EL ADC
OUT ADCSRA,r21 ;// EN PRINCIPIO ESTA APAGADO EL ADC

SBI UCSRA,1 ;//
LDI r22,$80 ;//
OUT UCSRB,r22 ;//
LDI r23,$86 ;// CONFIGURA USART
OUT UCSRC,r23 ;// EN PRINCIPIO APAGADA LA RX Y TX
LDI r24,$0C ;//
OUT UBRRL,r24 ;//
SBI UCSRB,3 ;//PRENDE TX
SBI UCSRB,4 ;//PRENDE RX
SBI ADCSRA,7 ;//PRENDE ADC

CICLO: ;//CICLO INFINITO
RJMP CICLO ;//ESPERANDO INTERUPCIONES
adco:
IN r23,ADCL ;//EN LA INTERRUPCION DEL ADC
OUT UDR,r23 ;// MANDA EL DATO
a:
SBI UCSRA,6 ;// TESTEA EL BIT PARA VER SI
RJMP a ;// YA SE HA ENVIADO LA INFORMACION
SBI UCSRA,6 ;// PONER A UNO ESTA BANDERA POR INSTRUCCIONES DEL MANUAL
RETI ;// RETORNO DE INTERRUPCION
rx:
IN r1,UDR ;//
OUT PORTB,r1 ;//CUANDO RECIBE ALGO LO MANDA AL
RETI ;//PUERTO B
 
"overlap detected in .cseg" quiere decir que estás intentando poner dos datos en la misma posición en la memoria de codigo (cuando usás ORG)

El problema es que deberías usar RJMP (1 word) en vez de RCALL (2 words), porque el atmega8 tiene solamente una word disponible para cada rutina de interrupción.

Saludos,
Gonzalo
 
Atrás
Arriba