Файлы HEX - это только ассемблер?
На юнипроф то работает. Но он прошивает только hex файлы...Pippeytz писал(а):всеравно юни проф и пони всякий хлам поддержуют)
На юнипроф то работает. Но он прошивает только hex файлы...Pippeytz писал(а):всеравно юни проф и пони всякий хлам поддержуют)
При компиляции выдаёт вот это:.include "F:\AVR\tavrasm\appnotes\2313def.inc"
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.cseg
.org 0
rjmp Reset ;вектора прерываний
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP
;Reset:
INT_0:
INT_1:
Timer1_capt1:
;Timer1_comp1:
Timer1_OVF1:
Timer0_OVF0:
UART_RX:
UART_UDRE:
UART_TX:
ANA_COMP:
reti
;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
Reset: ldi Temp,0b11111111 ;настройка портов
out DDRB,Temp
ldi Temp,0b01000000 ;разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0b00000011 ;тактовый сигнал = CK/64
out TCCR1B,Temp
ldi Temp,0x4C ;инициализация компаратора
out OCR1AH,Temp
ldi Temp,0x4B
out OCR1AL,Temp
ldi Temp,RamEnd ;установка указателя стека
out SPL,Temp
ldi Temp1,0b00000001 ;инициализация индикатора
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
sei ;разрешить прерывания
;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
Inf: rjmp Inf ;бесконечный цикл
;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************
Timer1_comp1:
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
Shift: cpi Temp1,0b10000000 ;сравнить с крайним знач.
breq Init ;если равно - загрузка нач. знач.
lsl Temp1 ;иначе - сдвиг влево
rjmp Output ;перейти на вывод в порт
Init: ldi Temp1,0b00000001 ;загрузить нач. значение
Output: out PortB,Temp1 ;вывод в порт
reti ;выход из обработчика
И так на каждую строку.Warning : Invalid character 0xFF
Error : Unknown opcode
Warning : Invalid character 0x00
Error : Unknown opcode
Соответственно то-же при компиляции выдаёт такие-же ошибки..include "F:\AVR\tavrasm\appnotes\m8def.inc
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.cseg
.org0
rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp Timer2_COMP
rjmp Timer2_OVF
rjmp Timer1_CAPT
rjmp Timer1_COMPA
rjmp Temer1_COMPB
rjmp Timer1_OVF
rjmp Timer0_OVF
rjmp SPI_STC
rjmp USART_RXC
rjmp USART_UDRE
rjmp USART_TXC
rjmp ADC
rjmp EE_RDY
rjmp ANA_COMP
rjmp TWI
rjmp SPM_RDY
;Reset:
INT_0:
INT_1:
Timer2_COMP:
Timer2_OVF:
Timer1_CAPT:
;Timer1_COMPA:
Temer1_COMPB:
Timer1_OVF:
Timer0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
ADC:
EE_RDY:
ANA_COMP:
TWI:
SPM_RDY:
reti
Reset: ldi Temp,0b11111111 ;настройка портов
out DDRD,Temp
ldi Temp,0b00010000 ;разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0b00000010 ;тактовый сигнал = CK/8
out TCCR1B,Temp
ldi Temp,0x4C ;инициализация компаратора
out OCR1AH,Temp
ldi Temp,0x4B
out OCR1AL,Temp
ldi Temp, (RamEnd & 255) ;Установка указателя стека
out SPL,Temp
ldi Temp, (RamEnd >>& 255)
out SPH,Temp
ldi Temp1,0b00000001 ;инициализация индикатора
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
sei ;Разрешить прерывания
;ОСНОВНОЙ ЦИКЛ
Inf: rjmp Inf ;бесконечный цикл
;ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
Timer1_comp1:
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
Shift: cpi Temp1,0b10000000 ;сравнить с крайним знач.
breq Init ;если равно - загрузка нач. знач.
lsl Temp1 ;иначе - сдвиг влево
rjmp Output ;перейти на вывод в порт
Init: ldi Temp1,0b00000001 ;загрузить нач. значение
Output: out PortD,Temp1 ;вывод в порт
reti ;выход из обработчика
Пришлось закомментировать, но теперь работает вроде. Ладно, продолжу дальше.rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp Timer2_COMP
rjmp Timer2_OVF
rjmp Timer1_CAPT
rjmp Timer1_COMPA
rjmp Temer1_COMPB
rjmp Timer1_OVF
rjmp Timer0_OVF
rjmp SPI_STC
rjmp USART_RXC
rjmp USART_UDRE
rjmp USART_TXC
rjmp ADC
rjmp EE_RDY
rjmp ANA_COMP
rjmp TWI
rjmp SPM_RDY
;Reset:
INT_0:
INT_1:
Timer2_COMP:
Timer2_OVF:
Timer1_CAPT:
;Timer1_COMPA:
Temer1_COMPB:
Timer1_OVF:
Timer0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
ADC:
EE_RDY:
ANA_COMP:
TWI:
SPM_RDY:
С таким оформлением и структурой сайта, мне проще в асемблере разобраться, чем в этих страницах. Но еще попытаюсь.Pippeytz писал(а):Советую почитать старинчки тыча сли они еще есть
они мне в начале здорово помогли...
почитал бы посты выше!пашок писал(а):Помогите пожалуиста нати сомоучитель по программированию микроконтроллеров AVR (начинающих с нуля)
Надо подавать логический уровень, который соответствует напряжению питания. Ведь Ваш микроконтроллер может питаться и от 3,3 вольт...SeregaT писал(а):...Для внешнего прерывания есть два вывода: INT0 и INT1. ...Подавать на них надо 5 вольт?
Я бы сделал по-простому, чтобы при замыкании любой кнопки, менялся логический уровень на входе INT. А потом уже внутри обработчика прерываний разбирался бы, какая именно кнопка нажата. Схему нарисовать, или и так всё ясно?SeregaT писал(а):...Можно ли задействовать для внешних прерываний (или может каким-то другим способом) дополнительные выводы?
входы внешних прерываний остаются действующими и в том случае, когда соответствующие порты сконфигурированы на ВЫХОД. Это позволяет генерировать прерывание программно.Pippeytz писал(а):Понятно что если прерывания INT0 и INT1 называютсья внешними, то выводы прерываний дожлны быть сконфигурированый на вход