Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Си, CVAVR, VMLAB - нужна консультация.

Непрочитано 04.08.2012, 14:58  
krian
Прописка
 
Регистрация: 26.07.2004
Сообщений: 275
Сказал спасибо: 21
Сказали Спасибо 62 раз(а) в 28 сообщении(ях)
krian на пути к лучшему
По умолчанию Си, CVAVR, VMLAB - нужна консультация.

Решил освоить язык "С" на наглядных средствах и сразу "споткнулся". Я не то, чтобы начинающий, но и не программист - раньше писал программы для контроллеров на ассемблере. Ну и для разных других целей по ситуации (VHDL, спектра и т.п). Вот только с "С" не приходилось работать.
Начал с простого. Кнопочка и два светодиода. Один горит другой нет. При нажатии на кнопочку переключаются. Из-за ЕВРО2012 назвал "futbol", так что пусть это никого не смущает. Для написания и компиляции использовал CVAVR. Программа получилась такой:
Код:
#include ‹mega16.h›
void main (void)
{

PORTD=0xFF; // 0...5 - входы с подтяжкой, 6,7 - выходы.
DDRD=0xC0;

   while (1)
  {
     if (PIND.5==0){
       PORTD.7=0;
       PORTD.6=1;
     }
    else
       PORTD.7=1;
       PORTD.6=0;
  }

}
Загрузил в реальный макет - работает!
Правда прошивка получилась великоватой для такой программы - больше 80 слов. Судя по листингам, оно туда зачем-то добавляет кучу каких-то макросов, которые в программе нигде не вызываются. Ну да ладно, на больших программах эта надбавка, меньше 1%, будет не так заметна.
Ну а теперь в учебных целях я решил попробовать прокатить программку на VMLAB, т.к. раньше я этот пакет тоже не использовал. Может, думаю, пригодится... Все хвалят... Ну и чтобы по мере усложнения не возиться с макетом.

Для VMLAB создан вот такой управляющий файл:
Код:
.MICRO "ATmega16"
.TOOLCHAIN "GENERIC"
.TARGET "futbol.hex"
.COFF "futbol.cof"
.SOURCE "futbol.c"
.TRACE
.POWER VDD=5 VSS=0 
.CLOCK 14.7456meg ; частота, как в макете  
.STORE 100m        

D1 VDD n1;
R1 n1 PD6 430;
D2 VDD n2;
R2 n2 PD7 430;
K0 VSS PD5;

.PLOT V(PD5) V(PD6) V(PD7)
При моделировании происходит следующее.
Первый горит, второй погашен. Все правильно.
Нажимаем кнопочку (К0). Второй загорается, первый начинает хаотически мигать, хотя по осциллограммам видно, что не должен, а на осциллограмме РВ6 возникает паразитная генерация с периодом около 750нс. При изменении тактовой частоты в процессе симулляции, частота этой генерации тоже изменяется.

После симуляции напротив строки
PORTD.7=1;
выскакивает красный восклицательный значек. Никаких ошибок не объявляется. После сброса значек исчезает.
Если убрать один из светодиодов, то паразитная генерация не возникает.
На макете по осциллографу все нормально.

Я не могу понять, почему это происходит.

Проследить процесс в пошаговом режиме не получается, т.к. при нажатии на кнопку и одновременном нажатии клавиш F6 или F7 оно никуда не шагает.
Реклама:

Последний раз редактировалось dosikus; 04.08.2012 в 23:00.
krian вне форума  
Сказали "Спасибо" krian
warel (29.06.2019)
Непрочитано 04.08.2012, 15:22  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Си, CVAVR, VMLAB - нужна консультация.

krian, Оформите свой пост как положено ...
__________________
Осторожно , злой кот
dosikus вне форума  
Сказали "Спасибо" dosikus
warel (29.06.2019)
Непрочитано 04.08.2012, 22:36  
Flopix
Гражданин KAZUS.RUN
 
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
Flopix на пути к лучшему
По умолчанию Re: Си, CVAVR, VMLAB - нужна консультация.

krian, почему после else нет открывающей фигурной скобки?
Flopix вне форума  
Сказали "Спасибо" Flopix
warel (29.06.2019)
Непрочитано 04.08.2012, 23:23  
krian
Прописка
 
Регистрация: 26.07.2004
Сообщений: 275
Сказал спасибо: 21
Сказали Спасибо 62 раз(а) в 28 сообщении(ях)
krian на пути к лучшему
По умолчанию Re: Си, CVAVR, VMLAB - нужна консультация.

А что не так? Я программы копировал из текстовых файлов, но при публикации автоматически убрались все отступы.
krian вне форума  
Сказали "Спасибо" krian
warel (29.06.2019)
Непрочитано 04.08.2012, 23:25  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Си, CVAVR, VMLAB - нужна консультация.

Сообщение от krian Посмотреть сообщение
А что не так? Я программы копировал из текстовых файлов, но при публикации автоматически убрались все отступы.
Я уже исправил , в следующий раз ищите кнопку "код" сами ...
__________________
Осторожно , злой кот
dosikus вне форума  
Эти 2 пользователя(ей) сказали Спасибо dosikus за это сообщение:
krian (04.08.2012), warel (29.06.2019)
Непрочитано 04.08.2012, 23:41  
krian
Прописка
 
Регистрация: 26.07.2004
Сообщений: 275
Сказал спасибо: 21
Сказали Спасибо 62 раз(а) в 28 сообщении(ях)
krian на пути к лучшему
По умолчанию Re: Си, CVAVR, VMLAB - нужна консультация.

Сообщение от Flopix Посмотреть сообщение
krian, почему после else нет открывающей фигурной скобки?
Вначале скобки были, но в процессе экспериментов я их убрал. Понял, что они необязательны. В данном случае они что есть, что нет. Все равно после else последовательно выполняются команды, которые за ним стоят. Я читал, что и else писать необязательно, т.к. если не выполнится условие в операторе if, то будут выполнятся команды после закрывающей фигурной скобки, которая относится к if. Также еще пишут, что если стоит else, то все операторы, что находятся между if и else считаются относяшимися к if и выполняются только при выполнении условия. Так что и там скобки вроде необязательны. Но в том компиляторе, который я использовал такая запись не проходит. Может в других проходит.
Или я не прав?

Последний раз редактировалось krian; 04.08.2012 в 23:46.
krian вне форума  
Сказали "Спасибо" krian
warel (29.06.2019)
Непрочитано 04.08.2012, 23:44  
TEHb
Почётный гражданин KAZUS.RUN
 
Аватар для TEHb
 
Регистрация: 27.06.2005
Сообщений: 1,387
Сказал спасибо: 19
Сказали Спасибо 210 раз(а) в 156 сообщении(ях)
TEHb на пути к лучшему
По умолчанию Re: Си, CVAVR, VMLAB - нужна консультация.

Скобки нужны, т.к. без них
Код:
PORTD.6=0;
выполняется всегда.
TEHb вне форума  
Сказали "Спасибо" TEHb
warel (29.06.2019)
Непрочитано 04.08.2012, 23:50  
_Артём_
Гражданин KAZUS.RUN
 
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
_Артём_ на пути к лучшему
По умолчанию Re: Си, CVAVR, VMLAB - нужна консультация.

Сообщение от krian Посмотреть сообщение
Код:
#include ‹mega16.h›
void main (void)
{

PORTD=0xFF; // 0...5 - входы с подтяжкой, 6,7 - выходы.
DDRD=0xC0;

   while (1)
  {
     if (PIND.5==0){
       PORTD.7=0;
       PORTD.6=1;
     }
    else
       PORTD.7=1;
       PORTD.6=0;
  }

}
Ваш код эквивалентен такому:

Код:
while (1)
  {
     PORTD.6=0;
     if (PIND.5==0){
       PORTD.7=0;
       PORTD.6=1;
     }
    else
       PORTD.7=1;       
  }
Надо так:

Код:
while (1)
  {
     
     if (PIND.5==0){
       PORTD.7=0;
       PORTD.6=1;
     }
    else {
       PORTD.7=1;       
       PORTD.6=0;
    }
  }
Скобку потеряли.
_Артём_ вне форума  
Эти 2 пользователя(ей) сказали Спасибо _Артём_ за это сообщение:
krian (04.08.2012), warel (29.06.2019)
Непрочитано 04.08.2012, 23:51  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Си, CVAVR, VMLAB - нужна консультация.

Сообщение от krian Посмотреть сообщение
Все равно после else последовательно выполняются команды, которые за ним стоят.
Если скобок нет, не определен блок операторов - else обработает первый оператор . Последующие будут выполнятся не зависимо от условия . То же самое и с if ...
__________________
Осторожно , злой кот
dosikus вне форума  
Сказали "Спасибо" dosikus
warel (29.06.2019)
Непрочитано 04.08.2012, 23:57  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Си, CVAVR, VMLAB - нужна консультация.

Сообщение от krian Посмотреть сообщение
Я читал, что и else писать необязательно, т.к. если не выполнится условие в операторе if, то будут выполнятся команды после закрывающей фигурной скобки, которая относится к if. Также еще пишут, что если стоит else, то все операторы, что находятся между if и else считаются относяшимися к if и выполняются только при выполнении условия. Так что и там скобки вроде необязательны. Но в том компиляторе, который я использовал такая запись не проходит. Может в других проходит.
Или я не прав?
Или неправы.
Фигурными скобками выделяется БЛОК операторов. Если этого не делать, выполняется ТОЛЬКО ПЕРВЫЙ оператор после условия. ELSE относится к операторам условия.
Т.е.:
Код:
if ( condition == true )
  {
      operator_1;
      operator_2;
  }
else
  {
     operator_3;
     operator_4;
   }
Отсутствие скобок после else приведет к тому, что выполнится только operator_3 по условию. operator_4 будет находится ВНЕ условных операций и будет выполнятся БЕЗУСЛОВНО.
2dosicus Кропали одновременно...
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Эти 2 пользователя(ей) сказали Спасибо ut1wpr за это сообщение:
krian (05.08.2012), warel (29.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна консультация по пирометрам Andrey_DA Измерительное оборудование 0 08.01.2012 16:00
Нужна консультация по микроконтроллеру nikitchenko Микроконтроллеры, АЦП, память и т.д 10 07.11.2011 02:38
[Решено] Кто перепрошивал биос EPoX4PCAI нужна консультация Adusik Ремонт оргтехники 22 28.11.2010 00:32
Quartus 2 нужна консультация faceless Proteus, KiCAD и другие ECAD 23 17.02.2010 08:05


Часовой пояс GMT +4, время: 17:42.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.