Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Въпрос от MikroC
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1614
Страница 1 от 3

Автор:  Ugeen [ Чет Яну 19, 2006 1:52 pm ]
Заглавие:  Въпрос от MikroC

Здравейте,реших да се позанимавам малко с MikroC но от описанието му така и не разбрах какъв е синтаксиса за дефиниране на bit от регистър или порт.Изпробвах познати варианти от други С -та, но не се възприемат.Някой знае ли как става това.Предварително благодаря.

Автор:  Nikola Kirov [ Чет Яну 19, 2006 2:15 pm ]
Заглавие: 

Aми bit или bool по принцип не е по стандат в C. Има го в по стандарт в C++. Дори и сериозни компилатори като IAR не го включват в C бибиотеките си. Но там е като отделна библиотека и можеш да си го включиш в проекта и да си работиш с този тип.
Ако деиствително го няма можеш да си напишеш библиотека или да правиш достъпа до отделните битове така

дефинираш си тип
typedef union
{
unsigned char byte;
struct
{
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
}bits;
} bitstr;

правиш си променлива
bitstr Variable

Variable.bits.b6 = 0; /// bit 6 = 0;
if ( Variable.bits.b5 ) { тяло } /// тялото се изпълнява ако b5 е единица

а може и директно да си промениш стоиноста на целия баит в които се намитат битовете
Variable.byte = 0;

Автор:  evc [ Чет Яну 19, 2006 3:00 pm ]
Заглавие: 

И още един по-прост начин (не е много С, по скоро заобиколка ;) ):
Дефинираш си
const unsigned short MYBIT = 5 //интересува те 5-ти бит
и можеш да се обръщаш към него така:
PORTB.MYBIT=1;//сетва ти 5-ти бит на PORTB

Но това можеш да използваш само за прегледност и не бива
да забравяш, че MYBIT е само една константа = 5.
И например
PORTC.MYBIT=1;
ще ти сетне не твоя си MYBIT на PORTB, а просто 5-ти бит
на PORTC.

А иначе към всеки бит на променлива в MikroC можеш да се обърнеш така

VARIABLE.FX=1; // Х е номера на бита, който искаш да сетнеш

Автор:  rumen [ Чет Яну 19, 2006 3:37 pm ]
Заглавие: 

Device = 16F877
XTAL = 4

LCD_DTPIN = PORTD.4
LCD_RSPIN = PORTE.0
LCD_ENPIN = PORTE.1
LCD_INTERFACE = 4 ' 4-bit Interface
LCD_LINES = 2
LCD_TYPE = 0

' Define ADC parameters
ADIN_RES = 10 ' 10-bit result required
ADIN_TAD = FRC ' RC OSC chosen
ADIN_STIME = 50 ' Allow 50us sample time

Dim ADVAL As Word ' Create ADVAL to store result

TRISA = %11111111 ' Set PORTA to all input
ADCON1 = %10000010 ' Set PORTA analog and right justify result
DelayMS 500 ' Wait .5 second
Cls ' Clear LCD

While 1 = 1 ' Create an infinite loop
ADVAL = ADIn 0 ' Read channel 0 to adval (0-1023)
ADVAL = (ADVAL */ 500) >> 2 ' equates to: (adval * 500)/1024
Print At 1,1,"DC Volts= ",Dec (ADVAL/100),".", DEC2 ADVAL," " ' Display the decimal value
DelayMS 100 ' Wait .1 second
Wend ' Do it forever




Гледам че се разбрахте за С-то и искам да ви покажа как изглежда програма "Волтметър" на Протон.
Може ли някой да ми покаже как ще изглежда същата програма на С.

Автор:  evc [ Чет Яну 19, 2006 5:10 pm ]
Заглавие: 

Примерно така (използвани са библиотеките на MikroC):

void main(void){
char txt[6];
TRISA=0xFF;
ADCON1=0x82;
delay_ms(500);
lcd_init(&PORTB);//Ако LCD-то е на PORTB
while(1){
ADVAL=(Adc_Read(1)*500)>>2;//Ако се чете канал 1 на АЦП-то
Lcd_Out(1,1,"DC Volts=");
IntToStr(Bcd2Dec16(ADVAL/100),txt);
Lcd_Out_Cp(&txt1);
Lcd_Out_Cp(".");
IntToStr(Bcd2Dec16(ADVAL),txt);
if strlen(&txt)>=2 txt+=strlen(&txt)-2;
Lcd_Out_Cp(&txt);
Lcd_Out_Cp(" ");
}
}

Защо ти беше това сравнение?
Нали няма да си мерим езиците за програмиране? :wink:

Автор:  rumen [ Чет Яну 19, 2006 6:27 pm ]
Заглавие: 

Напротив точно си ги мерим.
Не е самоцелно.
Осебен съм от манията за повишаване на ефективноста на труда.
Мисля че повисоката ефективнос е това което ще ме дръпне от батака от полу-готовите проекти.

Автор:  Nikola Kirov [ Чет Яну 19, 2006 6:59 pm ]
Заглавие: 

Ами ако искаш ефективност инвестираи време да изучиш C a по нататък и C++. Вярно че като за начало е труден за усвояване но като навлезнеш малко нещата започват да се навързват и започваш да напредваш по бързо.
Този Proton е играчка любителска работа.

Автор:  rumen [ Чет Яну 19, 2006 7:18 pm ]
Заглавие: 

Този извод искам сам да си го направя.
Затова са необходими конкретни примерчета.
Ще ги напускам да видя какъв код генерират. За колко време се изпалняват. И т.н.
Намеренията сами да подходя методично.

А що се относя за субективните оценки трудност разбираемост определено Бейсика е по лесен. Което е явно предимство.
Все още не съм разбрал какво повече дава С -то за сметка на по голямата си трудност.

Дали не е по-разпостранено защото по лесно се намират кракнати компилатори?

Какво по хубаво място от този форум да избистрим въпроса.

Автор:  Nikola Kirov [ Чет Яну 19, 2006 7:22 pm ]
Заглавие: 

](*,) продължавай така,ако не друго ще ти стане по здрава главата

Автор:  Ugeen [ Чет Яну 19, 2006 7:42 pm ]
Заглавие: 

С-то е много яко,пробвах няколко С-та и наистина могат да се правят доста добри проекти.Съгласен съм че е труден език.За мен предимството му е че не генерира тромав код ,което помага при ограничени ресурси по отношение на памет и бързодействие.Все пак не е лошо да се попреглежда какъв асемблер е генерирало .Колкото до това Микро С ми направи впечатление ,че ако се ползват готови библиотеки не се знае след използването им в какво състояние оставят портовете и ако на същия порт има закачено друго е възможно да има проблеми.Така яе внимавайте с готовите и полуготовите неща.javascript:emoticon(':wink:')
Wink

Автор:  rumen [ Чет Яну 19, 2006 9:34 pm ]
Заглавие: 

Да продължим с меренето.

Горната програма ми генерира със протона 381 реда на асемблер със 21 променливи.
Като времето за изпълнение до първия цикъл е 0.660369s.


Със пусната оптимизация 367 реда 21 променливи. Време на изпълнение до първия цикъл 0.6600356s.

Обръщам внимание че времето за изпълнение в основната си част е заложено в алгоритама

Автор:  [ Чет Яну 19, 2006 11:16 pm ]
Заглавие: 

rumen написа:
Все още не съм разбрал какво повече дава С -то за сметка на по голямата си трудност. Дали не е по-разпостранено защото по лесно се намират кракнати компилатори? Какво по хубаво място от този форум да избистрим въпроса.


C-то е процедурно ориентиран език от високо ниво с възможностите на асемблер, с много добра преносимост за различните платформи, с разработени от години компилатори за почти всички платформи, с ясен и чист синтаксис, с много налични сорсове от години, които периодично се адаптират за нови платформи и с милиони почитатели по цял свят.

На C-то най му харесвам възможността да слеза на ниско ниво и да оглеждам дърветата отблизо и същевременно когато реша да се издигна над гората и да огледам отвисоко проекта. Развръзва ръцете на програмиста и не му налага ограничения като другите езици. Например: няма проверки за обхват на променливите, няма проверки за освобождаване на динамичната памет, при много езици няма union и др. Такива проверки са оставени да се правят или не по усмотрение на програмиста. Но това е нож с 2 остриета, защото прави езика много труден за начинаещите програмисти.

Труден не да се научи, а труден да започне да се прилага на практика. Ако преди това човек не е изучавал друг език се справя по-лесно с C-то, отколкото ако вече знаеш друг език. C-то научава неусетно програмиста на системно и добро програмиране.

Естествено продължение на C се явява C++. Още по естествено се появява следващия език от C/C++ семейството - Java-та. Лично аз, имам едно голямо НО за Java: Java-та ще стане много по-добър и използваем език, ако започнат да се правят и компилатори за него, а не както досега Sun да се занимават с глупости от рода на виртуални машин, garbage колектори и други недомислици. Изтъква се , че аджиба е по-лесно да се направи виртуална машина за Java, отколкото компилатор, което естествено не е вярно. И смелото ми предположение, че ще се появи съвсем скоро 4 език от фамилията C/C++/Java, който ще коригира недомислиците на Java-та и Sun.

И не на последно място, операционните системи Unix/DOS/Windows/Linux/QNX/OS2 и т.н. са написани на C. Не на Паскал, Фортран, АДА, Кобол, Алгол, Протон, Бейсик, Лисп, Форт ... Не че не може и с тях да се напише, обаче ще бъдат е**ти и операционите системи. Или с други думи, за най-важната програма на един ПК, операционната система, е бил избран най-добрия език за системно програмиране.

Автор:  Mozfet [ Пет Яну 20, 2006 12:03 am ]
Заглавие: 

Цитат:
...с ясен и чист синтаксис...

Дали :roll:

Код:
  for(;P("\n").R-;P("|"))for(e=3DC;e-; P("_"+(*u++/%2))P("| "+(*u/4)%2);

Автор:  [ Пет Яну 20, 2006 12:20 am ]
Заглавие: 

Mozfet написа:
Цитат:
...с ясен и чист синтаксис...

Дали :roll:

Код:
  for(;P("\n").R-;P("|"))for(e=3DC;e-; P("_"+(*u++/%2))P("| "+(*u/4)%2);


Колега Mozfet, това дето си го постнал се опитай да го компилираш :D Ако е въпроса да напишеш пълна безмислица човек може да се справи с тази задача и без да познава езици за програмиране.
Да се "вживеем" в ролята на C компилатор и да видим 1-вата грешка
Цитат:
for(;P("\n").R-;P("|"))

P e функция, която приема параметър char или int. Не става ясно, защото го няма прототипа. Съчетанието P("\n").R- е безмислица. Хем викаш функция, хем използваш оператора за принаджленост към структура или обединение "." ( точка ), който оператор не може да се прилага върху функция. Какво адресираш на функцията, локален параметър ли ? По-добре постни едно обяснение какво си надраскал с левия крак :D , докато си чел сутрешния вестник, ако можеш разбира се .

Автор:  rumen [ Пет Яну 20, 2006 12:22 am ]
Заглавие: 

Хайде да направим едно сравнение между любимите ни компилатори.
Който има желание да загуби 10 мин. в компилиране на ВОЛТМЕРА на предпочитаната си среда.
Нека пусне резултатите.
Очертава се да е много интересно.

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/