-
- У меня есть задача контролировать напряжение на 3-х входах и выполнять определенные действия в зависимости от величины этих напряжений, а т.к. действия для каждого канала однотипны я написал подпрограмму в которой пытаюсь менять ссылки на tvi(201 знак., 14.10.2012 16:25)
- Почему на СИ всё это не сделать? - Apтём(14.10.2012 22:22)
- Tip: ключевое слово для тебя - bitmask - MBedder(14.10.2012 21:06)
- Вот переписал прогу, в которой для передачи параметров использую регистры - все работает! Всем спасибо за подсказки и дельные советы! И все-таки я до конца не понял разницу между директивами EQU - SET tvi(15.10.2012 11:23)
- Не знаю, что делает ваша программа. Но даже я, когда начинал, не извращался так. Что за программа, что она делает, что вы хотите получить? - mazur(15.10.2012 11:44)
- Программы написаны только для наглядности моих затруднений - первая, где я пытался создать переменные и с их помощью передать параметры в подпрограмму - вы все мне объяснили, что таким образом это сделать невозможно и подсказали, что параметры tvi(498 знак., 15.10.2012 12:24)
- Если нам нужно записать флаг, тогда это будет команда ldi: mazur(477 знак., 15.10.2012 16:04)
- Думаю, вы так и не поняли о чем я спрашивал изначально, а как устанавливать/сбрасывать флаги по одному или скопом я знаю. И я не пойму смысла ваших макросов - зачем они нужны? tvi(118 знак., 15.10.2012 23:57)
- Я не раз делал ошибку со стрелками. Один раз даже отправил заказчику программу с одной такой ошибкой. Извращался с определением констант. Запарился. Наткнулся на эти макросы, с тех пор использую и не парюсь. mazur(283 знак., 16.10.2012 14:12)
- Ваш макрос работает только с одним битом. А sbr FLAGS,(1<<FLG1)|(1<<FLG2)|(1<<FLG3)? Или например sbr R16,(3<<WGM12)|(5<<CS10) - maik-vs(16.10.2012 15:57)
- Тут да, согласен. Предложите варианты. - mazur(16.10.2012 16:15)
- Ваш макрос работает только с одним битом. А sbr FLAGS,(1<<FLG1)|(1<<FLG2)|(1<<FLG3)? Или например sbr R16,(3<<WGM12)|(5<<CS10) - maik-vs(16.10.2012 15:57)
- Нет, sbr FLAGS,FLG1 это фактически OR с константой. В отличие от sbi port,bit. :0 C битами работаем так: maik-vs(403 знак., 16.10.2012 10:24)
- sbr Rd,K - это ORI Rd,K. А про defы я не понял, к чему это вы? В программе trablset2.asm я допустил ошибку - поставил две метки с одинаковыми именами lDelay, а поскольку одна из них стоит в макросе, ассемблер промолчал, как и предупреждал mazur. tvi(45 знак., 16.10.2012 11:14)
- Про .def-ы это совет. Неприятно видеть программы с бесконечными R16 R17 R23 и держать в мозге кто для чего. - maik-vs(16.10.2012 11:38)
- sbr Rd,K - это ORI Rd,K. А про defы я не понял, к чему это вы? В программе trablset2.asm я допустил ошибку - поставил две метки с одинаковыми именами lDelay, а поскольку одна из них стоит в макросе, ассемблер промолчал, как и предупреждал mazur. tvi(45 знак., 16.10.2012 11:14)
- А я у вас спрашивал, что делает ваша программа. Что вы хотите получить. Вы не ответили, а передача параметров и ваш код это не ответ. Очень возможно, что все можно сделать по другому. - mazur(16.10.2012 06:43)
- Посылаю вам упрощенную версию (для облегчения восприятия) моей работающей программы с 3-мя однотипными блоками, которую я для облегчения отладки решил переписать, используя подпрограмму. Но наткнулся на проблему с использовавшимися в старой версии tvi(650 знак., 16.10.2012 16:02 - 16:06)
- Вы тоже снова меня не поняли. Я посмотрю примеры. Мне нужно знать, что вы хотите реализовать. Не программным кодом, а что-то вроде ТЗ. Типа: вот такой-то девас. Он должен делать то-то и то-то. И когда то-то и то-то, должно происходить вот это и mazur(137 знак., 16.10.2012 16:21)
- Сколько программистов и столько же решений любого ТЗ, не так ли? Программа уже 3 года нормально работает, а этот блок программы самый сложный, в смысле алгоритма и трогать что то в ней опасно, поскольку я уже сам не все помню. Лучшее, враг tvi(745 знак., 16.10.2012 18:33)
- Вы тоже снова меня не поняли. Я посмотрю примеры. Мне нужно знать, что вы хотите реализовать. Не программным кодом, а что-то вроде ТЗ. Типа: вот такой-то девас. Он должен делать то-то и то-то. И когда то-то и то-то, должно происходить вот это и mazur(137 знак., 16.10.2012 16:21)
- Посылаю вам упрощенную версию (для облегчения восприятия) моей работающей программы с 3-мя однотипными блоками, которую я для облегчения отладки решил переписать, используя подпрограмму. Но наткнулся на проблему с использовавшимися в старой версии tvi(650 знак., 16.10.2012 16:02 - 16:06)
- Я не раз делал ошибку со стрелками. Один раз даже отправил заказчику программу с одной такой ошибкой. Извращался с определением констант. Запарился. Наткнулся на эти макросы, с тех пор использую и не парюсь. mazur(283 знак., 16.10.2012 14:12)
- Вариант с + тяжелее чем с | отлаживать, если случайно одинаковые FLG1 и FLG2 сделал. Особенно, когда флагов много. - Andreas(15.10.2012 16:28)
- Думаю, вы так и не поняли о чем я спрашивал изначально, а как устанавливать/сбрасывать флаги по одному или скопом я знаю. И я не пойму смысла ваших макросов - зачем они нужны? tvi(118 знак., 15.10.2012 23:57)
- Если нам нужно записать флаг, тогда это будет команда ldi: mazur(477 знак., 15.10.2012 16:04)
- Программы написаны только для наглядности моих затруднений - первая, где я пытался создать переменные и с их помощью передать параметры в подпрограмму - вы все мне объяснили, что таким образом это сделать невозможно и подсказали, что параметры tvi(498 знак., 15.10.2012 12:24)
- EQU -- это навсегда, то есть до завершения обработки текста ассемблером. Значение константы, обьявленное директивой SET, можно изменять последующими директивами SET. Успехов! - Вл.Шарнин(15.10.2012 11:38)
- Не знаю, что делает ваша программа. Но даже я, когда начинал, не извращался так. Что за программа, что она делает, что вы хотите получить? - mazur(15.10.2012 11:44)
- Да, намек понятен - команды sbr и cbr я уже придумал заменить командами OR и AND. tvi(47 знак., 14.10.2012 22:07)
- test и breq Apтём(64 знак., 14.10.2012 22:20)
- Команда and меняет флаг Z. tst - не нужен - ilyaul(14.10.2012 22:43)
- А вот и еще один двоешник подтянулся :)) - MBedder(14.10.2012 22:40)
- Вторая команда здесь явно лишняя. Bill(10 знак., 14.10.2012 22:30)
- Да, tst - лишняя команда. Давно на асме не писал - забыл. - Apтём(14.10.2012 22:46)MBedder
- Я знал одного студента, который перед выполнением какой-либо инструкции всегда сбрасывал интересующий его флаг, хотя Bill(134 знак., 15.10.2012 09:44)
- "Не знал, но забыл"(с) :)) - MBedder(14.10.2012 22:53)
- Да, tst - лишняя команда. Давно на асме не писал - забыл. - Apтём(14.10.2012 22:46)MBedder
- test и breq Apтём(64 знак., 14.10.2012 22:20)
- Вот переписал прогу, в которой для передачи параметров использую регистры - все работает! Всем спасибо за подсказки и дельные советы! И все-таки я до конца не понял разницу между директивами EQU - SET tvi(15.10.2012 11:23)
- Если всего для 3-х входов - проще сделать три ветки где в каждой в R16 будет заноситься 1,2 или 3. Hobo(652 знак., 14.10.2012 18:01 - 18:10)
- В реальности то у меня так и есть - написано три блока однотипных, которые проходят последовательно по кольцу. Код то в них одинаковый, только каждый блок работает со своими флагами (их три в каждом блоке). Все бы хорошо, но программа еще не tvi(1067 знак., 14.10.2012 20:16)
- Никак не определит. VAR1 это просто число под названием VAR1. Вообще опасно назначать переменные в ОЗУ директивами EQU. Что-то неправильно подсчитал, вылез за рамки или неправильно назначил адреса. Я с определенного момента стал делать так: есть mazur(814 знак., 14.10.2012 20:55)
- Хорошо , если в данном массиве мне нужно обратится к определённой переменной , да ещё прямой адресацией.Чем плоха такая роспись ilyaul(376 знак., 14.10.2012 23:17)
- Тем что, при ручном нумеровании легко ошибиться. mazur(446 знак., 14.10.2012 23:29)
- Красиво. Возьму на заметку - ilyaul(14.10.2012 23:37)
- Ручное нумерование полезно для уменьшения кода. Но нужно тщательно следить. mazur(195 знак., 15.10.2012 00:00)
- Каким образом задание адресов вручную уменьшает код? - maik-vs(15.10.2012 16:24)
- Ручное нумерование полезно для уменьшения кода. Но нужно тщательно следить. mazur(195 знак., 15.10.2012 00:00)
- Красиво. Возьму на заметку - ilyaul(14.10.2012 23:37)
- В данном случае у вас вообще нет Bill(222 знак., 14.10.2012 23:27 - 23:29)
- Так не надо. maik-vs(686 знак., 15.10.2012 16:13 - 16:17)
- sts (BUFDS1337+dsHr),temp всё что нужно сделать в основном коде - ilyaul(14.10.2012 23:35)
- На самом деле в моем случае можно написать просто Bill(63 знак., 14.10.2012 23:41)
- По моему мнению -теже яйца , только вид в профиль. Мне понравился вариант mazura , т.к. было что ошибался при нумерации . - ilyaul(15.10.2012 07:00)
- Совершенно верно. Обычно я тоже так пишу. Только я подкорректировал именно ваш вариант. - Bill(15.10.2012 07:22)
- По моему мнению -теже яйца , только вид в профиль. Мне понравился вариант mazura , т.к. было что ошибался при нумерации . - ilyaul(15.10.2012 07:00)
- На самом деле в моем случае можно написать просто Bill(63 знак., 14.10.2012 23:41)
- Тем что, при ручном нумеровании легко ошибиться. mazur(446 знак., 14.10.2012 23:29)
- Не "опасно", а "безграмотно" - MBedder(14.10.2012 22:56)
- Хорошо , если в данном массиве мне нужно обратится к определённой переменной , да ещё прямой адресацией.Чем плоха такая роспись ilyaul(376 знак., 14.10.2012 23:17)
- Никак не определит. VAR1 это просто число под названием VAR1. Вообще опасно назначать переменные в ОЗУ директивами EQU. Что-то неправильно подсчитал, вылез за рамки или неправильно назначил адреса. Я с определенного момента стал делать так: есть mazur(814 знак., 14.10.2012 20:55)
- В реальности то у меня так и есть - написано три блока однотипных, которые проходят последовательно по кольцу. Код то в них одинаковый, только каждый блок работает со своими флагами (их три в каждом блоке). Все бы хорошо, но программа еще не tvi(1067 знак., 14.10.2012 20:16)
- У меня есть задача контролировать напряжение на 3-х входах и выполнять определенные действия в зависимости от величины этих напряжений, а т.к. действия для каждого канала однотипны я написал подпрограмму в которой пытаюсь менять ссылки на tvi(201 знак., 14.10.2012 16:25)