|
Нужна помощь в прошивании AVR |
|
|
|
Apr 27 2013, 02:53
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
AVR Studio 4.18 build 716 при компиляции выдает ошибку. Я помню что всамом начале тоже пытался задействовать это прерывание и у меня была такая же ошибка. Код .device ATtiny13A .nolist .include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn13Adef.inc" .list
.def temp = r16 .def Delay1 = r17 .def Delay2 = r18 .def Delay3 = r19
rjmp RESET; Reset Handler rjmp EXT_INT0; IRQ0 Handler rjmp PCINT0; PCINT0 Handler reti;rjmp TIM0_OVF; Timer0 Overflow Handler reti;rjmp EE_RDY; EEPROM Ready Handler reti;rjmp ANA_COMP; Analog Comparator Handler reti;rjmp TIM0_COMPA; Timer0 CompareA Handler reti;rjmp TIM0_COMPB; Timer0 CompareB Handler reti;rjmp WATCHDOG; Watchdog Interrupt Handler reti;rjmp ADC; ADC Conversion Handler вот такая ощибка: D:\AVR Project\fonar\fonar.asm(131): error: Illegal attempt to re-use 'PCINT0' as label Пишет что PCINT0 где-то уже ипользовалось! Что за чушь, мы же его впервые в программе написали. Да... а разве нет резници между EXT_INT0 и INT0?
Сообщение отредактировал Valek - Apr 27 2013, 02:55
|
|
|
|
|
May 2 2013, 00:44
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Цитата(MaxiMuz @ Apr 27 2013, 18:32)  замените PCINT0 на любое др. имя к примеру PCINT0_vect , т.к. имя PCINT0 описывается в tn13Adef.inc который вы включили в свой проект Как микроконтроллер поймет что нужно перейти в это место при совершении прерывания? А я думал что метка в программе должна называться как прерывание, и когда совершается прерывание то программа переходит в это место.
|
|
|
|
|
May 2 2013, 07:28
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 9-12-11
Из: Новосибирск
Пользователь №: 68 762

|
Таблица векторов прерываний на адреса памяти программ 0h,2h,4h,6h и так далее, аппаратно прошита в МК, и уже с этих адресов командой rjmp, осуществляется переход на любую пользовательскую подпрограмму обработки прерывания, и без разницы как она называется, только выход из нее происходит по reti, а не по ret.
Сообщение отредактировал Andron77 - May 2 2013, 07:29
|
|
|
|
|
May 4 2013, 04:33
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Цитата(Herz @ May 2 2013, 11:39)  Valek, а чему Вы удивляетесь? Пока Вы будете делать по две ошибки в слове, программы Ваши и работать будут соответственно. Вы же и на ассемблере пишете с той же внимательностью.  прям как диктант пишем, будем повнимательней. А на ассемблере где ошибся?
Сообщение отредактировал Valek - May 4 2013, 04:45
|
|
|
|
|
May 6 2013, 11:31
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Цитата(Valek @ May 2 2013, 03:44)  А я думал что метка в программе должна называться как прерывание, и когда совершается прерывание то программа переходит в это место. коду программы всеравно как обзывается метка Последний кусок , где : Код ; Пробуждение из спящего режима INT0: нужно убрать
|
|
|
|
|
May 8 2013, 02:52
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 19-06-07
Из: Челябинск
Пользователь №: 28 542

|
Ну вот, совсем по-простому. Эта программа работает как часы. Но я хочу установить спящий режим. Какие регистры мне необходимо настроить? MCUCR и GIMSK? Без прерываний не обойтись? Код ; Программа для фонаря с магнитным управлением ; частота 1 МГц от внутреннего генератора
.device ATtiny13A .nolist .include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn13Adef.inc" .list
.def temp = r16 .def delay1= r17 .def delay2= r18 .def delay3= r19
rjmp Init
Init: ;Назначаем входы и выходы портов (0-вход, 1-выход) ldi temp,0b111101 out DDRB ,temp ;Включаем подтяжку на входах (1-есть рез., 0- нет рез.) ;и задаем начальное состояние выходов ldi temp,0b000010 out PORTB ,temp
Start: rcall knopka
on: sbi portB, 4;включаем светодиод
;задержка 7 милисекунд ldi Delay1, 0x78 ldi Delay2, 0x05 ldi Delay3, 0x00 rcall Delay
cbi PortB, 4 ;тушим светодиод ;задержка 1 милисекунда ldi Delay1, 0xC8 ldi Delay2, 0x00 ldi Delay3, 0x00 rcall Delay
sbis PinB, 1 ;проверяем нажатие кнопки rjmp knopka
rjmp on
//Подпрограмма "кнопка" knopka: sbic PinB, 1;ждем нажатия кнопки rjmp knopka
;задержка от дребезга контактов 5mc ldi Delay1, 0x78 ldi Delay2, 0x05 ldi Delay3, 0x00 rcall Delay puch: sbis PinB, 1;ждем отпускания кнопки rjmp puch ret
Delay: subi Delay1,1 sbci Delay2,0 sbci Delay3,0 brcc Delay ret
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|