Програмирование pic на СИ.

Поклонники продукции Microchip Technology Inc тусуются тут.
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: Програмирование pic на СИ.

Сообщение BorisSPB »

Объявление переменных должно быть сразу после фигурных скобок

Код: Выделить всё

void main (void)
{
int i,v;

podgot();
...
}
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение misterkuk »

Chettuser писал(а):чё пишет?

Halting build on first failure as requested.
BUILD FAILED: Tue Jun 19 21:34:15 2012

BorisSPB Неа, не помогло, да и раньше это не мешало компилятору.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение urry »

если компилятор С++, то не мешает абсолютно, согласен, а если С, то почитайте литературу.
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение misterkuk »

urry писал(а):если компилятор С++, то не мешает абсолютно, согласен, а если С, то почитайте литературу.

Компилятор HI-TECH PICC 9.50. язык си. Побывал и после фигурных скобок сразу. Не помогло. Не могли бы вы скопировать код и попробовать скомпилировать у себя. Может вы найдёте причину. В учебник если полезу, если и найду, то то что мне уже сказали только что. Проблема не решится и будут дальше появляться мои посты о помощи.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение urry »

9.60 pl3 после переноса
void main (void)
{
int i,v;
podgot();
********** Build successful! **********
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение misterkuk »

urry писал(а):9.60 pl3 после переноса

********** Build successful! **********

Ура. спасибо. Значит в этот рас не я не напортачил. В таком коде в 10 строк напортачить, позор был бы:)

Код: Выделить всё

Build C:\Program Files\Microchip\123\123 for device 12F675
Using driver C:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.exe

Make: The target "C:\Program Files\Microchip\123\123.p1" is up to date.
Loaded C:\Program Files\Microchip\123\123.cof.

********** Build successful! **********
TripleKill
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

Re: Програмирование pic на СИ.

Сообщение TripleKill »

По поводу "сложных вещей", типа ЖК и еепром. Я когда решил опробовать С, под руку попался mikroC for PIC. Вот на нём и сижу пока. Там есть библиотеки, и ЖК в 2-3 строки инициализируется. А ещё иллюстрированный хелп с подключениями и примерами кода.

P.S. Где-то тут на форуме этот компилятор лажали. Но меня пока устраивает.
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение misterkuk »

Помогите найти ошибку .

Код: Выделить всё

#include <pic.h>
__CONFIG ( HS & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);


unsigned int tmp; // некая локальная переменная tmp
unsigned int tmp1;
unsigned int tmp2;
unsigned int x;


//  функция паузыфункции
 
void pauza (void)
{ // начало переменная
x = 7000; // в tmp поместить некое максимальное число
while (x-->0);
}// конец функции

//  подготовка МК


void podgot (void)
{
TRISA = 0b11111111; // направление работы ножек порта А
TRISB = 0b00000000; // направление работы ножек порта В
CMCON = 0x07; // отключение компараторов
PORTA = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б
RBPU = 1;  // подтягивающие R (0-вкл, 1-выкл)
tmp = 0;
GIE = 1;
}


void  interrupt prerivanie (void)
{
GIE = 0;
INTF=0;
if(RA3==0)
     {
     label2:
     if(RA3==1)
             {
             if (tmp==9)
                 tmp2=1;
                 else
                 tmp=tmp+1;
             }
             
     else
     goto label2;
     }


if(RA2==0)
     {
     label1:
     if(RA2==1)
            {
             if (tmp==0)
                 tmp1=1;
                 else
                 tmp=tmp-1;
            }
             
     else
     goto label1;
     GIE = 1;
     }

//конец функции


void main (void)
{
podgot();
while (1)
{
// === массив констант с описанием 7-сегментных символо
const unsigned char arr_seg[12]= // начало массива
{
// 0bABCDEFGH <– расположение сегментов по битам
   0b00111111, // 0й элемент, символ «0»
   0b00000110, // 1й элемент, символ «1»
   0b01011011, // 2й элемент, символ «2»
   0b01011110, // 3й элемент, символ «3»
   0b00111100, // 4й элемент, символ «4»
   0b01110110, // 5й элемент, символ «5»
   0b01110111, // 6й элемент, символ «6»
   0b01101100, // 7й элемент, символ «7»
   0b01111111, // 8й элемент, символ «8»
   0b01111110, // 9й элемент, символ «9»
   0b01100011, //10й элемент, символ градуса
   0b00000000,  //11й элемент, пробел
}; // конец массива
if(tmp1==1)
PORTB = arr_seg[tmp];
          {
          tmp1=0;
          PORTB=0;
          PORTB=0b01111110;
          pauza();
          PORTB=0;
          pauza();
          PORTB=0b01111110;
          pauza();
          PORTB=0;
          pauza();
          PORTB=0b01111110;
          }
         
if(tmp2==1)
          {
          tmp2=0;
          PORTB=0;
          PORTB=0b00111111;
          pauza();
          PORTB=0;
          pauza();
          PORTB=0b00111111;
          pauza();
          PORTB=0;
          pauza();
          PORTB=0b00111111;
          }


}
}


Код: Выделить всё

Build C:\project\ntv for device 16F628A
Using driver C:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.exe

Make: The target "C:\project\ntv.p1" is out of date.

Error   [314] C:\project\ntv.c; 75.1 ";" expected

********** Build failed! **********
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Аlex »

А чё её искать ? Вот она
Error [314] C:\project\ntv.c; 75.1 ";" expected
И номер строки написан и какая ошибка...
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение misterkuk »

Аlex писал(а):А чё её искать ? Вот она
Error [314] C:\project\ntv.c; 75.1 ";" expected
И номер строки написан и какая ошибка...

эта строка указывает на скобку
void main (void)
{ ---------- вот на эту. В этих скобках нет ни одной строки где пропущено ";". Всё пересмотрел.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Аlex »

Значит смотрите до этой ф-ии.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Аlex »

У Вас, походу, скобка пропущена, где конец ф-ии. Это на первый взгляд.
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение misterkuk »

Объясните на пальцах как работать с delay.h.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение Аlex »

Для начала, его нужно подключить к исполняемому файлу.
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение misterkuk »

Аlex писал(а):Для начала, его нужно подключить к исполняемому файлу.

Как я раньше не догадался!!!??? Не ну серьёзно. то что подключать это априори и прописать delay_us(N); любой дурак может. Но для чего #define XTAL_FREQ 4MHZ ???
Почему в этой библиотеке 12 мегагерц в расчётах и вообще....
Chettuser

Re: Програмирование pic на СИ.

Сообщение Chettuser »

и заглянуть в delay.c - там есть функции, можно посмотреть как правильно писать:

Код: Выделить всё

void
DelayMs(unsigned char cnt)
...

Значит так и писать, например:

Код: Выделить всё

DelayMs (25)
...

По поводу 12МГц - это, как я понимаю, всего лишь для корректного расчёта задержек. Взгляните в файл delay.c - там тоже есть кое что.
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение misterkuk »

Почему не вызываются функции, компилятор их просто обходит. При отладке функции не имеют адреса и в главной функции перепрыгивает "шаг" через вызываемую функцию.
Спойлер

Код: Выделить всё

#include <pic.h>
#include <delay.h>
__CONFIG ( HS & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);
#define   U1SH   RA0
#define   U1DS   RA1
#define   U1ST   RA2

#define   U2SH   RB1
#define   U2DS   RB2
#define   U2ST   RB3

#define   U3SH   RB4
#define   U3DS   RB5
#define   U3ST   RB6

unsigned int tmp; // некая локальная переменная tmp
unsigned int x;
 void  pro()
        {
        U1SH=1;
        DelayMs(1000);
        U1SH=0;
        DelayMs(1000);
        }
///////////////////////////////////
void propih2()
        {
        U2SH=1;
        DelayMs(100);
        U2SH=0;
        DelayMs(100);
        }
/////////////////////////////////////
void propih3()
        {
        U2SH=1;
        DelayMs(100);
        U2SH=0;
        DelayMs(100);
        }

//  функция паузыфункции
 
void pauza (void)
{ // начало переменная
x = 100; // в tmp поместить некое максимальное число
while (x-->0);
}// конец функции
/////////////////////////////////


void pic (void)
{ // начало переменная
RA7=1;
x = 1000; // в tmp поместить некое максимальное число
while (x-->0);
RA7=0;
}// конец функции
//  подготовка МК


void podgot (void)
{
GIE = 0; // все немаскированные прерывания запрещены
TRISA = 0b00000000; // направление работы ножек порта А
TRISB = 0b00000000; // направление работы ножек порта В
CMCON = 0x07; // отключение компараторов
PORTA = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б
RBPU = 1;  // подтягивающие R (0-вкл, 1-выкл)
tmp = 0;

T0IE=1; // Прерывания по переполнению TMR0 разрешены.
T0CS=0; // Внутренний тактовый сигнал Fosc\4
PS0=0;
PS1=0;
PS2=0; //  предделитель таймера 1:2
}

//конец функции
void main (void)
{
podgot();
while (1)
{
U1ST=0;
void  pro();
U1DS=1;
void pro(void);
U1DS=0;
void pro(void);
U1DS=0;
void pro(void);
U1DS=1;
void pro(void);
U1DS=0;
void pro(void);
U1DS=1;
void pro(void);
U1ST=1;
void pauza (void);
}
}

И вот ещё, 2 одинаковые функции. тело первой имеет адрес, а тело второй нет. Почему так?
ИзображениеИзображение
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение misterkuk »

Error [141] C: \ Program Files \ HI-TECH Software \ PICC \ 9.71a \ Include \ delay.h; 1,16 не может открыть включают файл "pic.h": Слишком много открытых

Почему так? переустанавливал винду. Восстановил проги и тут начало писать.
Chettuser

Re: Програмирование pic на СИ.

Сообщение Chettuser »

А где "pic.h" находится?
Папка куда установлено точно Program Files? Не Program Files (x86)?
И вообще лучше ставить куда-нибудь в D:\..., поскольку Вы переустанавливаете ОСь.
misterkuk
Мучитель микросхем
Сообщения: 400
Зарегистрирован: Сб апр 17, 2010 10:30:13
Контактная информация:

Re: Програмирование pic на СИ.

Сообщение misterkuk »

Chettuser писал(а):А где "pic.h" находится?
Папка куда установлено точно Program Files? Не Program Files (x86)?

Путь установки C:\Program Files\HI-TECH Software. Program Files (x86) просто нет.
"pic.h" находится в папке include. Раньше так же было установлено. Может есть какие-то идеи? Может попробовать снести мплаб и хайтек и переустановить их?
Ответить

Вернуться в «PIC»