РадиоЛоцман

Программирование микроконтроллера PIC конструкция if-else

Страница 1 из 2
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
 
20.03.2012 11:34 #1
Пробую программировать микроконтроллеры PIC (виртуально, в is-is).
Мигать по разному светодиодами научился, а вот чтобы на нажатие кнопки загорался определённый светодиод, не получается. Скорее всего, дело в том, что в условии пишу что-то не то, т.к. выполняется действие, как будто это условие выполнено, т.е. без кнопки светодид горит. Вот текст программы:
#include <pic.h>
__CONFIG(0x03F72);

void main(void)
{
T0IE=0;
GIE=0;
TRISB=0;
PORTB=0;
TRISC=1;
while(1==1)
{
if(PORTC=1)
{
PORTB=1;
}
else
{
PORTB=0;
}
}
}
Среда разработки VPLAB. Может дело в configuration bits? Помогите пожалуйста.
Новичок
 
Регистрация: 10.06.2009
Сообщений: 19
Репутация: 13
 
20.03.2012 13:22 #2
PIC давно не занимался работаю с AVR, так что могу немного напутать с обозначением...
но у Вас в логике if(PORTC=1)
возможна ошибка. Вы читаете из буфера порта, а Вам надо читать с входа
т.е. должно быть что-то типа if (PINC=1)
уточните как называется вход порта у контроллера PIN и ли как то по другому,
но суть ошибки именно в этом.
Удачи!
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
 
20.03.2012 16:10 #3
PINC=1 не работает. Может кто-нибудь ещё поможет?
Новичок
 
Регистрация: 10.06.2009
Сообщений: 19
Репутация: 13
 
20.03.2012 16:33 #4
Цитата:
Сообщение от RomanEfimov
PINC=1 не работает. Может кто-нибудь ещё поможет?
А я Вам сказал проверьте как читать из порта!
Я не гарантировал название PIN !!!!

Вот смотрите, уточняю

А Вы не забыли перед операцией чтения
перевести порт в режим INPUT может в этом проблема?


TRISC = FF; переводим C в режим input
Вот примерчик чтения байта
TRISD = 0xFF; //все пины порта PORTD на input
temp = PORTD;

вот еще чтение с конкретной ноги

trisa = 0x04; // set portA 2 as input
porta = 0;

if(porta.2 == 1)
{
portc.4 = 0; // LED OFF
}
if(porta.2 == 0) {
portc.4 = 1; // LED ON
}

надо читать конкретный вывод куда подключена кнопка
например if(porta.2 == 1)

обратите внимание if(porta.2 == 1)

а у Вас if(PORTC=1) т.е. не сравнение а присваивание(если Ваш код на языке Си)
тогда здесь ошибка, проверьте!
Последний раз редактировалось dimasamchenko; 20.03.2012 в 17:13.
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
 
20.03.2012 17:32 #5
Выдаёт кучю ошибок...
Побробывал по разному. Может не туда вставил. Дайте пожалуйста всю программу полностью.
Новичок
 
Регистрация: 10.06.2009
Сообщений: 19
Репутация: 13
 
20.03.2012 17:38 #6
Цитата:
Сообщение от RomanEfimov
Выдаёт кучю ошибок...
Побробывал по разному. Может не туда вставил. Дайте пожалуйста всю программу полностью.
Дайте свою программу, постараюсь поправить.
Написать полностью за Вас не получится, не знаю, что у Вас куда включено и какой компилятор!

например исправим старую версию
#include <pic.h>
__CONFIG(0x03F72);

void main(void)
{
T0IE=0;
GIE=0;
TRISB=0;
PORTB=0;
TRISC=0xFF; //все пины порта PORTС на input
while(1)
{
if(PORTC.1==1)//кнопка на 1 разряде или поставте что Вам нужно!
// может у Вас должно быть PORTC.3==0 откуда я знаю???
{
PORTB=1;
}
else
{
PORTB=0;
}
}
}
как-то так.
Последний раз редактировалось dimasamchenko; 20.03.2012 в 17:56.
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
 
20.03.2012 17:47 #7
Из первого сообщения подредактируйте, нужно ли подключать заголовочные файлы и что добавлять если несколько конструкций if-else.
Делаю hex файл в mplab и вставляю в ptroteys is-is.
Новичок
 
Регистрация: 10.06.2009
Сообщений: 19
Репутация: 13
 
20.03.2012 17:52 #8
"Из первого сообщения подредактируйте,"
подредактировал

" нужно ли подключать заголовочные файлы"
незнаю что Вам нужно и какие файлы, по крайней мере тип контроллера
нужен

" и что добавлять если несколько конструкций if-else."
вот это вообще непонятно что Вы имели ввиду


Делаю hex файл в mplab и вставляю в ptroteys is-is.
с ptroteys никогда дела не имел, ничего сказать немогу

О результатах сообщите
Последний раз редактировалось dimasamchenko; 20.03.2012 в 18:05.
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
 
20.03.2012 18:09 #9
В условии if номер вывода только через запетую пропустил, светодиод никак не горит.
Новичок
 
Регистрация: 10.06.2009
Сообщений: 19
Репутация: 13
 
20.03.2012 18:14 #10
А вы можете показать что у Вас куда запаяно, как включен светодиод?
Схемку покажите.
"В условии if номер вывода только через запетую пропустил"
Что значит через запятую??? Там точка должна быть.
Ответ
Страница 1 из 2
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

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

Быстрый переход
Часовой пояс GMT +3, время: 01:29.
Обратная связь РадиоЛоцман Вверх

Политика конфиденциальности