Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

What languages or compiler they use this code

Status
Not open for further replies.

sacban

Junior Member level 3
Joined
Aug 20, 2015
Messages
29
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
412
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.
 

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

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 a moderator:

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.
 

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.
Error MPLAB XC8 Version 2.10.JPG

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

Thanks.
Sacban.
 

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.
 

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
 

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 - - -
 

Attachments

  • Image2.jpg
    Image2.jpg
    137.4 KB · Views: 123

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top