Страница 228 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт ноя 29, 2012 18:14:49
ibiza11
Ckfdf писал(а):Теперь другой вопрос - подскажите, есть ли команда для смены состояния порта при совпадении 2-х переменных, без опроса состояния порта?
просили команду изменения значения порта при совпадении двух чисел без чтения состояния порта. Думаю автор вопроса имел в виду иинверсию одного бита порта по условию, без изменения других битов (что в свою очередь требует операции: чтение - модификация - запись). Вот причем тут запись в регистр PINx.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт ноя 29, 2012 18:24:03
Goodefine
ibiza11 писал(а): Вот причем тут запись в регистр PINx.
Дык а чтение то зачем? Тупо пишем единицу и вот она - инверсия..
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт ноя 29, 2012 18:28:30
ibiza11
инверсия при записи лог."1" в PINx работает во всех AVR микроконтроллерах?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт ноя 29, 2012 19:27:39
Goodefine
Нет, но думаю, что не инверсия нужна автору вопроса.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт ноя 29, 2012 20:06:53
ibiza11
Сначала согласились с инверсией
Goodefine писал(а):Дык а чтение то зачем? Тупо пишем единицу и вот она - инверсия..
потом отказываетесь
Goodefine писал(а):думаю, что не инверсия нужна автору вопроса.
давайте расставим точки над i и закончим спор, прекращая флуд.
1)если надо изменить часть данных порта в/в и это не просто инверсия бита, то без операции чтения не обойтись.
2)если надо инвертировать один или несколько бит в порту в/в, то можно обойтись без операции чтения (запись в соответствующие биты регистра PINx лог."1")
(to Goodefine: Все верно? или опять не согласны?)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт ноя 29, 2012 23:46:03
Goodefine
ibiza11 писал(а):Сначала согласились с инверсией
Я согласился с доводом про PINx (причем тут он), после вашего объяснения, что вы имели ввиду, но не с тем, что ввиду автором имелась инверсия.
ibiza11 писал(а):
1)если надо изменить часть данных порта в/в и это не просто инверсия бита, то без операции чтения не обойтись.
Опять 25 ))) Зачем, при такой постановке вопроса чтение?
ibiza11 писал(а):
2)если надо инвертировать один или несколько бит в порту в/в, то можно обойтись без операции чтения (запись в соответствующие биты регистра PINx лог."1")
Тут согласен
ibiza11 писал(а):
давайте расставим точки над i и закончим спор, прекращая флуд.
Согласен. С вас предлагаю и начать - действительно много лишних постов из-за одного вашего
предположения.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 00:09:41
ibiza11

А как это сделать без предварительного чтения?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 00:22:33
Goodefine
Я изменил часть данных порта?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 00:24:53
ibiza11
нет, Вы изменили данные всего порта.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 00:44:19
Goodefine
Откуда Вы знаете что было в порту до этого? Другой пример, где последовательно изменяются ЧАСТИ порта:
Возражения?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 00:56:01
ibiza11
Что за бред Вы несете?
сама операция присваивания в общем случае изменяет ВСЕ данные порта! Если даже был лог."0" и записывается лог."0", то он перезаписывается, а не копируется!
я сейчас пишу очевидные вещи, что здесь непонятного?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 01:04:37
Goodefine
Вы хоть читайте что пишете, изменить это значит изменить, а записать это значит записать. А то у вас слишком развитое воображение - пишете одно а подразумеваете другое.
А такой пример
Тоже все? Или асмовских команд для управления отдельными битами тоже не существует?
Компилятор сделает из этого
Или у вас программа ведет себя абсолютно не детерминировано и вы не знаете что в порту в любом месте программы? Так в большинстве случаев это известно, и для того чтобы изменить состояние части порта совершенно не нужно его читать, разве что только при выводе в порт случайных чисел до этого. Я уже не говорю о том, что если под изменением вы понимаете тупую запись в регистр, неважно чего (следует из поста выше), то тогда тем более знать что в порту не обязательно.
Так кто пишет бред?
я сейчас пишу очевидные вещи, что здесь непонятного?
Никак не связанные с нитью рассуждений...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 08:19:52
ibiza11
Я читаю, что я пишу. Прошу указать мне, в каких сообщениях у меня разыгралось воображение по Вашему мнению.
- частный случай. По Вашему код:
будет преобразован в 7 последовательных команд
sbi? Компилятор явно умнее и он сначала прочитает порт, а потом, изменив, запишет обратно.
Или у вас программа ведет себя абсолютно не детерминировано и вы не знаете что в порту в любом месте программы?
Конечно я не знаю что в каждом порту в любом месте программы! Мало ли что в прерывании могло поменяться.
разве что только при выводе в порт случайных чисел до этого
Приведу пример. По окончанию приема пакета по UART, по таймеру запускается мигание светодиодом (PORTx бит №0), а в это время идет программная передача данных (пусть будет параллельный интерфейс 4 бита) на микросхему внешней памяти висящей на PORTx биты [1:6]. Подрограмма передающая данные на внешнюю память ни сном, ни духом о том в каком состоянии светодиод сейчас находится. По-вашему, она будет изменять это значение, как ей заблагорассудится? А если там не светодиод, а вывод управления двигателем? И такие моменты в программе встречаются очень часто, в разрез Вашему утверждению
Так в большинстве случаев это известно
А откуда этот вывод я вообще не понимаю:
Я уже не говорю о том, что если под изменением вы понимаете тупую запись в регистр, неважно чего (следует из поста выше), то тогда тем более знать что в порту не обязательно.
В моем предыдущем посте нет ни одного слова "изменение".
Дабы Вас определить с выводами, под
изменением я подразумеваю любое изменение в данных в порту. Под
изменением части данных - изменение части данных порта
без изменения другой части данных порта.
В любом случае, поняли Вы меня или нет, я хочу дождаться ответа автора вопроса. Что он имел в виду под сменой состояния порта без опроса состояния порта? Я предположил, что он имел в виду изменение
части данных порта без изменения другой части данных порта. Пусть он нас и рассудит.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 11:38:27
Ckfdf
Господа! Всем спасибо за внимание! Думаю, я не совсем корректно вопрос задал! Я имел в виду иззменение состояния порта при выполнении определенного условия без применения группы команд типа
Вопрос решил командой
Код: Выделить всё
if(time1<time2){time2=0;
PORTB.6=~PORTB.6;}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 11:40:01
Goodefine
ibiza11 писал(а):Я читаю, что я пишу. Прошу указать мне, в каких сообщениях у меня разыгралось воображение по Вашему мнению.
Разыгралось там, где речь шла об
изменении части данных порта (я ниже напишу, что я под этим понимаю), а именно
сама операция присваивания в общем случае изменяет ВСЕ данные порта! Если даже был лог."0" и записывается лог."0", то он перезаписывается, а не копируется!
Следовательно, по Вашему, сам факт перезаписывания (даже тем же значением) битов в регистре является изменением. Что явно не так. Т.е. воображение отождествило перезапись и изменение.
ibiza11 писал(а):
- частный случай. По Вашему код:
будет преобразован в 7 последовательных команд
sbi? Компилятор явно умнее и он сначала прочитает порт, а потом, изменив, запишет обратно.
Начнем с того, что даже частный случай опровергает придуманное Вами правило:
1)если надо изменить часть данных порта в/в и это не просто инверсия бита, то без операции чтения не обойтись.
Поскольку является исключением из него. Я не зря сказал, что при т
акой постановке вопроса чтение не нужно, на что Вы сделали круглые глаза, спросив как же без чтения... Выражайтесь точнее, другими словами.
ibiza11 писал(а):
Конечно я не знаю что в каждом порту в любом месте программы! Мало ли что в прерывании могло поменяться.
разве что только при выводе в порт случайных чисел до этого
Приведу пример. По окончанию приема пакета по UART, по таймеру запускается мигание светодиодом (PORTx бит №0), а в это время идет программная передача данных (пусть будет параллельный интерфейс 4 бита) на микросхему внешней памяти висящей на PORTx биты [1:6]. Подрограмма передающая данные на внешнюю память ни сном, ни духом о том в каком состоянии светодиод сейчас находится. По-вашему, она будет изменять это значение, как ей заблагорассудится? А если там не светодиод, а вывод управления двигателем? И такие моменты ...
Мало что понял из этого потока сознания, но скажу, что я могу и сам представить когда может понадобится знать состояние регистра перед записью. Но, повторяю, в большинстве случаев этого не надо. В моих программах я даже не вспомню такие места, где нужно читать перед записью. И не надо внутреннюю кухню, а именно особенности ассемблера (в частности команду ori, не способную работать с регистрами портов) выдавать за логическую необходимость чтения. Не думаю, что человека только начавшего работать с МК на Си, волнует что компилятор там себе считывает регистр иногда.
Про изменение - если стояли на порту где-то нули, где-то единицы, в регистр записали что-либо (командой присваивания), перезаписались все биты, согласен. Но изменились не все (!). Поскольку где писались одинаковые данные изменения нетуууу! Детский сад, чесслово, объяснять такие вещи. Пытаетесь формулировать, так делайте это точно.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 11:50:36
Goodefine
Ckfdf писал(а): Я имел в виду иззменение ...
to Ibiza11:
Т.е. имелась ввиду хоть инверсия, но явно не про PINX. Человека удовлетворило чтение даже в этом варианте:
Код: Выделить всё
SBIS 0x18,6 ; вот оно, чтение )))))
RJMP _0x3
CBI 0x18,6
RJMP _0x4
_0x3:
SBI 0x18,6
И внутренняя кухня компилятора ему до лампочки, просто не знает сишные битовые операции и не точно задает вопросы...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 12:01:07
Ckfdf
Goodefine писал(а):
И внутренняя кухня компилятора ему до лампочки, просто не знает сишные битовые операции и не точно задает вопросы...
Прошу не судить строго, я самоучка, особо литературы нет. Программирование настигал по Корабельникову на ассемблере. Поэтому могу не совсем корректные вопросы задавать. В преть постараюсь быть более точным!

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 12:51:42
ibiza11
to
Goodefine: Полностью с Вами соглашаюсь. В начале спора не подумал о командах
sbi/cbi, поэтому и глаза округлил))))) Признаю! В том случае можно их использовать без предварительного чтения)

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт ноя 30, 2012 12:55:48
Goodefine
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср дек 05, 2012 09:38:18
Ckfdf
Добрый день!
Возник вопрос: нужно значение переменной i записать в епром, а затем (когда возникнет необходимость) считать это значение в i. Пробовал код
Код: Выделить всё
//чтение
EEAR=0; //нулевой адрес
EECR=0b'00000101'; //разрешить чтение
i=EEDR;
//запись
EECR=0b'00000110'; //разрешить стирание/запись
EEAR=0; //адрес 0
EEDR=i; //запись
Чтение, вроде проходит, а вот с записью проблемы. Знаю, что-то не то в коде, а разобраться не могу.