eXeC001er 0 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба if ((PINB &= 0xFE) == 1) правильно ли я проверяю 1 в нулевом бите PINB ================================== command |= (PINB &= 0xFE); правильно переношу PINB.0 в нулевой бит command =================================== можно делать так: OCR1 = ICR1 + Bit_75; или лучше вот так: tempor = ICR1 + Bit_75; OCR1 = tempor; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба if ((PINB &= 0xFE) == 1) правильно ли я проверяю 1 в нулевом бите PINB ================================== command |= (PINB &= 0xFE); правильно переношу PINB.0 в нулевой бит command =================================== можно делать так: OCR1 = ICR1 + Bit_75; или лучше вот так: tempor = ICR1 + Bit_75; OCR1 = tempor; <{POST_SNAPBACK}> 1. Не правильно надо так if (PINB & 1) а вот так можно OCR1 = ICR1 + Bit_75; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eXeC001er 0 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба Следующий static char count_bit = 0; если я в обработчике прерываний объявлю переменную вот так она будет при каждом заходе обнуляться или нет ============================================== static char count_bit; если я ее объявлю вот так, то чему она будет равна?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба Вообще все эти вопросы не по IAR AVR, а по С все в соответсвии со стандартом. Порты - обычные перменные volatile Прерывание - обычная функция, только с другим прологом и эпилогом Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eXeC001er 0 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба ладна сам отвечу на свой вопрос (книгу открыл) она будет проинициализированна только один раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PaulS 0 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба command |= (PINB &= 0xFE); правильно переношу PINB.0 в нулевой бит command Это тоже не совсем правильно, надо или очищать предварительно 0 бит в command, а то первая же 1 там навсегда и останется или например так делать if(PINB & 1) command |= (0<<1); else command &= ~(0<<1); И лучше сразу вместо 0 писАть символьное имя для улучшения читабельности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eXeC001er 0 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба Другой вопрос именно по IAR у него в *.h файлах написаны объявления типа #define ICR1 1 но они не работают при использовании этих имен из С конструкций, а в файле написано что это объявления для Ассемблера, пришлось их скопировать в свой h файл, шоб работало, почему так, что мне в каждом новом проекте такие операции проводить?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eXeC001er 0 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба to PaulS у меня там вот такая конструкция command |= (PINB & 1); command = command << 1; после принятия всех битов и обработки, command обнуляется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба to PaulS у меня там вот такая конструкция command |= (PINB & 1); command = command << 1; после принятия всех битов и обработки, command обнуляется <{POST_SNAPBACK}> command будет равнв 0 если 0 бит порта 0 или будет равна 2 в симуляторе IAR будет 0 (потому что PINB 0)? если туда конечно не записать другое значение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба Другой вопрос именно по IAR у него в *.h файлах написаны объявления типа #define ICR1 1 но они не работают при использовании этих имен из С конструкций, а в файле написано что это объявления для Ассемблера, пришлось их скопировать в свой h файл, шоб работало, почему так, что мне в каждом новом проекте такие операции проводить?! <{POST_SNAPBACK}> вообще для С у IAR используются не #define а специальные макросы типа SFR_B(PINB, 0x16) /* Input Pins, Port B */ таким образом и обявляется порт макрос преобразуется в определение переменной volatile по определенному адресу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eXeC001er 0 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба да я это обнаружил но это савсем не удобно! только номера битов и все а имен нет! там для примера есть конструкция Examples of how to use the expanded result: 1) AVR |= (1<<5); * or like this: 2) AVR_Bit5 = 1; первая работает (но опять же нет имен, плохо!) вторая отказывается работать вместо AVR понятно что я подставляю имя регистра. например TIMSK |= (1<<5); работает а TIMSK_bit5 = 1; не работает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eXeC001er 0 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба еще вопрос по среде в даташите сказанол что при чтении 16 битных регистров надо соблюдать определенный порядок, так вот если я обращаюсь ко всему регистру сразу например TCNT1 = 0xFFD0; при транстляции это дело сделается как указано в даташите, или надо в С конструкциях тоже придерживаться требований даташита?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба TIMSK_bit5 = 1; не работает <{POST_SNAPBACK}> Enable bit definition поможет плохому танцору :-) шутка... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eXeC001er 0 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба просьба отвечайте полнее, /quote Enable bit definition поможет плохому танцору :-) шутка... /quote попробуй разберись где искать этот Enable bit definition, а может его в начале проекта прописывать для препроцессора. Но все равно спасибо. Сам нашел. В опциях проекта >> general >> Library Configuration Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PaulS 0 9 сентября, 2005 Опубликовано 9 сентября, 2005 · Жалоба да я это обнаружил но это савсем не удобно! только номера битов и все а имен нет! TIMSK |= (1<<5); работает а TIMSK_bit5 = 1; не работает <{POST_SNAPBACK}> Так пиши не номера, а имена и все понятно будет :) TIMSK |= (1<<TICIE1); А битам внешних регистров сам присвой имена в зависимости от назначения у меня там вот такая конструкция command |= (PINB & 1); command = command << 1; после принятия всех битов и обработки, command обнуляется <{POST_SNAPBACK}> А ну тогда все ОК, вдвигаться всегда будет 0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться