Ну ё-маё, а ACIE включить?
и студия не эмулирует аналоговые сигналы, попробуй VMLab - просто и со вкусом.
ну почитай ДШ, проблемы с аглицким - у Светы в библе есть книжки Евстифеева, там все по-русски.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
GP1 писал(а):Ну ё-маё, а ACIE включить?
и студия не эмулирует аналоговые сигналы, попробуй VMLab - просто и со вкусом.
ну почитай ДШ, проблемы с аглицким - у Светы в библе есть книжки Евстифеева, там все по-русски.
Включено. Вот:
ldi temp,0b00001000
out acsr,temp
Все равно, 4 бит ACI, ставлю "птичку", а прерывание не наступает!
Вот рабочий код, симулируется в VMLab 3.15
В контрольной панели слайдер S1 двигаешь вверх и происходит прерывание по адресу $0D (ANA_COMP)
Отличия от твоего кода:
1. инициализация стека
2. порт Д - входы
Кури ДШ
Доброй ночи товарищи коты, у меня такой вопрос: принаписании кода: ok |= PINC(PC1);
Выводит ошибку: ../i2c_start.h:24: error: called object '*51u' is not a function
romazan писал(а):Доброй ночи товарищи коты, у меня такой вопрос: принаписании кода: ok |= PINC(PC1);
Выводит ошибку: ../i2c_start.h:24: error: called object '*51u' is not a function
Дык Ваш код выдзывает функцию PINC(PC1), которой естественно не существует, т.к. PINC -это определение порта. Судя по всему компилятор у вас WinAVR, а вот что Вы хотите сделать - не понятно, если нужно считать выводы, то делается так
romazan писал(а):Значит пишу программу с прерываниями, при компиляции кода выдаёт ошибку...
Правильно ссылается, синтаксис то явно не WinAVR-овский, а студия, насколько мне известно, только с WinAVR работает. Прочитайте в документации на WinAVR как оформлять прерывания.
приблизительно так
Решил я выделить в отдельный файл инициализацию ЖК и еще один файл с задержками и прочими математическими штучками.
Вот так.
.device ATmega16
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m16def.inc"
.include "C:\AVRProject\Mega_Timer\Mega16_Timer\LCD.prg"
.include "C:\AVRProject\Mega_Timer\Mega16_Timer\win2.prg"
Компилируется нормально. Но когда запускаю симуляцию программа начинается с LCD.prg а не с инициализации. Тоже самое когда открываю проект, первой открывается эта подпрограмма а не основное тело. В итоге мне пришлось отказаться от этого и пришлось все включить в основной листинг. Читаемость и передвижение усложнились многократно. Как правильно сделать?
Есть 2 пути.
Первый описывать макросами функции в файле, но тогда теряете в проверке и отладке...
Делать вызов нужного файла в теле где планируется функция, что то типа такого
Я тоже уже об этом подумал. Вызывать InitLCD после include. Только толку маловато. Как правило InitLCD идет после отработки основной инициализации МК.
А макросы тоже можно вынести в prg? И так же влючать в тело Include?
Я эту табличку из предыдущих проектов копирую, если контроллер такой же. Ну а если новый, то да, ручками из даташита...
Может все вместе замутим базу *.asm файлов со строками прерываний Хотя лично мне не влом набрать своими руками
ВитГо писал(а):А есть ли средство в AVR Studio чтобы заполнить таблицу прерываний для выбранного проца ?
например выбрал при создании проекта проц, симуляцию, появилось окно куда набивать программу..
а как сделать конструкции например вида
.org прерывание_1
reti
.org прерывание_2
reti
.. и т д
или все руками по даташиту всегда набирают ?
вы - первый из задающих вопросы, кто вознамерился сделать таблицу векторов прерываний правильно! я очень удивлен! и всячески поддерживаю вас, если вы и во всем программировании стараетесь придерживаться правил хорошего тона для создания качественных программ!
информация о символьных именах адресов для таблицы векторов хранится в include-файле для выбранного вами микроконтроллера, например, для atmega16 это будет файл m16def.inc, в котором ближе к концу есть нужное (ищите строку "INTERRUPT VECTORS"):