има ли някой който разбира от програмиране на микроконтролери под C. Позлвам hitech C и имам няколко прости въпроса
- 1
- 2
От мобилни телефони до цифрови камери
NeoBoss
- специалист
13 мнения в "програмиране на PIC под C"
NeoBoss
- специалист
- Мнения: 675
правя да мигат едни лампички всичко със мигането е ок. но съм сложил едн бутон на мклр входа. и искам при натискането му да се сменят едектите на лампичките
демеке при RE3 == 0 (това ми е мклр входа) да изпълянва един низ , като се натисне пак да изпълнява втория нис и така като се изредуват всичките да почне от начало
пробвах да задам променлива бутон на която при всяко натискане на бутона да се прибавя 1
и след това със
if (button == 0)
{
тука слагам единия ефект
}
if (button == 1)
{
тук другия вефект
}
и т.н. ама не стана изобщо не тръгна и незнам къде ми е проблем.
незнам дали мога тези низове да ги направя на функции и при всяко натискане да се извиква следващата функци. Мога да кача и кода който не върви
демеке при RE3 == 0 (това ми е мклр входа) да изпълянва един низ , като се натисне пак да изпълнява втория нис и така като се изредуват всичките да почне от начало
пробвах да задам променлива бутон на която при всяко натискане на бутона да се прибавя 1
и след това със
if (button == 0)
{
тука слагам единия ефект
}
if (button == 1)
{
тук другия вефект
}
и т.н. ама не стана изобщо не тръгна и незнам къде ми е проблем.
незнам дали мога тези низове да ги направя на функции и при всяко натискане да се извиква следващата функци. Мога да кача и кода който не върви
NeoBoss
- специалист
- Мнения: 675
контролера е PIC16F886 mclr като му е зададен по настройки да е дизейбъл се използва като обикновен вход. когато е енейбъл рестартира кода при зануляването му.
Не не ми два кода грешки. НО като го сложа на микроконтролера не сработва .
Това е кода който последно пробвах.
Не не ми два кода грешки. НО като го сложа на микроконтролера не сработва .
Това е кода който последно пробвах.
Код: Избери всички
#include <htc.h>
#include <pic.h>
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT & DUNPROTECT & BOREN & IESODIS & FCMDIS & LVPDIS & DEBUGDIS);
__CONFIG(BORV40);
#ifndef _XTAL_FREQ
// Unless already defined assume 4MHz system frequency
// This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif
void main (void)
{
ANSEL = 0x00;
TRISC=0x00;
TRISB=0x00;
TRISA=0x00;
PORTA = 0;
PORTB = 0;
PORTC = 0;
unsigned char button ;
button = 0;
for(;;){
if (RE3 == 0)
button = button+1;
if (button == 0)
{
RB1 = 0;
RC7 = 1;
__delay_ms(25);
RB0 = 0;
RC6 = 1;
__delay_ms(25);
RC7 = 0;
RC5 = 1;
__delay_ms(25);
RC6 = 0;
RC4 = 1;
__delay_ms(25);
RC5 = 0;
RC3 = 1;
__delay_ms(25);
RC4 = 0;
RC2 = 1;
__delay_ms(25);
RC3 = 0;
RC1 = 1;
__delay_ms(25);
RC2 = 0;
RC0 = 1;
__delay_ms(25);
RC1 = 0;
RA7 = 1;
__delay_ms(25);
RC0 = 0;
RA6 = 1;
__delay_ms(25);
RA7 = 0;
RA5 = 1;
__delay_ms(25);
RA6 = 0;
RA4 = 1;
__delay_ms(25);
RA5 = 0;
RA3 = 1;
__delay_ms(25);
RA4 = 0;
RA2 = 1;
__delay_ms(25);
RA3 = 0;
RA1 = 1;
__delay_ms(25);
RA2 = 0;
RA0 = 1;
__delay_ms(25);
RA1 = 0;
RB7 = 1;
__delay_ms(25);
RA0= 0;
RB6 = 1;
__delay_ms(25);
RB7 = 0;
RB5 = 1;
__delay_ms(25);
RB6= 0;
RB4 = 1;
__delay_ms(25);
RB5 = 0;
RB3 = 1;
__delay_ms(25);
RB4= 0;
RB2 = 1;
__delay_ms(25);
RB3 = 0;
RB1 = 1;
__delay_ms(25);
RB2= 0;
RB0 = 1;
__delay_ms(25);
};
if (button == 1)
{
PORTA = 1;
PORTB = 1;
PORTC = 1;
__delay_ms(250);
PORTA = 0;
PORTB = 0;
PORTC = 0;
__delay_ms(250);
};
if (button == 3)
button = 0;
}
}
NeoBoss
- специалист
- Мнения: 675
добреде така кода според вас има ли грешка , защо не трябва да тръгва. Приемам всякакви предложения претполагам и със while също може да се получи.
Или някой ако знае как мога да го тествам виртуално дали работи зада не м исе налга всеки път като направя промяна по кода да го записвам да го махам от програматора да го слагам на схемата и ако не работи да го махам от схемата да го трия и т.н. просто след 10тата такава операция ства много досадно и рискувам да счупи контролера
Или някой ако знае как мога да го тествам виртуално дали работи зада не м исе налга всеки път като направя промяна по кода да го записвам да го махам от програматора да го слагам на схемата и ако не работи да го махам от схемата да го трия и т.н. просто след 10тата такава операция ства много досадно и рискувам да счупи контролера
lenko71
- специалист
- Мнения: 579
За съжаление не ползвам "С" (PicBasic и понякога Assembler) и не мога да ти помогна с кода.
Все пак предполагам, че работиш в средата на MPLab. Там от главното меню може да избереш Debugger-->Select Tool-->MPLab Sim. Излизат няколко бутончета с които може да пускаш програмата автоматично или стъпка по стъпка. Така може да се ориентираш какво става.
Другото, което ползвам за симулации е Proteus 7.
Все пак предполагам, че работиш в средата на MPLab. Там от главното меню може да избереш Debugger-->Select Tool-->MPLab Sim. Излизат няколко бутончета с които може да пускаш програмата автоматично или стъпка по стъпка. Така може да се ориентираш какво става.
Другото, което ползвам за симулации е Proteus 7.
LZ
- специалист
- Мнения: 437
Първо, не виждам какво става когато бутонът е 2
Инкрементирането на променлива с единица става с оператора ++
не че както е сега е грешно, но като се използва ++ компилаторът има възможност да оптимизира.
Добре е ефектите да се изнесат в подпрограми, т.е. нещо от сорта
ако са повече ефектите:
ако бутона ще приема само стойности 0 и 1, по-добре да се направи така:
и т.н.
Инкрементирането на променлива с единица става с оператора ++
Код: Избери всички
button++;
Добре е ефектите да се изнесат в подпрограми, т.е. нещо от сорта
Код: Избери всички
if (!button) effect0();
else effect1();
Код: Избери всички
switch (button)
{
case 0: effect0(); break;
case 1: effect1(); break;
case 2: effect2(); break;
}
Код: Избери всички
button = 0;
for(;;)
{
if (!RE3) button = 1 - button;
....
}
NeoBoss
- специалист
- Мнения: 675
@lenko71 можеш ли да кажеш от къде мога да си тръпна тази прогеама , че преди време я търсих ама без успех. Иначе като пусна този дебъгер ми излиза зелена стралка след скобата на иф бутон == 1 и това е .
@LZ бутона го написах така във последствие защото незнах това ++ за увеличаване със еденица да не е от C++ а в чистото C да го няма. Както и невиждаш бутон 2 защото го изтрих с цел да намаля кода да има по малко евентуални грешки но дори и така трябва при пускане първоначално да не става нищо след натискане на бутона да се пусне първия ефект и ако го натиснеш пак да блокира. Но при мен само светкат първите пинове на портовете и след натискането на бутона не става нищо.
съгласен съм че ефектите е по добре да са с под програми, но незнам как е правилно да се извикват и задават. може ли да деш малко разяснения - ефектите ще са около 7
бях пробвал да ги задам
void effect1()
{
тука кода на ефекта
}
void effect2()
{
тука кода на другия ефект
}
и посе по някакъв начин да успя да го извикам ппри натискане на бутона
if(RE3 == 0) effect1();
но пак не тръгна и реших че съм на грешен път ....., не са ми особено ясни нещата работил съм преди време на C++ но със чистото С има разлика както и това че не пишеш проста програмка за компютър а трябва да се съобразяваш и със функциите на микроконтролера .
пък и търсенето във гугал не е много лесно щот не ми зачита че търся за "C" и изкарава всякакви резултати хахах
@LZ бутона го написах така във последствие защото незнах това ++ за увеличаване със еденица да не е от C++ а в чистото C да го няма. Както и невиждаш бутон 2 защото го изтрих с цел да намаля кода да има по малко евентуални грешки но дори и така трябва при пускане първоначално да не става нищо след натискане на бутона да се пусне първия ефект и ако го натиснеш пак да блокира. Но при мен само светкат първите пинове на портовете и след натискането на бутона не става нищо.
съгласен съм че ефектите е по добре да са с под програми, но незнам как е правилно да се извикват и задават. може ли да деш малко разяснения - ефектите ще са около 7
бях пробвал да ги задам
void effect1()
{
тука кода на ефекта
}
void effect2()
{
тука кода на другия ефект
}
и посе по някакъв начин да успя да го извикам ппри натискане на бутона
if(RE3 == 0) effect1();
но пак не тръгна и реших че съм на грешен път ....., не са ми особено ясни нещата работил съм преди време на C++ но със чистото С има разлика както и това че не пишеш проста програмка за компютър а трябва да се съобразяваш и със функциите на микроконтролера .
пък и търсенето във гугал не е много лесно щот не ми зачита че търся за "C" и изкарава всякакви резултати хахах
lenko71
- специалист
- Мнения: 579
Горе вдясно има бутони. Със средния симулацията е стъпка по стъпка (при всяко натискане).
ПП: Между "...не стана изобщо не тръгна..." и "...само светкат първите пинове на портовете и след натискането на бутона не става нищо..." има голяма разлика!
ПП: Между "...не стана изобщо не тръгна..." и "...само светкат първите пинове на портовете и след натискането на бутона не става нищо..." има голяма разлика!
Прикачен файл
Clipboard.jpg (56.34 KиБ) Видяна 6320 пъти
- 1
- 2
Тема "програмиране на PIC под C" | Включи се в дискусията:
Сподели форума:
Бъди информиран. Следвай "Направи сам" във Facebook:
Намери изпълнител и вдъхновения за дома. Следвай MaistorPlus във Facebook:
Имаш нужда от подходящ професионалист за дома?
- Преустройство, ремонт и реновиране
- ↳ Вашите ремонти
- ↳ Кухня
- ↳ Баня
- ↳ Дневна
- ↳ Спалня
- ↳ Детска
- ↳ Градина
- ↳ Коридор
- ↳ Тераса и балкон
- Направи сам
- ↳ Направи сам
- ↳ Ремонтирай сам
- ↳ Къде е по-евтино?
- ↳ Дърводелство
- ↳ Ел. инструменти
- ↳ Металообработване
- ↳ Конкурс "Направи сам 2012"
- Строителство
- ↳ Всичко за вилата
- ↳ Къщи
- ↳ Саниране
- ↳ Хидроизолация
- ↳ Пасивни и нискоенергийни сгради
- Сухо строителство
- ↳ Окачени тавани
- ↳ Преградни стени и предстенни обшивки
- ↳ Сухи и повдигнати подове
- ↳ Декоративни елементи - колони, трегери, сводове и др.
- ↳ Всичко за гипскартона и гипсфазера
- Въпроси и Отговори
- ↳ Полезни съвети
- ↳ Автомобили
- ↳ Партньори
- ↳ Боядисване и Декориране
- ↳ Вентилация, климатици и термопомпи
- ↳ Водоснабдяване и канализация.
- ↳ Всичко за ремонта
- ↳ Електротехника
- ↳ Отопление
- ↳ Газификация
- ↳ Електроника и Схеми
- ↳ Газобетон
- ↳ От всичко по малко
- ↳ Компютри и периферия
- ↳ Уеб дизайн, PHP, MySQL, JavaScript, HTML..
- ↳ Мобилни устройства, GSM-и
- ↳ Нека се запознаем
- ↳ Recycle Bin
- Статии
- ↳ Практични решения
- ↳ Качване на снимки
- ↳ Какви статии искате?
- ↳ Готварство, туршии и зимнина
- ↳ Отмора и шеги
- ↳ От нищо нещо
- ↳ Не е за вярване
- ↳ Литература
- ↳ Връзки към Интересни сайтове
- Магазин
- ↳ Препоръки и Мнения за он-лайн магазина
- ↳ Крадeни инструменти !!!