+ Post New Thread
Results 1 to 9 of 9
  1. #1
    Junior Member level 3
    Points: 1,009, Level: 7

    Join Date
    Aug 2015
    Posts
    29
    Helped
    0 / 0
    Points
    1,009
    Level
    7

    What languages or compiler they use this code

    All Member,
    Please help me.
    I want to know what is to do compile this code, i do not know much this language/compiler they use, here are the code :
    Code C - [expand]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    
    #include <pic.h>
     
    // __CONFIG (INTIO & UNPROTECT & LVPDIS                    //What mean this
    // & BOREN & MCLRDIS & PWRTEN & WDTDIS);               //What mean this
     
    __CONFIG (XT & WDTDIS & PWRTEN & UNPROTECT);       // What mean this
     
    __EEPROM_DATA(0x01,0xFF,0x27,0x4C,0x27,0xA6,0x27,0xE2);
    __EEPROM_DATA(0x28,0x14,0x28,0x6E,0x28,0xBE,0x28,0xF0);
    __EEPROM_DATA(0x29,0x22,0x22,0x56,0x22,0x7E,0x22,0xA6);
    __EEPROM_DATA(0x23,0x8C,0x26,0xF7,0x27,0x4C,0x27,0xA6);
    __EEPROM_DATA(0x27,0xE2,0x28,0x14,0x28,0x6E,0x28,0xBE);
    __EEPROM_DATA(0x28,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);
     
    void encoder (void); 
     
    interrupt void xxx (void) {
     
    if (RBIF)
    {encoder(); RBIF=0;}
    }
     
    void podgot (void); 
    void hd44_ini (void); 
    void mode_ecran (void);
    void read_all (void); 
    void mode (void); 
     
    void main (void){
    unsigned int tmp;
    tmp=0xffff; 
     
    while (tmp-->0);
    podgot ();  
    hd44_ini (); 
    read_all (); 
    mode_ecran ();
    while(1){
    mode (); 
    }
    }
     
    void podgot (void){
    INTCON = 0;  
    TRISA = 0b00000; TRISB = 0b11000000;
    PORTA = 0; PORTB = 0; 
    RBPU = 0; 
    }
     
    void mode_enc (void); 
    void mode_key (void);

    What and where I should i download the language or compiler.

    Thanks for help.
    Sacban.

    •   AltAdvertisement

        
       

  2. #2
    Advanced Member level 5
    Points: 13,046, Level: 27
    Achievements:
    7 years registered

    Join Date
    Apr 2010
    Posts
    1,988
    Helped
    420 / 420
    Points
    13,046
    Level
    27

    Re: What languages or compiler they use this code

    pic controller code.
    search c compiler for pic controller which
    support the macros__CONFIG ,__EEPROM_DATA..



  3. #3
    Advanced Member level 5
    Points: 9,296, Level: 23
    Achievements:
    7 years registered
    Easyrider83's Avatar
    Join Date
    Oct 2011
    Location
    Tallinn, Estonia
    Posts
    1,605
    Helped
    368 / 368
    Points
    9,296
    Level
    23

    Re: What languages or compiler they use this code

    Google says MPLAB-X XC8, took 7 sec of my life
    Love me or hate me. All infractions will be ignored.



    •   AltAdvertisement

        
       

  4. #4
    Junior Member level 3
    Points: 1,009, Level: 7

    Join Date
    Aug 2015
    Posts
    29
    Helped
    0 / 0
    Points
    1,009
    Level
    7

    Re: What languages or compiler they use this code

    Hi,
    Thanks all for suggestion, i trying to compile with MPLAB X IDE V3.45, i got an error.
    Could anyone here check what a problem there.
    Here are :

    Code C - [expand]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    
    #include <pic.h>
     
    // pic16f628a (раскомментировать, в случае использования)
    // __CONFIG (INTIO & UNPROTECT & LVPDIS 
    // & BOREN & MCLRDIS & PWRTEN & WDTDIS);
     
    // pic16f84A
    __CONFIG (XT & WDTDIS & PWRTEN & UNPROTECT);
     
    // в часть ПЗУ заносим предустановки местных частот
    __EEPROM_DATA(0x01,0xFF,0x27,0x4C,0x27,0xA6,0x27,0xE2);
    __EEPROM_DATA(0x28,0x14,0x28,0x6E,0x28,0xBE,0x28,0xF0);
    __EEPROM_DATA(0x29,0x22,0x22,0x56,0x22,0x7E,0x22,0xA6);
    __EEPROM_DATA(0x23,0x8C,0x26,0xF7,0x27,0x4C,0x27,0xA6);
    __EEPROM_DATA(0x27,0xE2,0x28,0x14,0x28,0x6E,0x28,0xBE);
    __EEPROM_DATA(0x28,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);
     
     
    void encoder (void); // обработка энкодера
     
    // === начало обработки прерывания
    interrupt void xxx (void) {
    // прерывание на ногах RB4:RB7 - обслуживаем энкодер
    if (RBIF)
    {encoder(); RBIF=0;}
    }
     
    void podgot (void); // подготовка МК
    void hd44_ini (void); // инициализация HD44780
    void mode_ecran (void);
    void read_all (void); // чтение всех данных
    void mode (void); // работа
     
    // === начало программы
    void main (void){
    unsigned int tmp;
    tmp=0xffff; 
    // задержка для стабилизации напряжений
    while (tmp-->0);
    podgot ();  // подготовка МК
    hd44_ini (); // инициализация HD44780
    read_all (); // чтение всех данных
    mode_ecran ();
    while(1){
    mode (); // работа
    }
    } // конец функции
     
     
    // === подготовка МК
    void podgot (void){
    INTCON = 0;  // чистим регистр прерываний
    TRISA = 0b00000; TRISB = 0b11000000;
    PORTA = 0; PORTB = 0; 
    RBPU = 0; // подтягивающие R (1-откл, 0-вкл)
    }
     
     
    void mode_enc (void); // обработка энкодера
    void mode_key (void); // обработка нажатий
     
    unsigned int freq;   // частота 8700(8800)...10800
    unsigned char chan;  // канал 1...20
     
    void freq_min (void); // уменьшение частоты
    void freq_max (void); // увеличение частоты
    void chan_min (void); // уменьшение № канала
    void chan_max (void); // увеличение № канала
     
    void mode_ecran (void); // отрисовка экрана
    void lm7001_tx (void); // отправка данных в сторону LM
     
    // ==============
    // === *АБОТА ===
    // ==============
    void mode (void){
    mode_enc (); // обработка энкодера
    mode_key (); // обработка нажатий
    }
     
     
    // ==========================
    // === обработка энкодера ===
    // ==========================
    bit enc_napr;  // бит направления: 1-вправо, 0-влево
    // === обработка энкодера
    void mode_enc (void){
    if (enc_napr == 1) freq_min();
    if (enc_napr == 0) freq_max();
    mode_ecran (); // отрисовка экрана
    }
     
     
    // =========================
    // === обработка нажатий ===
    // =========================
    void key (void); // опрос кнопок клавиатуры
    unsigned char key_rez;
    void read_freq (void); // чтение частоты по № канала
    void write_all (void); // запись всех данных
     
    // === обработка нажатий
    void mode_key (void){
    unsigned int tmp;
    key (); // опрос кнопок клавиатуры
    if (key_rez != 0){
    if (key_rez == 1) freq_min ();
    if (key_rez == 2) freq_max ();
    if (key_rez == 3) chan_min ();
    if (key_rez == 4) chan_max ();
    tmp = 0x2fff; 
    // торможение смены частоты
    while (tmp-->0);
    }
    }
     
     
    // ===================================
    // === изменение частоты и каналов === 
    // ===================================
    void freq_min (void){
    freq = freq - 5;
    if (freq < 8720) freq = 10800; // проверка крайнего значения
    mode_ecran (); // отрисовка экрана
    }
     
    void freq_max (void){
    freq = freq + 5;
    if (freq > 10800) freq = 8720; // проверка крайнего значения
    mode_ecran (); // отрисовка экрана
    }
     
    void chan_min (void){
    chan--; 
    if (chan<1) chan=20;  // проверка крайнего значения
    read_freq (); // чтение частоты по № канала
    mode_ecran (); // отрисовка экрана
    }
     
    void chan_max (void){
    chan++; 
    if (chan>20) chan=1; // проверка крайнего значения
    read_freq (); // чтение частоты по № канала
    mode_ecran (); // отрисовка экрана
    }
     
     
    // ========================
    // === отрисовка экрана ===
    // ========================
    void decomp (unsigned int x);
    unsigned char x5, x4, x3, x2, x1; // х0000, х000, х00, х0, х
     
    void mode_ecran (void){
    unsigned int tmp;
    // первая строка
    com; hd44_out(128); dat; // курсор в начало 1-й строки
    decomp (freq);
    hd44_out (6);   // рисуем значек приемник с антеннкой
    decomp (chan);  // раскладываем число № канала
    hd44_out (x2);  // рисуем десятки № канала
    hd44_out (x1);  // рисуем единицы № канала
    hd44_out (' '); // рисуем пробел
    hd44_out ('F'); // рисуем F
    hd44_out ('M'); // рисуем M
    hd44_out (' '); // рисуем пробел
    decomp (freq);  // раскладываем число частоты
    if (x5==0x30)x5=' ';// гашение незначащего нуля
    hd44_out (x5);
    hd44_out (x4);
    hd44_out (x3);
    hd44_out ('.'); // рисуем точку
    hd44_out (x2);
    hd44_out (x1);
    hd44_out ('M'); // рисуем M
    hd44_out ('H'); // рисуем H
    hd44_out ('z'); // рисуем z
     
    // вторая строка
    //tmp = (freq - 8800)/25;
    tmp = (freq - 8720)/26;
    hd44_bar (tmp); // отрисовка уровня "бегунок"
     
    lm7001_tx(); // отправка данных в сторону LM
    write_all (); // запись всех данных
    }
     
     
    // ===========================================
    // === разложение на количество в разрядах ===
    // ===========================================
    void decomp (unsigned int x){
    x5=x4=x3=x2=x1=0x30; // корректировка для знакогенератора
    } // конец функции
     
    // === запись всех данных
    void write_all (void){
    EEPROM_WRITE (0, chan);
    EEPROM_WRITE (chan*2,freq);
    EEPROM_WRITE (chan*2+1,freq);
    }
     
    // === чтение частоты по № канала
    void read_freq (void){
    freq = EEPROM_READ (chan);
    freq = freq + EEPROM_READ(chan);
    // умолчания ошибочного чтения
    if ((freq>10800)|(freq<8720)) freq=10000;
    }
     
    // === чтение всех данных
    void read_all (void){
    chan = EEPROM_READ (0);
    if ((chan>20)|(chan<1)) chan=1;
    read_freq ();
    }
     
     
    // === *НКОДЕ* ===
    #define enc_A RB7 // вывод А, анализ направления вращения
    #define enc_B RB6 // вывод В, анализ факта вращения
     
    bit enc_napr;  // бит направления: 1-вправо, 0-влево
     
    void encoder (void){
    (enc_bit_A != 1) ? enc_napr=1 : enc_napr=0;  // анализ направления
    }
     
     
    // === сопоставление сигнальных линий кнопок
    #define key1 RB0
    #define key2 RB1
    #define key3 RB2
    #define key4 RB3
     
    unsigned char key_rez;
     
    // === опрос кнопок клавиатуры
    void key (void){
    key_rez=0;
    if (key1 == 0) key_rez = 1;
    if (key2 == 0) key_rez = 2;
    if (key3 == 0) key_rez = 3;
    if (key4 == 0) key_rez = 4;
    }
     
     
    // === сопоставление сигнальных линий HD44780
    #define db7 RB2 // линия шины данных DB4
    #define db6 RB3 // линия шины данных DB5
    #define db5 RB1 // линия шины данных DB6
    #define db4 RB0 // линия шины данных DB7
    #define e   RB4 // линия стробирования и синхронизации
    #define rs  RB5 // выбор регистра
     
    // === команды управления HD44780
    #define com rs=0 // выбор регистра команд (IR)
    #define dat rs=1 // выбор регистра данных (DR)
     
     
    // === объявляем функции
    void hd44_ini (void); // инициализация HD44780
    void hd44_out (unsigned char y); // отправка битовых последовательностей
    void hd44_clr (void); // очистка экрана
    void hd44_usr (void); // формирование юзерских символов
     
    // === инициализация HD44780
    void hd44_ini (void)
    {unsigned int tmp;
    tmp = 1363; while (tmp-->0); // рекомендованная пауза 15000 мкс после включения
    e=1; e=0; // стробирование и синхронизация
    tmp = 372; while (tmp-->0); // рекомендованная пауза 4100 
    hd44_usr(); // формируем юзерские символы в ЖКИ
    hd44_clr(); // чистим экран
    }
     
    // === отправка битовых последовательностей в тетрадах
    void hd44_out (unsigned char y)
    {unsigned int tmp = 10;
    byte.byte = y;
    db7 = byte.biit.b7;
    db6 = byte.biit.b6;
    db5 = byte.biit.b5;
    db4 = byte.biit.b4;
    e=1; e=0; // стробирование и синхронизация
    db7 = byte.biit.b3;
    db6 = byte.biit.b2;
    db5 = byte.biit.b1;
    db4 = byte.biit.b0;
    e=1; e=0; // стробирование и синхронизация
    while (tmp-->0); // 100 мкс
    }
     
    // === очистка экрана
    void hd44_clr (void)
    {unsigned int tmp = 181;
    com; hd44_out(1); // собственно очистка
    while (tmp-->0); // экспериментальная пауза 2000 мкс
    com; hd44_out(128); // курсор на начало экрана
    dat; // по-умолчанию отправка данных (не команд)
    }
     
     
    // === формирование юзерских символов палочек | в памяти ЖКИ
    void hd44_usr (void)
    {unsigned char x,y,z;
    hd44_out(0b00000000);
    hd44_out(0b00011111);
    hd44_out(0b00010001);
    hd44_out(0b00010001);
    hd44_out(0b00011111);
    hd44_out(0b00000100);
    hd44_out(0b00001110);
    hd44_out(0b00010101);
    }
     
     
    // === отрисовка уровня "бегунок"
    void hd44_bar (unsigned char z) // y<=80
    {
    hd44_out('-');
    hd44_out(z);
    }
     
     
    #define DA_LM RA2
    #define CL_LM RA3
    #define CE_LM RA0
     
     
    unsigned int  freq_out; // значение для LM7001 
    void lm_strob (void); // стробирование LM7001
     
     
    void lm7001_tx (void){
    unsigned char x;
    // умолчания в слове
    DA_LM = 0; lm_strob(); // T0
    DA_LM = 0; lm_strob(); // T1
    DA_LM = 0; lm_strob(); // B01(pin7) / 8Hz
    DA_LM = 0; lm_strob(); // B02(pin8)
    DA_LM = 0; lm_strob(); // B03(pin9)
    DA_LM = 0; lm_strob(); // TB
    DA_LM = 0; lm_strob(); // R0
    DA_LM = 0; lm_strob(); // R1
    DA_LM = 1; lm_strob(); // R2 50KHz
    DA_LM = 1; lm_strob(); // S (FM=1 AM=0)
    CE_LM = 0; // Chip Enabled = Off
    }
     
    // === стробирование LM7001
    void lm_strob (void){
    asm("nop"); CL_LM=1; 
    asm("nop"); CL_LM=0;
    }


    Thanks for help,
    Sacban.
    Last edited by BradtheRad; 4th April 2020 at 08:46. Reason: Added syntax tags



    •   AltAdvertisement

        
       

  5. #5
    Super Moderator
    Points: 85,242, Level: 71
    Achievements:
    7 years registered
    Awards:
    2nd Helpful Member
    betwixt's Avatar
    Join Date
    Jul 2009
    Location
    Aberdyfi, West Wales, UK
    Posts
    14,025
    Helped
    4669 / 4669
    Points
    85,242
    Level
    71

    Re: What languages or compiler they use this code

    The current version of MPLABX is 5.30, I strongly suggest you update as the older versions had lots of bugs (some still present!). That is the IDE though, the program that does the compiling would be XC8, XC16 or XC32. I'm guessing the code is for a 16F or 18F series MCU so you probably should be using XC8, currently at version 2.10.

    You have not told us what the error message is or what processor is used. Normally, you would not use "#include < pic.h >" but "#include < xc.h >" and set the processor type in the IDE.

    Brian.
    PLEASE - no friends requests or private emails, I simply don't have time to reply to them all.
    It's better to share your questions and answers on Edaboard so we can all benefit from each others experiences.



  6. #6
    Junior Member level 3
    Points: 1,009, Level: 7

    Join Date
    Aug 2015
    Posts
    29
    Helped
    0 / 0
    Points
    1,009
    Level
    7

    Re: What languages or compiler they use this code

    Brian,
    Thank for a reply.
    Well, i will try as you advice to use Mplab XC8 version 2.10.
    I will follow you to use include xc.h.

    Let me check it to compile under XC8 version 2.10.

    Thanks.
    Sacban.

    - - - Updated - - -

    Brian,
    I trying to compile under XC8 Version 2.10, i still getting an error.
    Here is the error.
    Click image for larger version. 

Name:	Error MPLAB XC8 Version 2.10.JPG 
Views:	14 
Size:	229.0 KB 
ID:	158600

    So please, what is the core of a error and what i should i do.

    Thanks.
    Sacban.



  7. #7
    Super Moderator
    Points: 85,242, Level: 71
    Achievements:
    7 years registered
    Awards:
    2nd Helpful Member
    betwixt's Avatar
    Join Date
    Jul 2009
    Location
    Aberdyfi, West Wales, UK
    Posts
    14,025
    Helped
    4669 / 4669
    Points
    85,242
    Level
    71

    Re: What languages or compiler they use this code

    I'm not sure what is wrong and I'm afraid I can't really afford the time to debug it for you at the moment. The statements are perfectly valid in XC8 though so I would guess it is a configuration error somewhere or a missing header file.

    There are some other lines the compiler would produce errors on as well but they are minor and should be easy to fix. For example EEPROM_READ and EEPROM_READ seem to be missing macros but I think there is an equivalent that will work in their place. From my memory, I think it is the same but in lower case but please check in the user guide.

    Brian.
    PLEASE - no friends requests or private emails, I simply don't have time to reply to them all.
    It's better to share your questions and answers on Edaboard so we can all benefit from each others experiences.



    •   AltAdvertisement

        
       

  8. #8
    Advanced Member level 4
    Points: 8,194, Level: 21
    Achievements:
    7 years registered

    Join Date
    Jan 2015
    Posts
    1,145
    Helped
    356 / 356
    Points
    8,194
    Level
    21

    Re: What languages or compiler they use this code

    Don't worry about the red wiggly underlines within the IDE - this is a long standing bug that seems never to be fixed.
    What matters is what the compiler flags as errors.
    I would say that the code came from a very old compiler. Look at the User Guide for the latest version of the compiler you are using (it probably should be XC8 even if that means making a few adjustments to the code).
    Susan



  9. #9
    Junior Member level 2
    Points: 530, Level: 4

    Join Date
    Jan 2018
    Posts
    22
    Helped
    5 / 5
    Points
    530
    Level
    4

    Re: What languages or compiler they use this code

    The code posted was written with a VERY old version of the Hi-Tech C compiler.

    A version in use before Microchip acquired the Hi-Tech company.

    The oldest version I have is: "HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.83" and it is still too new.

    In any case the code will build with XC8 version 1.31 but it will require edits to fix the errors introduced when the original poster cut and pasted this thing together,

    Note that a "union" definition was lost and the symbol RBPU needs to be changed to nRBPU.

    Building with the latest version of XC8 requires other edits.

    - - - Updated - - -



--[[ ]]--