Jump to content

    
Sign in to follow this  
mysol

Нужна помощь в прошивании AVR

Recommended Posts

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?

Edited by Valek

Share this post


Link to post
Share on other sites
вот такая ощибка:

D:\AVR Project\fonar\fonar.asm(131): error: Illegal attempt to re-use 'PCINT0' as label

 

Пишет что PCINT0 где-то уже ипользовалось! Что за чушь, мы же его впервые в программе написали.

 

Да... а разве нет резници между EXT_INT0 и INT0?

замените PCINT0 на любое др. имя к примеру PCINT0_vect , т.к. имя PCINT0 описывается в tn13Adef.inc который вы включили в свой проект

Share this post


Link to post
Share on other sites
замените PCINT0 на любое др. имя к примеру PCINT0_vect , т.к. имя PCINT0 описывается в tn13Adef.inc который вы включили в свой проект

Как микроконтроллер поймет что нужно перейти в это место при совершении прерывания?

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

Share this post


Link to post
Share on other sites

Таблица векторов прерываний на адреса памяти программ 0h,2h,4h,6h и так далее, аппаратно прошита в МК, и уже с этих адресов командой rjmp, осуществляется переход на любую пользовательскую подпрограмму обработки прерывания, и без разницы как она называется, только выход из нее происходит по reti, а не по ret.

Edited by Andron77

Share this post


Link to post
Share on other sites
Пишет что PCINT0 где-то уже ипользовалось! Что за чушь, мы же его впервые в программе написали.

 

Да... а разве нет резници между EXT_INT0 и INT0?

Valek, а чему Вы удивляетесь? Пока Вы будете делать по две ошибки в слове, программы Ваши и работать будут соответственно.

Вы же и на ассемблере пишете с той же внимательностью.

Share this post


Link to post
Share on other sites
Valek, а чему Вы удивляетесь? Пока Вы будете делать по две ошибки в слове, программы Ваши и работать будут соответственно.

Вы же и на ассемблере пишете с той же внимательностью.

:blush: прям как диктант пишем, будем повнимательней.

А на ассемблере где ошибся?

Edited by Valek

Share this post


Link to post
Share on other sites
А я думал что метка в программе должна называться как прерывание, и когда совершается прерывание то программа переходит в это место.

коду программы всеравно как обзывается метка

Последний кусок , где :

; Пробуждение из спящего режима
  INT0:

нужно убрать

Share this post


Link to post
Share on other sites

Ну вот, совсем по-простому. Эта программа работает как часы. Но я хочу установить спящий режим. Какие регистры мне необходимо настроить? 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this