Например TDA7294

Форум РадиоКот • Просмотр темы - attiny2313 ошибка при компиляции
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн фев 23, 2026 00:11:24

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: attiny2313 ошибка при компиляции
СообщениеДобавлено: Пт авг 29, 2014 22:37:59 
Мучитель микросхем
Аватар пользователя

Карма: 2
Рейтинг сообщений: 6
Зарегистрирован: Пн фев 11, 2008 20:14:38
Сообщений: 403
Откуда: Москва
Рейтинг сообщения: 0
Привет всем хвостатым!!)) Читаю я тут книжку и переписал из нее программу. Программа обычный счетчик нажатий кнопки. Переписал ее для изучения внутренних процессов мк. Так вот при компиляции вываливается ошибка, с которой я ранее не сталкивался, есть идеи?

Вот сам собственно код:
Спойлер
Код:
.device Attiny2313
.include "2313def.inc"

.def temp = r16
.def Count_time = r17
.def Counter = r18
.def Flag = r19

rjmp RESET ; Reset Handler
rjmp INT0 ; External Interrupt0 Handler
;rjmp INT1 ; External errupt1 Handler
;rjmp TIM1_CAPT ; Timer1 Capture Handler
;rjmp TIM1_COMPA ; Timer1 CompareA Handler
;rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
;rjmp USART0_RXC ; USART0 RX Complete Handler
;rjmp USART0_DRE ; USART0,UDR Empty Handler
;rjmp USART0_TXC ; USART0 TX Complete Handler
;rjmp ANA_COMP ; Analog Comparator Handler
;rjmp PCINT ; Pin Change Interrupt
;rjmp TIMER1_COMPB ; Timer1 Compare B Handler
;rjmp TIMER0_COMPA ; Timer0 Compare A Handler
;rjmp TIMER0_COMPB ; Timer0 Compare B Handler
;rjmp USI_START ; USI Start Handler
;rjmp USI_OVERFLOW ; USI Overflow Handler
;rjmp EE_READY ; EEPROM Ready Handler
;rjmp WDT_OVERFLOW ; Watchdog Overflow Handler

INT0:
   clr temp
   out GIMSK, temp
   ldi temp, $FF
   out GIFR, temp
   sbrs Flag, 0
   rjmp Push_pin
   cbr Flag, 1
   inc Counter
   out PORTB, Counter
   ldi Count_time, 50
   rjmp ent_int

Push_pin:
   sbr Flag, 1
   ldi Count_time, 128

ent_int:
   ldi temp, 0b00000011
   out TCCR0, temp
   reti

TIM0_OVF:
   dec Count_time
   breq end_timer
   reti

end_timer:
   clr temp
   out TCCR0, temp
   sbrc Flag, 0
   rjmp Push_tim
   ldi temp, (1<<ISC01)
   out MCUCR, temp
   rjmp end_tim

Push_tim:
   ldi temp, (1<<ISC01|1<<ISC11)
   out MCUCR, temp

end_tim:
   ldi temp, (1<<INT0)
   out GIMSK, temp
   reti
   
RESET:
   ldi temp, low(RAMEND)
   out SPL, temp
   ldi temp, 0b00000100
   out PORTD, temp
   ldi temp, 0b11111111
   out DDRB, temp
   clr Counter
   clr Flag
   ldi temp, (1<<TOIE0)
   out TIMSK, temp
   ldi temp, (1<<ISC01)
   out MCUCR, temp
   ldi temp, (1<<INT0)
   out GIMSK, temp
   sei

Gcykle:
rjmp Gcykle



а вот вывод avr studio 4

asm v1
error : Duplicate label
error : Internal - label changed between passes - conditoonal on forward reference?

asm v2
error: Illegal attempt to re-use 'INT0' as label
C:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler2\Appnotes\2313def.inc(197): info: previous definition of 'INT0'

забегу вперед, данная прога работает на atmega16 как то через жопу некорректно: счет идет после второго нажатия, а иногда бывает и одно нажатие считает, в чем траблы??

_________________
Плюс - минус = заряд, фаза - ноль = ???


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: attiny2313 ошибка при компиляции
СообщениеДобавлено: Сб авг 30, 2014 03:52:32 
Держит паяльник хвостом

Карма: 10
Рейтинг сообщений: 161
Зарегистрирован: Чт апр 03, 2014 23:16:55
Сообщений: 963
Откуда: Россия
Рейтинг сообщения: 0
Здравствуйте.
Ругается вот на это:
Код:
...
INT0:
   clr temp
   out GIMSK, temp
....

INT0 не может быть меткой :)
Вообщем надо как то так(пример из сети):
Код:
; Oбработкa прерывания INT0.
;настройка адреса вектора прерывания int0
.org INT0addr
rjmp _INT0
;_____
....
_INT0:
....
reti

Пожалуй и
Код:
.device Attiny2313
лишнее, раз уж есть:
Код:
.include "2313def.inc"

Цитата:
...данная прога работает на atmega16 некорректно...
Как это вяжется с Attiny2313? :shock:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: attiny2313 ошибка при компиляции
СообщениеДобавлено: Сб авг 30, 2014 09:22:31 
Мучитель микросхем
Аватар пользователя

Карма: 2
Рейтинг сообщений: 6
Зарегистрирован: Пн фев 11, 2008 20:14:38
Сообщений: 403
Откуда: Москва
Рейтинг сообщения: 0
Цитата:
INT0 не может быть меткой


любопытно!!!! Прерывания взяты из datasheeta, и если данную метку переименовать то внешнее прерывание перестает работать (((

Цитата:
Как это вяжется с Attiny2313?


программу тестирую на железе, просто под рукой была именно 16 мега, переделал код под нее, результат не айс, ковырялся не получилось, перенес обратно на тиньку и вот результат...

_________________
Плюс - минус = заряд, фаза - ноль = ???


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: attiny2313 ошибка при компиляции
СообщениеДобавлено: Сб авг 30, 2014 19:05:06 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 1
slyberkut, таблица прерываний у вас оформлена ... не очень.
Ознакомьтесь с вот этой темой
viewtopic.php?f=57&t=72364

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: attiny2313 ошибка при компиляции
СообщениеДобавлено: Вс авг 31, 2014 00:58:56 
Держит паяльник хвостом

Карма: 10
Рейтинг сообщений: 161
Зарегистрирован: Чт апр 03, 2014 23:16:55
Сообщений: 963
Откуда: Россия
Рейтинг сообщения: 0
slyberkut писал(а):
любопытно!!!! Прерывания взяты из datasheeta...

Цитата:
.device Attiny2313
.include "2313def.inc"
Вы там видели? Нет там такого. Кстати, откройте "2313def.inc" и поймете почему:
Цитата:
INT0 не может быть меткой

Вы сначала запустите свою программу на Attiny2313, а потом уже мегу, не все сразу :)
Программа, то рабочая, по нажатию на кнопку - прерывание и индикация на светодиодах чего там насчитали, только исправьте пару ошибок.
Совершенно верно и хорошо Вам посоветовали:
Kavka писал(а):
Ознакомьтесь с вот этой темой
viewtopic.php?f=57&t=72364


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: attiny2313 ошибка при компиляции
СообщениеДобавлено: Вт сен 09, 2014 17:19:23 
Мучитель микросхем
Аватар пользователя

Карма: 2
Рейтинг сообщений: 6
Зарегистрирован: Пн фев 11, 2008 20:14:38
Сообщений: 403
Откуда: Москва
Рейтинг сообщения: 0
А хотел бы поинтересоваться: .cseg и .org 0x0000 крайне желательно указывать? не смотря на то что программка такая простая.

_________________
Плюс - минус = заряд, фаза - ноль = ???


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: attiny2313 ошибка при компиляции
СообщениеДобавлено: Вт сен 09, 2014 17:27:29 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2121
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18473
Откуда: Новочеркасск
Рейтинг сообщения: 2
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Полезно сразу привыкать к правильнописанию программ, даже простых :-)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: attiny2313 ошибка при компиляции
СообщениеДобавлено: Вт сен 09, 2014 23:04:35 
Мучитель микросхем
Аватар пользователя

Карма: 2
Рейтинг сообщений: 6
Зарегистрирован: Пн фев 11, 2008 20:14:38
Сообщений: 403
Откуда: Москва
Рейтинг сообщения: 0
Хм странно почему в книге об этом не пишут

_________________
Плюс - минус = заряд, фаза - ноль = ???


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: attiny2313 ошибка при компиляции
СообщениеДобавлено: Чт мар 24, 2016 00:01:04 
Родился

Зарегистрирован: Ср мар 23, 2016 13:33:47
Сообщений: 5
Рейтинг сообщения: 0
_INT0 заменяем в листинге, и все работает. Листинг из книжки Ревича, сам только начал осваивать МК, и тоже с таким глюком столкнулся. Без прерываний все работает, как нужно. С прерываниями - полный глюк, то один клик, то два вместо одного. С задержками и генератором пробовал разные варианты, мало помогло. Интересно, глюки - это так задумано?) Или просто недоработки?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: attiny2313 ошибка при компиляции
СообщениеДобавлено: Сб мар 26, 2016 11:09:32 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 2
Пусть целевай МК, ищем файл m8535def.inc в папке установки компилятора. В конце этого файла будет таблица векторов. Переделываем ее по примеру.

Оформление таблицы векторов:

Спойлер
Код:
.cseg

.org   0x0000
      rjmp   Reset

;====== INTERRUPT VECTORS ============
.org   INT0addr            ; External Interrupt 0
      reti

.org   INT1addr            ; External Interrupt 1
      reti

.org   OC2addr               ; Timer/Counter2 Compare Match
      reti // rjmp   Proc_Int_BAM // reti

.org   OVF2addr            ; Timer/Counter2 Overflow
      reti

.org   ICP1addr            ; Timer/Counter1 Capture Event
      reti

.org   OC1Aaddr            ; Timer/Counter1 Compare Match A
      reti

.org   OC1Baddr            ; Timer/Counter1 Compare Match B
      reti

.org   OVF1addr            ; Timer/Counter1 Overflow
      reti

.org   OVF0addr            ; Timer/Counter0 Overflow
      reti

.org   SPIaddr               ; SPI Serial Transfer Complete
      reti               ; rjmp   SPI_Transfer_Int

.org   URXCaddr            ; USART, RX Complete
      reti

.org   UDREaddr            ; USART Data Register Empty
      reti

.org   UTXCaddr            ; USART, TX Complete
      reti

.org   ADCCaddr            ; ADC Conversion Complete
      reti // rjmp   ADC_Complete

.org   ERDYaddr            ; EEPROM Ready
      reti

.org   ACIaddr               ; Analog Comparator
      reti

.org   TWIaddr               ; Two-wire Serial Interface
      reti

.org   INT2addr            ; External Interrupt Request 2
      reti

.org   OC0addr               ; TimerCounter0 Compare Match
      rjmp   Sys_Timer_Comp

.org   SPMRaddr            ; Store Program Memory Read
      reti
;----------
.org   INT_VECTORS_SIZE      ; size in words
;===================



talich писал(а):
_INT0 заменяем в листинге, и все работает. Листинг из книжки Ревича, сам только начал осваивать МК, и тоже с таким глюком столкнулся. Без прерываний все работает, как нужно. С прерываниями - полный глюк, то один клик, то два вместо одного. С задержками и генератором пробовал разные варианты, мало помогло. Интересно, глюки - это так задумано?) Или просто недоработки?


В обработчике прерывания нужно сохранять регистр SREG и используемые в прерывании регистры. Пример обработчика прерывания.
Спойлер
Код:
EXT_INT0:
   in      RSREG,SREG
   push   r16
   push   r17
   push   YL
   push   YH
   ldy      PROC_WELD_FLAGS
   ld      r16,Y
   sbrc   r16,n_WELD_YES
   rjmp   EXT_INT0_A
; EXT_INT0
   out      GICR,RCLR ; Запрет прерывания EXT_INT0.
; TIMER0
   in      r16,TIMSK
   cbr      r16,1<<OCIE0
   out      TIMSK,r16 ; Запрет прерывания по совпадению.

   rjmp   EXT_INT0_END

EXT_INT0_A:
   ldd      r16,Y+DISP_CNT_IMP_CURR
   ldd      r17,Y+DISP_CURR_VALUE_BUF
   inc      r16
   cpi      r16,11
   brlo   EXT_INT0_B
   clr      r16
EXT_INT0_B:
   std      Y+DISP_CNT_IMP_CURR,r16
   inc      r17
   cp      r16,r17
   brsh   EXT_INT0_END
; EXT_INT0
   out      GICR,RCLR ; Запрет прерывания EXT_INT0.
; TIMER0
   in      r16,TIFR
   andi   r16,1<<OCF0
   out      TIFR,r16 ; Очистка флага прерывания по совпадению.

   in      r16,OCR0
   subi   r16,-(XTAL/64/1000)
   out      OCR0,r16 ; Загрузка в регистр сравнения нужного значения.

   in      r16,TIMSK
   sbr      r16,1<<OCIE0
   out      TIMSK,r16 ; Разрешение прерывания по совпадению.
; WELD_IMP_PIN_OUT=1
   WELD_IMP_OUT_1

EXT_INT0_END:
   pop      YH
   pop      YL
   pop      r17
   pop      r16
   out      SREG,RSREG
   reti

TIMER0_COMP:
   in      RSREG,SREG
   push   r16
; WELD_IMP_PIN_OUT=0
   WELD_IMP_OUT_0
; TIMER0
   in      r16,TIMSK
   cbr      r16,1<<OCIE0
   out      TIMSK,r16 ; Запрет прерывания по совпадению.
; EXT_INT0
   ldi      r16,1<<INTF0
   out      GIFR,r16 ; Сброс флага внешнего прерывания.

   ldi      r16,1<<INT0
   out      GICR,r16 ; Разрешение внешнего прерывания.

   pop      r16
   out      SREG,RSREG
   reti


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y