Описание: Illegal attempt to re-use 'OC1Aaddr' as label |
Поиск в теме | Версия для печати |
ilnur888 |
Отправлено: 20 Марта, 2011 - 22:16:54
|
Маршал
Сообщений всего: 103
Дата рег-ции: Окт. 2010
|
Всем добрый вечер!
Уважаемые форумчане, пожалуйста помогите разобраться с ошибкой. Я еще начинающий по ассемблеру для МК-ов, делаю все по книге, но ошибки за ошибкой, а вроде делаю все как надо.
Сама ошибка:
CODE:D:\Program Files\Atmel\prj\prjInter\prjInter.asm(28): error: Illegal attempt to re-use 'OC1Aaddr' as label
Вообщем вот вам код:
CODE:.include "E:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8515def.inc"
;.def Razr0=r17
;.def Razr1=r18
;.def Razr2=r19
.def tmp=r20
.def tmp2=r21
.def tmp3=r22
;.CSEG
;.org 0
rjmp RESET
;rjmp INT0addr ;External Interrupt0 Vector Address
;rjmp INT1addr ;External Interrupt1 Vector Address
;rjmp ICP1addr ;Input Capture1 Interrupt Vector Address
rjmp OC1Aaddr ;Output Compare1A Interrupt Vector Address
;rjmp OC1Baddr ;Output Compare1B Interrupt Vector Address
;rjmp OVF1addr ;Overflow1 Interrupt Vector Address
;rjmp OVF0addr ;Overflow0 Interrupt Vector Address
;rjmp SPIaddr ;SPI Interrupt Vector Address
;rjmp URXCaddr ;UART Receive Complete Interrupt Vector Address
;rjmp UDREaddr ;UART Data Register Empty Interrupt Vector Address
;rjmp UTXCaddr ;UART Transmit Complete Interrupt Vector Address
;rjmp ACIaddr ;Analog Comparator Interrupt Vector Address
;rjmp INT2addr ;External Interrupt2 Vector Address
;rjmp OC0addr ;Output Compare0 Interrupt Vector Address
;rjmp ERDYaddr ; EEPROM Interrupt Vector Address
;rjmp SPMaddr ; SPM complete Interrupt Vector Address
;rjmp SPMRaddr ; SPM complete Interrupt Vector Address
OC1AADDR: ;ЗДЕСЬ УКАЗЫВАЕТ НА ОШИБКУ
ldi tmp,0
out TCNT1H,tmp
out TCNT1L,tmp
Shift:
cpi tmp2,0b10000000 ;сравнить с крайним значением
breq Init ;если равно - загр. нач. знач.
lsl tmp2 ;иначе - сдвиг влево
rjmp Output ;перейти на вывод в порт
Init:
ldi tmp2,0b00000001 ;загрузить нач значение
Output:
out PORTB,tmp2 ;вывод в порт
reti
reset:
ldi tmp,0b11111111 ;разрешить прерывание компаратора
out DDRB,tmp
ldi tmp,0b00000011 ;тактовый сигнал=СК/64
out TIMSK,tmp
ldi tmp,0x4C ;инициализация компаратора
out OCR1AH,tmp
ldi tmp,0x4B
out OCR1AL,tmp
;========
ldi tmp,HIGH(RAMEND)
out SPH,tmp
ldi tmp,LOW(RAMEND)
out SPL,tmp
;========
ldi tmp2,0b00000001 ;инициализация индикатора
ldi tmp,0 ;обнуление таймера
out TCNT1H,tmp
out TCNT1L,tmp
sei
;========
;основной цикл
;========
Inf: ;бесконечный цикл
rjmp Inf ;можно выполн любые действия
На всякий:
1)AVR Studio 4.18.684
GUI Version 4, 18, 0, 670
AVR Simulator 1, 0, 2, 1
ATMEGA8515 233
Operating System
Major 5
Minor 1
PlatformID 2
Build 2600
Service Pack 3
Plugins:
VDMAvrGUI
AvrPluginAvrAsmObject 1, 0, 0, 48
AvrPluginavrgccplugin 1, 0, 0, 11
Stk500Dll 1, 0, 1, 13
2)Windows XP Pro SP3 ну вряд ли здесь
я думаю может все дело в includ`ном файле??? |
|
|
ilnur888 |
Отправлено: 20 Марта, 2011 - 23:38:48
|
Маршал
Сообщений всего: 103
Дата рег-ции: Окт. 2010
|
Так, два пункта сделал как вы сказали - нет результата...
Имена меток прерывания я брал с m8515def.inc, уж не знаю не там ли ошибка...
(Добавление)
CODE:
...
...
.CSEG
.org 0
rjmp RESET
reti;rjmp INT0addr ;External Interrupt0 Vector Address
reti;rjmp INT1addr ;External Interrupt1 Vector Address
reti;rjmp ICP1addr ;Input Capture1 Interrupt Vector Address
rjmp OC1Aaddr ;Output Compare1A Interrupt Vector Address
reti;rjmp OC1Baddr ;Output Compare1B Interrupt Vector Address
reti;rjmp OVF1addr ;Overflow1 Interrupt Vector Address
reti;rjmp OVF0addr ;Overflow0 Interrupt Vector Address
reti;rjmp SPIaddr ;SPI Interrupt Vector Address
reti;rjmp URXCaddr ;UART Receive Complete Interrupt Vector Address
reti;rjmp UDREaddr ;UART Data Register Empty Interrupt Vector Address
reti;rjmp UTXCaddr ;UART Transmit Complete Interrupt Vector Address
reti;rjmp ACIaddr ;Analog Comparator Interrupt Vector Address
reti;rjmp INT2addr ;External Interrupt2 Vector Address
reti;rjmp OC0addr ;Output Compare0 Interrupt Vector Address
reti;rjmp ERDYaddr ; EEPROM Interrupt Vector Address
reti;rjmp SPMaddr ; SPM complete Interrupt Vector Address
reti;rjmp SPMRaddr ; SPM complete Interrupt Vector Address
OC1AADDR:
...
...
исправил
(Добавление)
та же часть, но как вы сказали:
CODE:...
...
.CSEG
.org 0
rjmp RESET
.org $004 ;Output Compare1A Interrupt Vector Address
OC1AADDR:
...
...
(Добавление)
А вы не пробовали у себя ч/з ассемблер скомпилировать? Может это только у меня такие проблемы??? Просто я и другие проги пробовал с прерываниями делать - та же ошибка!
Как будто AVRStudio перестал прерывания узнавать...
Кстати, при первом запуске AVR Studio показал, что в самом includ`ном файле m8515def.inc ОШИБКА!, а потом как-то пропало все... вообщем чудеса да и только!(Отредактировано автором: 20 Марта, 2011 - 23:48:54) |
|
|
nest |
Отправлено: 21 Марта, 2011 - 01:38:13
|
Администратор
Сообщений всего: 4866
Дата рег-ции: Сент. 2009
|
ilnur888 пишет:Кстати, при первом запуске AVR Studio показал, что в самом includ`ном файле m8515def.inc ОШИБКА
откомментируйте строку в m8515def.inc :
;.equ OR =3 ; old name kept for compatibilty
В след. раз не берите имена меток, которые уже определены в инклюднике.
И заглядывайте в даташит почаще, там очень много примеров.
И снабжайте комментариями блоки кода, что б каши не получалось.
Так работает:
CODE:.CSEG
.org 0
rjmp RESET ; Reset Handler
RETI; rjmp EXT_INT0 ; IRQ0 Handler
RETI; rjmp EXT_INT1 ; IRQ1 Handler
RETI; rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 Compare A Handler
RETI; rjmp TIM1_COMPB ; Timer1 Compare B 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_UDRE ; UDR0 Empty Handler
RETI; rjmp USART_TXC ; USART TX Complete Handler
RETI; rjmp ANA_COMP ; Analog Comparator Handler
RETI; rjmp EXT_INT2 ; IRQ2 Handler
RETI; rjmp TIM0_COMP ; Timer0 Compare Handler
RETI; rjmp EE_RDY ; EEPROM Ready Handler
RETI; rjmp SPM_RDY ; Store Program memory Ready Handler
TIM1_COMPA:
ldi tmp,0
out TCNT1H,tmp
out TCNT1L,tmp
Shift:
cpi tmp2,0b10000000 ;сравнить с крайним значением
breq Init ;если равно - загр. нач. знач.
lsl tmp2 ;иначе - сдвиг влево
rjmp Output ;перейти на вывод в порт
Init:
ldi tmp2,0b00000001 ;загрузить нач значение
Output:
out PORTB,tmp2 ;вывод в порт
reti
reset:
ldi tmp,0b11111111 ;разрешить прерывание компаратора
out DDRB,tmp
ldi tmp,0b00000011 ;тактовый сигнал=СК/64
out TIMSK,tmp
ldi tmp,0x4C ;инициализация компаратора
out OCR1AH,tmp
ldi tmp,0x4B
out OCR1AL,tmp
;========
ldi tmp,HIGH(RAMEND)
out SPH,tmp
ldi tmp,LOW(RAMEND)
out SPL,tmp
;========
ldi tmp2,0b00000001 ;инициализация индикатора
ldi tmp,0 ;обнуление таймера
out TCNT1H,tmp
out TCNT1L,tmp
sei
;========
;основной цикл
;========
Inf: ;бесконечный цикл
rjmp Inf ;можно выполн любые действия |
|
|
|
Поиск в теме | Версия для печати |
Страниц (1): [1] |
« Программирование микроконтроллеров » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|