Мне. Притом в 100% процентах случаях, то есть, на все мои вопросы КРАМ давал ответы, полностью решившие проблему. А скольким же (и как - ты ведь безграмотный) помог ты? "Ты об этом подумал?"
Ну да! Я же не зализываю внутри форума :) Хотите забанить ? Так давно пора :), вы дальше будете жидкостями между тремя дружбанами перепихиваться :)
А те, кто хочет учить ПИК-и - им тут делать тогда НЕХЕР!
Может кому-то он и давал советы. но это не значит, что он тут БОГ! :) Для улитки он бог, для меня - ничем не отличается от обычного вопрошающего, у которого есть доступ к правке чужих сообщений :)
А по делу - вот САМ скажи - сколько у него по делу сообщений, и сколько ФЛУД?!? :)
да ты не только глупый, но и просто больной неадекват, со склонностью к извращениям... вот чего ты тут забыл? Ты спровоцировал остальных устроить срач, это было твоей целью? Или что-то хотел доказать? Ну, пока лишь ты, как и ранее другой форумчанин, тоже доказал одну упрощенную интерпретацию эффекта Данниг-Крюгера.
А те, кто хочет учить ПИК-и - им тут делать тогда НЕХЕР!
А их нужно учить? Мне кажется, что они и так ученые... Впрочем, изучать их тоже не нужно. Это всего лишь одна из платформ. Разобрался с даташитом и работай.
А у кого тут есть доступ к правке чужих сообщений? Вроде модераторы тут не появлялись... Или я что то пропустил? Может тебе все таки стоит прочитать Правила заведения, прежде чем смешить публику?
Не хочу плодить тем, спрошу здесь. Коллеги, посоветуйте компилятор Си для PIC-ов. Только не монстро-образину, вроде Визуал Студио, а что-нибудь простое вроде Arduino IDE (который Си++ для AVR-ов). С уважением.
Друзья. Изучаю СИ и пробую писать в MPLAB. Не подскажите как можно Отследить состояние флага "С". Хочу выполнить команду "BTFSC" но как не знаю. Смысл такой. Есть функция. В конце функции нужно проверить состояние бита STATUS (то есть флага С). Если С=0 то начать функцию сначала если С=1 то выйти из функции. Пытаюсь делать через IF: void fun_1 () { Metka1: //функция if (состояние флага С == 0) { goto Metka1; } else { return; } Может кто подсказать? Я не понимаю как к битам обращаться в СИ. Заранее спасибо. И еще. Как избежать использование "goto"? Пишут, что лучше его не использовать. Я не понял почему но раз пишут то не дураки.
В конце функции нужно проверить состояние бита STATUS (то есть флага С). Если С=0 то начать функцию сначала если С=1 то выйти из функции.
Весь код (кроме return) внутри функции заключите в фигурные скобки в цикле while (С==0){}. Пока C равно 0 все что в фигурных скобках будет повторяться.
_________________ Астролябия-сама меряет, было бы что мерять!!!
Есть два варианта. 1. С помощью маски. То есть через & с маской. Тогда будет выделен необходимый бит или группа бит. При этом маску желательно дефайнить, то есть заменить магическое число на имя маски. 2. Через элемент структуры. При объявлении регистра как структуры (в хедерах применяемого контроллера обычно это уже сделано), обращение к биту будет выглядеть примерно так:
Код:
STATUS_bits.C = 0;
ЗЫ. Что характерно, компилятор заменит приведенный выше код на единственную инструкцию
У меня компилятор XC8 v 1.41 не распознает STATUS_bits.C = 0; не распознает.
Смотрите как прописаны биты регистра STATUS в заголовочном файле XC8 для вашего микроконтроллера. У меня эти файлы в по такому пути расположены: C:\Program Files\Microchip\xc8\v1.33\include
_________________ Астролябия-сама меряет, было бы что мерять!!!
нет там нижнего подчеркивания но дело даже не в этом - в си не надо проверять флаг переноса и пытаться "btfsc" выполнить ... это ж не асм тоже самое и с "goto" - не нужен в си безусловный переход
нет там нижнего подчеркивания но дело даже не в этом - в си не надо проверять флаг переноса и пытаться "btfsc" выполнить ... это ж не асм тоже самое и с "goto" - не нужен в си безусловный переход
Вы меня в каждой теме "поражаете". Что не вопрос то хвастовство, что всё знаете. Знаете? Хорошо, отлично. Считаете, что я не достоин Вашего совета и подсказки? Проходите мимо. То, что Вы пишете - об этом весь интернет кишит. К сожалению нет полноценного обучения данной теме. Приходится самому карабкаться. Можете подсказать? Подскажите как. Не хотите - мимо.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Сб дек 14, 2024 00:12:19
Нашел транзистор. Понюхал.
Карма: 1
Рейтинг сообщений: 22
Зарегистрирован: Чт ноя 26, 2015 23:22:35 Сообщений: 162 Откуда: не с Уфы
Рейтинг сообщения:0
В какой ещё "каждой"? Вы меня с кем-то путаете... Я точно также как и вы сравнительно недавно начал осваивать си... То, что я написал - это и есть подсказки. Могу повторить - не проверяйте флаг С. Найдите другой способ. Вы же его проверять зачем хотите? Чтобы перенос отследить, верно? После чего? Вычитания? Ну так есть же операторы больше/меньше - используйте их. Я к тому, что например, зачем отнимать 5 из 3, если 3 меньше пяти... и это можно выяснить ещё до вычитания ... как вариант ...
насчет ещё флага С - его можно использовать в иных (своих) целях ... например, в функции записи в ипром, прежде чем отключить прерывания, им временно можно запомнить текущее состояние GIE : STATUSbits.CARRY = 0; if (INTCONbits.GIE) {STATUSbits.CARRY = 1;} INTCONbits.GIE = 0; чтобы потом именно восстановить как было, а не тупо включить if (STATUSbits.CARRY) {INTCONbits.GIE = 1;} разумеется, это для случаев, когда в промежутке точно нет кода. который может повлиять на него (сдвиги, арифметика) ... а здесь как раз такой случай, ибо речь о последовательности раблокировки записи
Друзья. Объясните, пожалуйста, как быть с регистром W. Как его в Си сохранять в прерываниях и вообще работать с ним. И еще. В MPLAB он весит по адресу 0x9F но там же висит и ADCON1. Как так? Заранее спасибо за ответ.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения