как сконфигурировать таймер?? (срочненько
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
как сконфигурировать таймер?? (срочненько
помогите плз
мне нужно чтоб у меня какой-то цикл выполнялся по истечении определнного времени скажем 50 мс
как мне это сделать
(в дельфи я использовал таймер системный (системное время и по нему ориентировался)
а как мне это делать для ATmega162
в ассемблере какие есть процедры или функции, чтобы задать прерывание и заставить выполнить немедленно именно этот цикл
находящийся скажем по метке Start_proc:
мне нужно чтоб у меня какой-то цикл выполнялся по истечении определнного времени скажем 50 мс
как мне это сделать
(в дельфи я использовал таймер системный (системное время и по нему ориентировался)
а как мне это делать для ATmega162
в ассемблере какие есть процедры или функции, чтобы задать прерывание и заставить выполнить немедленно именно этот цикл
находящийся скажем по метке Start_proc:
- Реклама
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
2 xelos
Проблема, что я такую же себе схемку в уме давно нарисовал, кроме последнего пункта, конфигурировать таймер по-моему не надо, сразу выставляешь, чтоб он только по 50 мс отсчитывал и все...
или я ошибаюсь??????????
- в любом случае, это слова, А КАК МНЕ это сделать?? чего писать, куда писать???
по аналогии с Дельфи, я просто использовал системный таймер (компонента Clock или можно процедуру Timer использовать и просто в цикле сверять сколько миллисекунд прошло!!!)
как в АВР-асме это сделать??
Проблема, что я такую же себе схемку в уме давно нарисовал, кроме последнего пункта, конфигурировать таймер по-моему не надо, сразу выставляешь, чтоб он только по 50 мс отсчитывал и все...
или я ошибаюсь??????????
- в любом случае, это слова, А КАК МНЕ это сделать?? чего писать, куда писать???
по аналогии с Дельфи, я просто использовал системный таймер (компонента Clock или можно процедуру Timer использовать и просто в цикле сверять сколько миллисекунд прошло!!!)
как в АВР-асме это сделать??
- Pa5ha
- Прорезались зубы
- Сообщения: 244
- Зарегистрирован: Ср авг 31, 2005 20:09:08
- Откуда: Петрозаводск, Карелия.
- Контактная информация:
http://www.radiokot.ru/start/mcu_fpga/avr/11 - про таймеры
http://www.radiokot.ru/start/mcu_fpga/avr/16 - про опрос клавиатуры
просто писать то, что там есть второй раз неохота. Там все очень подробно. Советую посмотреть сорсы. Лично когда мне что-то непонятно, то я читаю это второй раз. Если опять непонятно, то см. п. 1 -)
По поводу прерывания. Вначале мы пишем:
.cseg
.org 0
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM_CAPT1 ; Timer1 Capture Handler
rjmp TIM_COMP1 ; Timer1 Compare Handler
rjmp TIM_OVF1 ; Timer1 Overflow Handler
rjmp TIM_OVF0 ; Timer0 Overflow Handler
rjmp UART_RXC ; UART RX Complete Handler
rjmp UART_DRE ; UDR Empty Handler
rjmp UART_TXC ; UART TX Complete Handler
rjmp ANA_COMP ; Analog Comparator Handler
это вектора прерываний. Правда, для 2313. Для мени они будут другие. См датащит. Вообще, полезный документ, советую от корки до корки -)
http://www.radiokot.ru/start/mcu_fpga/avr/16 - про опрос клавиатуры
просто писать то, что там есть второй раз неохота. Там все очень подробно. Советую посмотреть сорсы. Лично когда мне что-то непонятно, то я читаю это второй раз. Если опять непонятно, то см. п. 1 -)
По поводу прерывания. Вначале мы пишем:
.cseg
.org 0
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM_CAPT1 ; Timer1 Capture Handler
rjmp TIM_COMP1 ; Timer1 Compare Handler
rjmp TIM_OVF1 ; Timer1 Overflow Handler
rjmp TIM_OVF0 ; Timer0 Overflow Handler
rjmp UART_RXC ; UART RX Complete Handler
rjmp UART_DRE ; UDR Empty Handler
rjmp UART_TXC ; UART TX Complete Handler
rjmp ANA_COMP ; Analog Comparator Handler
это вектора прерываний. Правда, для 2313. Для мени они будут другие. См датащит. Вообще, полезный документ, советую от корки до корки -)
2kb of eeprom should be enought for everybody (C) Bill Gates` cat 
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
- Реклама
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
ага нифига чего-то не пашет
значит написано
и компилятор пишет
code.asm:108: Error : Label 'TIMER1COMPBaddr' already defined at line 665 in 'C:\avr\tavrasm\appnotes\m162def.inc'
вот что в этом файле на этой строке написано
значит написано
Код: Выделить всё
rjmp TIMER1COMPBaddr
TIMER1COMPBaddr:
ldi Temp0,0 ;обнуление таймера
out TCNT1H,Temp0
out TCNT1L,Temp0
code.asm:108: Error : Label 'TIMER1COMPBaddr' already defined at line 665 in 'C:\avr\tavrasm\appnotes\m162def.inc'
вот что в этом файле на этой строке написано
Код: Выделить всё
.equ TIMER1COMPBaddr = $01C-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
CyberMerlin писал(а):ага нифига чего-то не пашет
значит написанои компилятор пишетКод: Выделить всё
rjmp TIMER1COMPBaddr TIMER1COMPBaddr: ldi Temp0,0 ;обнуление таймера out TCNT1H,Temp0 out TCNT1L,Temp0
code.asm:108: Error : Label 'TIMER1COMPBaddr' already defined at line 665 in 'C:\avr\tavrasm\appnotes\m162def.inc'
вот что в этом файле на этой строке написаноКод: Выделить всё
.equ TIMER1COMPBaddr = $01C
переводчик promt.ru jy-лайн !
=======
пишет что метка, название
TIMER1COMPBaddr:
уже определена (используется) в файле m162def.inc
назовите иначе.
=======
и на Си переходите.
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
ну так а как мне добавить
под этой TIMER1COMPBaddr меткой ?? и чтоб было определение на адрес $01C ?????
в обучалке немного непонятно описано это
получается из аппноута я должен убрать
но тогда по идее системные нарушения будут (эта метка должная быть строго локализована как понимаю (в обучалке это Timer1_comp1 )
если я сейчас займусь изучать еще С, у меня время уйдет, а так у меня основной цикл, нет ВСЁ готово, только вот эти ошибки есть, ну пару мелких вопросов висят, так что быстрее будет на асме уж дописать
Код: Выделить всё
ldi Temp0,0 ;обнуление таймера
out TCNT1H,Temp0
out TCNT1L,Temp0
в обучалке немного непонятно описано это
получается из аппноута я должен убрать
но тогда по идее системные нарушения будут (эта метка должная быть строго локализована как понимаю (в обучалке это Timer1_comp1 )
если я сейчас займусь изучать еще С, у меня время уйдет, а так у меня основной цикл, нет ВСЁ готово, только вот эти ошибки есть, ну пару мелких вопросов висят, так что быстрее будет на асме уж дописать
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
на электрониксе начали тоже курс лепить - там на асме, вроде самые азы - звгляни: http://nix-06.nm.ru/
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
не работает сцылко
в Обучалку глянь вот сюда, http://www.radiokot.ru/start/mcu_fpga/avr/11/
переменная была в appnotes в файле *.inc
народ ну кто-н кто не бездумно читал и примеры делал по ОБУЧАЛКЕ
помогите плз
Создатель ОБУЧАЛКИ плз ответь на вопрос ну проблема же....
админ форума, плз сошли создателя сюда.
я хвост в узел уже заворачиваю
и гривку взъерошил
в Обучалку глянь вот сюда, http://www.radiokot.ru/start/mcu_fpga/avr/11/
переменная была в appnotes в файле *.inc
народ ну кто-н кто не бездумно читал и примеры делал по ОБУЧАЛКЕ
помогите плз
Создатель ОБУЧАЛКИ плз ответь на вопрос ну проблема же....
админ форума, плз сошли создателя сюда.
я хвост в узел уже заворачиваю
и гривку взъерошил
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
значиться так
- как в обучалке было сказано я вставитл следующий код в свой модуль
начал компилировать, а он (компилятор) пишет
полагаю Ваша рекомендация будет - УДАЛИ её из файла
тогда у меня вопрос а будет ли работать у меня тогда нормально??
и зачем в ИНК файле эта строка??
----------------------------
- в обучалке советовалось такое вписать в модуль
а компилятор пишеть, что не могу туда поместить, якобы выходит за рамки адресного пространства
- как в обучалке было сказано я вставитл следующий код в свой модуль
Код: Выделить всё
rjmp TIMER1COMPBaddr
TIMER1COMPBaddr:
ldi Temp0,0 ;обнуление таймера
out TCNT1H,Temp0
out TCNT1L,Temp0
залез я в файл этот там строкаcode.asm:108: Error : Label 'TIMER1COMPBaddr' already defined at line 665 in 'C:\avr\tavrasm\appnotes\m162def.inc'
Код: Выделить всё
.equ TIMER1COMPBaddr = $01Cтогда у меня вопрос а будет ли работать у меня тогда нормально??
и зачем в ИНК файле эта строка??
----------------------------
- в обучалке советовалось такое вписать в модуль
Код: Выделить всё
ldi Temp0,RamEnd ;инициализация стека for work in the RCALL
out SPL,Temp0
как исправить??warning: Constant 0x4FF out of range (0x00-0xFF)
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
off: круто ! я не стал забивать голову асмом и поручаю биться с ним компилятору.CyberMerlin писал(а): - в обучалке советовалось такое вписать в модульКод: Выделить всё
ldi Temp0,RamEnd ;инициализация стека for work in the RCALL out SPL,Temp0
- avr123.nm.ru
- Вечно гонимый
- Сообщения: 331
- Зарегистрирован: Пн сен 04, 2006 20:25:28
- Откуда: самоучитель по микроконтроллерам
- Контактная информация:
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
-
CyberMerlin
- Встал на лапы
- Сообщения: 138
- Зарегистрирован: Пн сен 18, 2006 13:39:03
- Откуда: Попуа Новой Гвинеи (Зимбабва)
- Контактная информация:
да всегда пожалуйста
мррррр
привожу только куски кодов из ОБУЧАЛКИ (понимаете почему)
http://www.radiokot.ru/start/mcu_fpga/avr/10/
http://www.radiokot.ru/start/mcu_fpga/avr/11/
http://www.radiokot.ru/start/mcu_fpga/avr/08/
вроде все
мррррр
привожу только куски кодов из ОБУЧАЛКИ (понимаете почему)
если мы, скажем, хотим активизировать прерывание Timer1_comp1, то мы должны по адресу $004 поставить ссылку на подпрограмму - обработчик этого прерывания. А вообще, лучше расставить в начале программы ссылки на все прерывания. Давайте так и сделаем
Код: Выделить всё
.cseg
.org 0
rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
В пятой строчке стоит безусловный переход на метку Timer1_comp1. Где-то ниже в программе, мы пишем обработчик этого прерывания и в его начале ставим эту метку.
Код: Выделить всё
Reset:
INT_0:
INT_1:
Timer1_capt1:
Timer1_comp1:
Код: Выделить всё
Timer1_comp1:
ldi Temp,0 ;обнуление таймера
out TCNT1H,Temp
out TCNT1L,Temp
Для того, чтобы команда rcall смогла работать, нам надо-таки инициализировать стек. То есть - поставить указатель стека.
Код: Выделить всё
ldi Temp,RamEnd ;инициализация стека
out SPL,Temp
вроде все


