помогите плз
мне нужно чтоб у меня какой-то цикл выполнялся по истечении определнного времени скажем 50 мс
как мне это сделать
(в дельфи я использовал таймер системный (системное время и по нему ориентировался)
а как мне это делать для ATmega162
в ассемблере какие есть процедры или функции, чтобы задать прерывание и заставить выполнить немедленно именно этот цикл
находящийся скажем по метке Start_proc:
2 xelos
Проблема, что я такую же себе схемку в уме давно нарисовал, кроме последнего пункта, конфигурировать таймер по-моему не надо, сразу выставляешь, чтоб он только по 50 мс отсчитывал и все...
или я ошибаюсь??????????
- в любом случае, это слова, А КАК МНЕ это сделать?? чего писать, куда писать???
по аналогии с Дельфи, я просто использовал системный таймер (компонента Clock или можно процедуру Timer использовать и просто в цикле сверять сколько миллисекунд прошло!!!)
как в АВР-асме это сделать??
просто писать то, что там есть второй раз неохота. Там все очень подробно. Советую посмотреть сорсы. Лично когда мне что-то непонятно, то я читаю это второй раз. Если опять непонятно, то см. п. 1 -)
По поводу прерывания. Вначале мы пишем:
.cseg
.org 0
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'
вот что в этом файле на этой строке написано
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'
вот что в этом файле на этой строке написано
ldi Temp0,0 ;обнуление таймера
out TCNT1H,Temp0
out TCNT1L,Temp0
под этой TIMER1COMPBaddr меткой ?? и чтоб было определение на адрес $01C ?????
в обучалке немного непонятно описано это
получается из аппноута я должен убрать
но тогда по идее системные нарушения будут (эта метка должная быть строго локализована как понимаю (в обучалке это Timer1_comp1 )
если я сейчас займусь изучать еще С, у меня время уйдет, а так у меня основной цикл, нет ВСЁ готово, только вот эти ошибки есть, ну пару мелких вопросов висят, так что быстрее будет на асме уж дописать
в Обучалку глянь вот сюда, http://www.radiokot.ru/start/mcu_fpga/avr/11/
переменная была в appnotes в файле *.inc
народ ну кто-н кто не бездумно читал и примеры делал по ОБУЧАЛКЕ
помогите плз
Создатель ОБУЧАЛКИ плз ответь на вопрос ну проблема же....
админ форума, плз сошли создателя сюда.
я хвост в узел уже заворачиваю
и гривку взъерошил
Аз есмь Создатель. Немного пробежался по предыдущим постам. Ниче не понял. Поэтому можно вкратце, что имеем на этот момент? Какова задача и какие проблемы при ее реализации?
полагаю Ваша рекомендация будет - УДАЛИ её из файла
тогда у меня вопрос а будет ли работать у меня тогда нормально??
и зачем в ИНК файле эта строка??
----------------------------
- в обучалке советовалось такое вписать в модуль
в том то и дело, что согласно ОБУЧАЛКи я должен именно ее использовать, чтоб у меня работал Компаратор таймера!
если заменю, таймеру несчем сравнивать будет (если правильно понял ОБУЧАЛКУ)
да всегда пожалуйста
мррррр
привожу только куски кодов из ОБУЧАЛКИ (понимаете почему)
если мы, скажем, хотим активизировать прерывание Timer1_comp1, то мы должны по адресу $004 поставить ссылку на подпрограмму - обработчик этого прерывания. А вообще, лучше расставить в начале программы ссылки на все прерывания. Давайте так и сделаем
В пятой строчке стоит безусловный переход на метку Timer1_comp1. Где-то ниже в программе, мы пишем обработчик этого прерывания и в его начале ставим эту метку.