Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
14.07.2011, 22:03
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Для какого компилятора эти программы?
Для какого компилятора эти программы?
PHP код:
|
#include ‹pic.h›
#define serial_error() OERR
#define nostop() FERR
#define serial_fix() {CREN = 0; CREN = 1;}
#define vbod 9600
#define SPBRG_ ((10240000/vbod) -16)/16
#fuse HS,NOWDT,PUT,BROWNOUT,MCLR,NOLVP,NOCPD,NOPROTECT
//__CONFIG(0x03F72);
unsigned char a=0, b=0, e=0;
volatile char c=0, send=0;
long unsigned int counter=0;
interrupt void tajm(void)
{
//----------------------------------------
if (TMR0IF& TMR0IE)
{
T0IF=0;
ADGO=1;
while(ADGO==1)
{
}
a=ADRESL;
b=ADRESH;
GIE=1;
}
//------------------------------------------
if (RCIF && RCIE)
{
if(serial_error()) serial_fix();
if (nostop()) RCREG;
c=RCREG;
send=1;
RCIF=0;
}
}
void main(void)
{
TMR0=0;
OPTION= 0b11010000; //таймер 1:2
T0IE=1; //разрешаем прерывания от таймера
GIE=1;
TRISB=0;
PORTB=200;
ADCON1=0b10001110;
ADCON0=0b10000001;
SPEN=1;//разрешение работы последовательного порта
SYNC =0;//включение асинхронного режима работы
TX9=0; // выбираем 8 - битовую передачу
RX9=0; // выбираем 8 - битовый прием
BRGH =1;//включаем высокоскоростной режим
SPBRG=SPBRG_;// устанавливаем скорость обмена
TXEN=1;// не люблю я ножек в 3 состоянии....
TXIE=0;//запрещаем прерывания от передатчика
CREN =1;
// разрешаем прерывания от приемника
RCIE=1;
TRISD=1;
PORTD=0;
while(1==1)
{
if(send)
{
send=0;
if (c==1)
{
TXREG=10;
}
if (c==2)
{
TXREG=a;
}
if (c==3)
{
TXREG=b;
}
if (c==4)
{
TXREG=c;
}
}
}
}
|
PHP код:
|
#include ‹pic.h›
__CONFIG(0x03f54);
// Определение портов контроллера /
/#define out RA2 /*Выход термостата*/
#define D_PIN RA4 /*сигнал термометра*/
#define D_TRIS TRISA4
#define digit1 RA6 /*индикатор 1*/
#define digit2 RA7 /*индикатор 2*/
#define digit3 RA0 /*индикатор 3*/
#define digit4 RA1 /*индикатор 4*/
#define indic PORTB /*сигменты индикатора*/
//Описание переменных и битов//
char c_indic; //счетчик разрядов индикатора//
bit f_time,r_time; //флаг таймаута = 2,5мс//
static bit convert_t,c_read;
unsigned char ind_data1,ind_data2,ind_data3,ind_data4,data_t,D_E rror,t_data1,t_data2;
signed char data_temp;
unsigned char data_t,time_read;
unsigned int time_out;
// Описание прототипов функций //
void init(void);
void indicacia(void);
void D_Reset(void);
void D_Write(unsigned char);
char D_Read(void);
void delay_5(void);
void delay_10(void);
void delay_60(void);
void delay_420(void);
void delay_480(void);
void data_displ(unsigned char,unsigned char);
char bcd_lcd(char);
void main(void)
{ init();
while(1)
{ CLRWDT();
if(f_time)
{ f_time=0;
indicacia();
if(c_read==1) { di();
t_data1=D_Read();
t_data2=D_Read();
ei();
data_displ(t_data1,t_data2);
r_time=0;
convert_t=0;
c_read=0;
continue;
}
di();
D_Reset();
ei();
if(D_Error==1) { ind_data4=0b10101100;
ind_data3=0b11100100;
ind_data2=0b10100110;
ind_data1=0b00100101;
continue;
}
if(D_Error==2) { ind_data4=0b00101100;
ind_data3=0b11100110;
ind_data2=0b10111110;
ind_data1=0b10111100;
continue;
}
di();
D_Write(0xCC);
ei();
if(convert_t==0) { di();
D_Write(0x44);
ei();
convert_t=1;
time_read=0;
r_time=0;
continue;
}
if((r_time)&(convert_t)&(D_PIN)){ di();
D_Write(0xBE);
ei();
c_read=1;
continue;
}
continue;
}
}
}
void init(void)
{
// Инициализация портов контроллера
PORTA=0x04;
CMCON=0x07;
TRISA=0x38;
PORTB=0xff;
TRISB=0x00;
// Сброс и запрет всех прерываний кроме TMR0
INTCON= 0b00100000;
PIE1 = 0b00000000;
PIR1 = 0b00000000;
// Инициализация частоты генератора
PCON = 0b00001000;
// Инициализация таймера 0
OPTION =0b00000111;
TMR0=236;
GIE=1;
//Инициализация переменных
f_time=0;
c_indic=0x00;
convert_t=r_time=c_read=0;
ind_data1=0b10101100;
ind_data2=0b11111111;
ind_data3=0b00001111;
ind_data4=0b00111100;
}
// Функция вызова прерывания
void interrupt time (void)
{ if((T0IE==1) && (T0IF == 1))
{ T0IF=0;
TMR0=240;
f_time=1;
if(convert_t==1)
{ time_read++;
if(time_read==0)
{
r_time=1;
}
}
}
}
// Динамической индикации
void indicacia(void)
{ digit1=0;
digit2=0;
digit3=0;
digit4=0;
c_indic++;
if(c_indic›3) { c_indic=0;}
switch(c_indic)
{ case 0: indic=ind_data1;
digit1=1;
break;
case 1: indic=ind_data2;
digit2=1;
break;
case 2: indic=ind_data3;
digit3=1;
break;
case 3: indic=ind_data4;
digit4=1;
return;
}
}
// Преобразование данных с датчика в данные индикатора
void data_displ(unsigned char displ_d1,unsigned char displ_d2)
{ static bit znak;
char msd,bsd,dst;
signed int temper,displ_d,lsd;
temper=0;
temper=displ_d2;
temper‹‹=8;
temper|=displ_d1;
if(temper‹0)
{ znak=1;
temper=~temper+1;
}
else
{znak=0;
}
displ_d=temper*10/16;
msd=bsd=dst=0;
lsd=displ_d;
while (lsd›=10)
{ if((lsd-10)›=0)
{ msd++; lsd-=10;
}
if((msd-10)›=0)
{ bsd++;
msd-=10;
}
if((bsd-10)›=0)
{ dst++;
bsd-=10;
}
}
ind_data4=bcd_lcd(lsd);
ind_data3=bcd_lcd(msd);
ind_data2=bcd_lcd(bsd);
ind_data1=bcd_lcd(dst);
if (znak) {ind_data1=0b11101111;}
if(dst==0){if (bsd==0){if(msd==0){if(lsd==0){ind_data1=ind_data2 =ind_data3=0b11111111;}
else{if(znak){ind_data3=0b11101111;}else{ind_data3 =0b11111111;}
ind_data1=ind_data2=0b11111111;
}
}
else {if(znak){ind_data2=0b11101111;}else{ind_data2=0b1 1111111;}
ind_data1=0b11111111;
}
}
else{if(znak){ind_data1=0b11101111;}else{ind_data1 =0b11111111;}
}
}
if((dst==0)&(bsd==0)&(msd==0)&(lsd!=0)){ind_data3=0b00010000;}
else {ind_data3&=0b11111011;}
}
//************************************************** *********
char bcd_lcd(char d_lcd)
{
switch(d_lcd)
{ case 0: return 0b00010100;
case 1: return 0b11010111;
case 2: return 0b01001100;
case 3: return 0b01000101;
case 4: return 0b10000111;
case 5: return 0b00100101;
case 6: return 0b00100100;
case 7: return 0b01010111;
case 8: return 0b00000100;
case 9: return 0b00000101;
}
return 0b00000000;
}
bit D_Presence;
bit D_ShortCircuit;
bit D_Data;
void D_Reset(void)
{
D_Error=0;
D_TRIS=1;
D_PIN=0;
D_TRIS=0;
delay_480();
D_TRIS=1;
delay_60();
D_Presence=D_PIN;
delay_420();
D_ShortCircuit=D_PIN;
if(D_ShortCircuit==0)
{
D_Error=1;
}
if(D_Presence==1)
{
D_Error+=2;
}
delay_10();
}
void D_Write(unsigned char Data)
{
char count=8;
for(;count›0;count--)
{
D_Data= Data & 0x01;
D_PIN=0;
D_TRIS=0;
NOP();
NOP();
NOP();
NOP();
D_TRIS=D_Data;
delay_60();
D_TRIS=1;
delay_10();
Data=Data››1;
}
delay_10();
}
char D_Read(void)
{
char count=8,data=0;
for(;count›0;count--)
{
D_PIN=0;
D_TRIS=0;
NOP();
NOP();
NOP();
D_TRIS=1;
delay_10();
D_Data=D_PIN;
delay_60();
data = data ›› 1;
if(D_Data==1)
{
data +=0x80;
}
delay_10();
}
delay_10();
return(data);
}
void delay_10(void)
{ char i=2;
while (--i!=0){}
}
void delay_60(void)
{char i=18;
while (--i!=0){}
}
void delay_420(void)
{char i=138;
while (--i!=0){}
}
void delay_480(void)
{char i=158;
while (--i!=0){}
}
|
Первую откомпилировал через MPLAB IDE v8.56 с настройкой на C:\Program Files\HI-TECH Software\PICC\9.71a\bin\picc.exe (что это??? CCS-PICC или C30).
А вторая наверно на mikroC написана?
Какой из компиляторов С для PIC посоветуете?
Вложения:
|
1.rar (2.8 Кб, 47 просмотров) |
Последний раз редактировалось Slava-martyn; 14.07.2011 в 22:07.
|
|
|
Сказали "Спасибо" Slava-martyn
|
|
|
14.07.2011, 22:09
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Для какого компилятора эти программы?
Slava-martyn, Обе Hi-Tech Picc.
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
14.07.2011, 22:10
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Для какого компилятора эти программы?
А по нему учебники есть?
И что вот с этим делать? (для второго файла)
(1273) Omniscient Code Generation not available in Lite mode (warning)
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.71a
Copyright (C) 2010 Microchip Technology Inc.
Error [939] ; . no file arguments
Последний раз редактировалось Slava-martyn; 14.07.2011 в 22:26.
|
|
|
Сказали "Спасибо" Slava-martyn
|
|
|
14.07.2011, 22:18
|
|
Гражданин KAZUS.RU
Регистрация: 17.08.2008
Сообщений: 770
Сказал спасибо: 52
Сказали Спасибо 450 раз(а) в 202 сообщении(ях)
|
Re: Для какого компилятора эти программы?
Сообщение от Slava-martyn
|
А по нему учебники есть?
|
Практически нет.Только HELP. На русском была только брошюра.
Последний раз редактировалось XoDoK11; 14.07.2011 в 22:32.
|
|
|
Сказали "Спасибо" XoDoK11
|
|
|
14.07.2011, 22:19
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Для какого компилятора эти программы?
Сообщение от Slava-martyn
|
А по нему учебники есть?
|
Учебник по чему ?????????
По языку С ???
По компилятору есть мануал в папке установки.
Но судя по вопросу вам нужно расжеванное с картинками , наподобие
мануала от микрос ???
Он вам не нужен . Читайте классиков . Штудируйте чужие примеры .
Все вопросы отпадут сами собой...
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
14.07.2011, 22:27
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Для какого компилятора эти программы?
По C всё более-мене понятно.
А что вот с этим делать? (для второго файла)
(1273) Omniscient Code Generation not available in Lite mode (warning)
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.71a
Copyright (C) 2010 Microchip Technology Inc.
Error [939] ; . no file arguments
Я так понял надо Hi-Tech Picc нормальный искать, а там всё что надо будет на английском.
Последний раз редактировалось Slava-martyn; 14.07.2011 в 22:37.
|
|
|
Сказали "Спасибо" Slava-martyn
|
|
|
14.07.2011, 22:35
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Для какого компилятора эти программы?
Сообщение от Slava-martyn
|
in Lite mode
|
Надо начинать учить язык ( английский) .
У вас лайт ( облегченная) версия компилятора .
Так же есть STD и PRO ...
__________________
Осторожно , злой кот
|
|
|
Сказали "Спасибо" dosikus
|
|
|
14.07.2011, 22:36
|
|
Гражданин KAZUS.RU
Регистрация: 17.08.2008
Сообщений: 770
Сказал спасибо: 52
Сказали Спасибо 450 раз(а) в 202 сообщении(ях)
|
Re: Для какого компилятора эти программы?
Сообщение от Slava-martyn
|
А что вот с этим делать? (для второго файла)
(1273) Omniscient Code Generation not available in Lite mode (warning)
|
Найти PRO-версию.
|
|
|
Сказали "Спасибо" XoDoK11
|
|
|
14.07.2011, 23:42
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Для какого компилятора эти программы?
Сообщение от Slava-martyn
|
(1273) Omniscient Code Generation not available in Lite mode (warning)
|
На это можно забить. Он просто сообщает, что недоступна мегаоптимизация.
Цитата:
|
Error [939] ; . no file arguments
|
Вы си-файл в проект не добавили (меню "Projec/Add files to project...").
|
|
|
Эти 2 пользователя(ей) сказали Спасибо testerplus за это сообщение:
|
|
|
15.07.2011, 00:29
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Для какого компилятора эти программы?
Вот теперь добавил, только что-то всё равно не так.
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.70
Copyright (C) 2009 Microchip Technology Inc.
Serial number: **** (PRO)
Warning [750] F:\PICprog\DSPIC\1.c; 236. constant operand to || or &&
Error [712] F:\PICprog\DSPIC\1.c; 48. can't generate code for this expression
********** Build failed! **********
48 -===›
if((r_time)&(convert_t)&(D_PIN)){ di();
D_Write(0xBE);
ei();
c_read=1;
continue;
}
236 -===›
D_Data= Data & 0x01;
Последний раз редактировалось Slava-martyn; 15.07.2011 в 00:32.
|
|
|
Сказали "Спасибо" Slava-martyn
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:12.
|
|