Микроконтроллеры | Фазометр на AVR программа на Си |
|
---|---|---|
Хочу ещё раз поднять тему фазометра на МК. Я толко недавно начал заниматься микроконтроллерами . Начал с сайта 123 avr, набросал програмку ( не полностью) . Посмотрите, если есть косяки, подскажите где и почему. --- такие тонкие вещи можно узнать только от опытных людей. CAVR почему то ругается - почему не пойму. |
|
|
Касаемо вот этого участка кода: while ( h ) { if ( PORTB&0x01 ) { 1. Для чего здесь нужен цикл, если он выполняется заведомо ровно один раз (посмотрите внимательно код - сами поймете). Насчет ошибок - выложите листинг, потому что не все работают с CVAVR. И еще совет - сайт, который вы упомянули, больше не поминать. Могут быть неприятности. |
|
|
Доброго времени суток ! Да, нащёт " h" Вы правы , это я не досмотрел. Мне нужно чтобы в пределах основного цикла этот цикл выполнялся 1 раз и дальше выполнялся код записаный ниже. Наверное в конце программы надо "h" опять присвоить -1. Немного непонятно почему одно " if " нейтрализует другое " if " , по этому поводу никакой информации не нашол. Извините за дурацкий вопрос --как должен выглядеть листинг , какое у него расширение, а то CAVR много файлов наделало , там и hex. и c. и asm. и др. |
|
|
Насчет расширения я тоже не знаю, в разных системах по-разному. Как правило, что-то навроде *.lst, *.lss. Один if нейтрализует другой if, потому что в обоих if-ах одно и то же условие, а промежуток времени между их последовательной работой - от силы 2..3 микросекунды. Получается, что они всегда (или уж практически всегда) отрабатывают парой. В одном if вы включаете таймер, в другом - тут же выключаете. Результат получается нулевой |
|
|
Понятно. Переделал. Можно ли в цикле while использовать if . А внутри цикла if ещё одно if ? Будет ли программа реально стоять в таком цикле - while ( PINB.0<<1 ) { } ; // Отрицательный ? Ждать и ничего не делать ( чтоб не выскочить из цикла при отрицательном полупериоде) ?????? Нужно ли в самом прерывании указывать причину его возникновения interrupt [TIM1_CAPT] void timer1_capt_isr(void) Или не надо? interrupt [TIM1_CAPT] void timer1_capt_isr(void) Написал так : |
|
|
Вот файл листинга |
|
|
Теперь по другому !!! |
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |