Поставки продукции Megawin по официальным каналам - микроконтроллеры, мосты USB-UART

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

Страница 1 из 2
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
4 55
0 0
 
20.03.2012 12: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? Помогите пожалуйста.
Оценка
Цифровой датчик DS18B20 – простое и надёжное решение для контроля температуры в любых проектах. Применяется как для бытовых задач, так и для мониторинга теплового режима самих радиоэлектронных устройств. Сегодня на российском рынке доступны качественные альтернативы оригинальному DS18B20 от ведущих азиатских производителей,таких как Youtai (UMW)), EVVO, HKSHAN, MSKSEMI, JSMICRO, MYSENTEC и другие. Проведем сравнительный анализ характеристик датчиков DS18B20, выпускаемых различными производителями.
Новичок
 
Регистрация: 10.06.2009
Сообщений: 19
Репутация: 13
3 3
0 0
 
20.03.2012 14:22 #2
PIC давно не занимался работаю с AVR, так что могу немного напутать с обозначением...
но у Вас в логике if(PORTC=1)
возможна ошибка. Вы читаете из буфера порта, а Вам надо читать с входа
т.е. должно быть что-то типа if (PINC=1)
уточните как называется вход порта у контроллера PIN и ли как то по другому,
но суть ошибки именно в этом.
Удачи!
Оценка
На склад КОМПЭЛ поступили OLED-дисплеи с диагональю 0,96…1,54 дюйма китайского производителя SIMAIR. Среди ключевых преимуществ этих OLED – низкое энергопотребление, высокая контрастность и яркость, широкие углы обзора, а также возможность отображения графики и текста. Дисплеи данного типа могут найти применение в различных устройствах с ограниченным пространством для размещения индикатора. По потребительским качествам это один из лучших типов дисплеев.
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
4 55
0 0
 
20.03.2012 17:10 #3
PINC=1 не работает. Может кто-нибудь ещё поможет?
Оценка
Новичок
 
Регистрация: 10.06.2009
Сообщений: 19
Репутация: 13
3 3
0 0
 
20.03.2012 17: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 в 18:13.
Оценка
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
4 55
0 0
 
20.03.2012 18:32 #5
Выдаёт кучю ошибок...
Побробывал по разному. Может не туда вставил. Дайте пожалуйста всю программу полностью.
Оценка
Новичок
 
Регистрация: 10.06.2009
Сообщений: 19
Репутация: 13
3 3
0 0
 
20.03.2012 18: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 в 18:56.
Оценка
Новичок
 
Аватар для RomanEfimov
 
Регистрация: 02.03.2012
Сообщений: 193
Репутация: 14
4 55
0 0
 
20.03.2012 18:47 #7
Из первого сообщения подредактируйте, нужно ли подключать заголовочные файлы и что добавлять если несколько конструкций if-else.
Делаю hex файл в mplab и вставляю в ptroteys is-is.
Оценка
Новичок
 
Регистрация: 10.06.2009
Сообщений: 19
Репутация: 13
3 3
0 0
 
20.03.2012 18:52 #8
"Из первого сообщения подредактируйте,"
подредактировал

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

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


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

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

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

Быстрый переход
ТМ Электроникс. Электронные компоненты и приборы. Скидки, кэшбэк и бесплатная доставка
Часовой пояс GMT +3, время: 03:04.
Обратная связь РадиоЛоцман Вверх