رفتن به مطلب
ایران چیپ
amir_yazdi

آموزش pic ccs

پست های پیشنهاد شده

سلام

 

آموزش کامپایلر ccs بصورت کامل و قدم به قدم

 

 

ساخت برنامه جدید

 

انتخاب آیکون File Menu

filemenu.jpg

 

و انتخاب گزینه NEW

new.jpg

 

و گزینه Source Files

sourcefiles.jpg

 

و انتخاب نام فایل

 

brow.jpg

 

 

می توانیم فایل جدیدی بسازیم

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

وارد کردن اطلاعات Config

 

اولین دستوری که باید وارد برنامه بشه مشخص کردن نوع میکرو که به دو شکل میشه اینکارو کرد

 

1- استفاده از دستور INCLUDE

 

#include 

 

2- استفاده از دستور DEVICE

 

#DEVICE PIC16F877A

 

بعد از مشخص کردن نوع میکرو باید دستورات Chip Option و Compilation mode selection کنیم که فعلا به آن نیاز نداریم و در قسمت های بعد که مورد نیاز بود توضیح میدم (این دستورات با استفاده از دستور DEVICE مقدار دهی میشوند)

 

دستور بعدی FUSES

 

با استفاده از این دستور فیوزبیت ها را تنظیم میکنیم

 

مثال:

#fuses HS,NOWDT,NOPROTECT,NOLVP

 

HS نوع اسیلاتور (LP, XT, HS, RC و .......)

 

NOWDT روشن و خاموش کردن تایمر سگ نگهبان (WDT, NOWDT)

 

NOPROTECT حفاظت در برابر کپی رایت (PROTECT, NOPROTECT)

 

NOLVP پروگرام در حالت معمولی یا کم مصرف (LVP,NOLVP)

 

نکته:فیوز بیت های بالا فقط تعدادی مثال میباشد و تمام مد ها نیست و الزامی هم نیست و میتوان از داخل پروگرامر هم تنظیم کرد.

 

دستور بعدی USE DELAY

 

این دستور برای تنظیم دستور ها و قسمت هایی از میکرو که نیاز به TIMEING دارند میباشد مثل قسمت های SPI , UART و دستور های delay_ms و delay_us که برای ایجاد تاخیر می باشند.

 

مثال

#use delay(clock=20MHZ)

 

بعد از تنظیم دستورات بالا که اصولا در هر برنامه ایی مورد نیاز است وارد قسمت اصلی برنامه میشویم

 

البته Config های بسیاری وجود داره که در طول برنامه مورده نیازه که هر کدام در قسمت مربوطه توضیح داده میشه

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام آقاي مدير :D

 

آقا اجازه !

راستش توي AVR ابتداي برنامه بايست رجيستر هاي ماژول هاي مورد استفاده رو مقدار دهي آغازين مي كرديم ، اينجا همچين چيزي نداريم ؟

من يه برنامه ساده نوشتم با استفاده از سمپل خود كامپايلر كه بياد يه LEDرو روشن و خاموش كنه .

LED روشن ميشه ولي ديگه خاموش نميشه و من فكر مي كنم برنامه كار نمي كنه!

اصلا هم مطمئن نيستم فيوز ها رو درست پروگرم كرده باشم!

:confused:

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام آقای کاربر جدید تالار:D

 

به به از این طرف ها آقا صالح راه گم کردین

 

راستش توي AVR ابتداي برنامه بايست رجيستر هاي ماژول هاي مورد استفاده رو مقدار دهي آغازين مي كرديم ، اينجا همچين چيزي نداريم ؟

چرا ولی بستگی به برنامه ات داره لزوما نباید باشه حالا توضیح میدم;) cook

 

این برنامه را تست کن پین 7 از پورت B باید چشمک بزنه

 

#include 

#FUSES NOWDT                  
#FUSES HS 
#FUSES NOBROWNOUT              
#FUSES NOLVP                   


#use delay(clock=20000000)




void main()
{


  while(TRUE)
  {

  output_high(pin_b7);
     delay_ms(1000);
  output_low(pin_b7);
     delay_ms(1000);

  }


}

 

اینم کامپایل شده اش با کریستال 20 مگاهرتز (البته کریستالش زیاد فرق نمیکنه فقط سرعت چشمک زدنش کمو زیاد میشه) مثلا اگه 1 مگاهرتز بزاری بجایه 1 ثانیه خاموش و 1 ثانیه روشن میشه 20 ثانیه روشن و 20 تا هم خاموش:D

 

 

یاحق

blink.hex

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

صالح جان

 

من فراموش کردم پروگرامرت lv بود یادت نره دستی فیوزشو تنظیم کنی وگرنه پروگرام نمیشه یا درست پروگرام نمیشه

 

البته میتونی تو برنامه

 

اینو

 

[color=#333333]#fuses nolvp[/color]

 

به اینهم

 

[color=#333333]#fuses lvp[/color]

 

تغییر بدهی

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

برای زبان سی کامپایلر میکرو سی چطوره ؟ کار کردید باهاش ؟

من برای ای وی آر یکم باهاش کار کردم بدک نبود

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

عادل جان

 

با میکرو سی کار کردم ولی فقط دستوراتش بر پایه سی هست و مثل CCS نمیشه باهاش مانور داد

 

توی ccs کتابخانه های خود سی هم وارد کردم و کار کرد و لی میکرو سی یه جورایی فقط با از پیش تعریف شده کار میکنه البته میشه وارد کرد ولی ارور زیاد میده

 

کلا کسی که با میکرو کار نکرده باشه و فقط با زبان سی کار کرده باشه میتونه به راحتی با CCS کار کنه

 

اگه اشتباه میکنم بگید ;):p

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

صالح جان ممنون بابت فایل آموزشیتFlower

 

شرمنده یه چند وقتی نبودم:(

 

خوب میرم سراغ آموزش

 

بعد از

وارد کردن اطلاعات Config

 

نوبت به تابع نویسی میرسه که تابع اصلی هر برنامه تابع main میباشد و در صورتی که تابع یا تابع های دیگری در برنامه وجود داشته باشد تابع main باید در انتها قرار گیرد یا تابع های دیگر یک بار قبل از آن فراخوانی شود

 

void main(){

دستورات در این قسمت نوشته میشه

}

 

دستورات باید بین این دو آکولاد {} نوشته شود

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلام .

استاد عزیز خیلی خوبه ، میشه آموزش رو ادامه بدین ؟

توی چشمک زن ، فکر کنم منظور آقا صالح با استفاده از وقفه و سرریز باشه ، ایشون قبل از هر چیز اول اینکارو میکنن واسه صحت مدار .

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

امیرجان به نظر من در محیط MPLAB و با کمپایلر high-tech برای میکروهای سری 16 و کامپایلر c18 برای سری 18 که مربوط به خود شرکت میکروچیپ هست آموزش ها ادامه پیدا کنه البته برای بعضی کامپایلرها مثل c18 یا xc18 سخت بشه نسخه پروفشنال رایگان پیدا کرد ولی ارزشش رو داره با برنامه هایی مثل micro c یا ccs که اومدن برای اینکه کاربر راحت باشه هدرهای زیادی رو تعریف کردن که هم یوزر رو تنبل بار میاره و نه آدم میتونه به راحتی به کد تولید شده اعتماد کنه!

 

البته در حد نظر هست . ببخشید جسارت کردیم:(

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
آقای یزدی آموزش هاتون را ادامه نمی دید؟;)

یکم پیشرفته ترflowerflower

 

سلام

دوست عزیز

 

متاسفانه بخاطر فوت پدر عزیزم و اتفاقاتی که در این مدت افتاد و بشدت مرا درگیر کرده بود نتونستم ادامه بدم ولی حتما آموزش را ادامه میدم

 

دو مورد فرمایش رامین عزیز اگر درخواستی در مورد آموزش mplab باشه به دیده منت آموزش اون هم بصورت جداگانه انجام میدم

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

دستور شرطی if

 

دستور if شرط داخل پرانتز را چک میکند اگر شرط صحیح بود (true) خط بعد از دستور و قبل از ( ; ) را انجام میدهد در غیر اینصورت از آن رد میشود و در صورت وجود دستور else دستور بعد از آن را انجام میدهد

 

حالت اول

 


if(a==1)

b =2;

 

حالت دوم

 

 


if(a==1)

b=2;

else

b=3;

 

حالت سوم

 

 


if(a==1)

b=2;

else if(a==2)

b=3;

else if(a==3)

b=4;

 

نکته: برای انجام چند دستور داخل شرط از {} استفاده میکنیم

 


if(a==1)
{

b=1;
c=2;
d=3;
}

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

یه پیشنهاد

خدمتتون تسلیت عرض می کنم

به نظرم اگه برید سراغ موضوعات اصلی بهتره باشه مثلا آموزش کار با ( i2c یا spi و...) چون کسانی که میکرو کار می کنند یه حداقل آشنایی با زبان c دارند.

با تشکر از شما

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
یه پیشنهاد

خدمتتون تسلیت عرض می کنم

به نظرم اگه برید سراغ موضوعات اصلی بهتره باشه مثلا آموزش کار با ( i2c یا spi و...) چون کسانی که میکرو کار می کنند یه حداقل آشنایی با زبان c دارند.

با تشکر از شما

سلام و ممنون

برای اینکه آموزش کامل باشه با همین روند پیش میرم ولی سعی میکنم تو همین یکی دو روز به پروتکل های اصلی برسم

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

دستور شرطی

while

 

یک حلقه ایجاد میکند و تا زمانی که شرط داخل پرانتز صحیح (TRUE) باشد دستور بعد از پرانتز را انجام میدهد

 

 


while(A==1)
B=B+1;

 

نکته: برای انجام چند دستور داخل شرط از {} استفاده میکنیم

 


while(A==1)
{
B=B+1;
C=C+1;
}

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

دستور شرطی

do while

 

یک حلقه ایجاد میکند و یک بار حتی در صورتی که شرط صحیح نباشد دستورات را اجرا میکند . تا زمانی که شرط داخل پرانتز صحیح (TRUE) باشد دستور بعد از پرانتز را انجام میدهد

 

 

do
B = 2;
while (A == 1);


 

نکته: برای انجام چند دستور داخل شرط از {} استفاده میکنیم

 

do
{
B = 2;
c = 3;
}
while (A == 1);

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

دستور شرطی FOR

 

برای تکرار یک یا چند دستور به تعداد دفعات مشخص بکار میرود

 

for (A=0;AB = A;

 

نکته: برای انجام چند دستور داخل شرط از {} استفاده میکنیم

 

for (A=0;A{
B = A;
C = B+1;
}

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

دستور شرطی switch

 

مقدار متغییر داخل پرانتز را گرفته و با مورد های تعریف شده مقایسه میکند و دستور مقدار برابر را اجرا میکند

 

نکته :

میتوان بینهایت CASE ایجاد کرد (موردهای متفاوت)

 

بعد از دستور آخر هر CASE باید از دستور BREAK برای خروج از حلقه استفاده شود

 

مورد DEFAULT را در آخر قرار میدهیم که در صورتی که شرط با هیچ کدام از CASE های تعریف شده برابر نبود مقدار DEFAULT برای ما برگردانده شود

 


switch (A) {


case 0:B=1;

break;


case 1:B=2;


break;


default:B=255;

break;

   }


 

یا حق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

دستور RETURN

 

مقدار مورد نظر ما را به متغییر برمیگرداند و همزمان از حلقه خارج می شود

 

در مثال زیر مقدار A برابر با 10 میشود

 

int test()
{
B = 10;


return b;
}


void main()
{


A = test();


}

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

برچسب گذاری یا لیبل

 

برچسب گذاری بوسیله دونقطه (COLON) انجام میشود ( : )

 

و به وسیله دستور GOTO به برچست یا لیبل مورد نظر میرویم

 


label1:

A = 1;


goto label1;

 

یا حق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

دستور BREAK

 

در هرجا بکار رود از حلقه (LOOP) یا سویچ (SWITCH) مورد نظر در همانجا بدون انجام دستورات بعد از آن خارج میشود

 

در مثال زیر A و B مقدار میگیرند ولی C و D مقدار نمیگیرند و مقدار قبلی خود را حفظ میکنند

 

VOID test()
{
A= 0;


B= 1;


BREAK;


C= 2;


D= 3;
}

 

دستور continue

 

این دستور برای از سر گیری حلقه بکار برده میشود

 

در مثال زیر تا زمانی که مقدار A به 10 نرسد حلقه به ابتدا برمیگردد و دوباره دستورات را اجرا میکند

 

VOID test()
{
A++;


B= 1;


IF (A continue;


C= 2;


D= 3;
}

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

تعریف متغییر

 

انواع متعددی متغیر , ثابت و داده وجود داره که من برای شروع ساده ترین و کاربردی ترین آموزش میدم و در آموزش های بعدی مدل های مختلف اونو در مثال ها آموزش میدم

 

انوع متغیر در ccs

 

متغیر های مشترک

int1

int8

int16

int32

float (اعشاری)

 

متغیر های سری 24 بیتی به بالا

 

int48

int64

 


int1 data;


int8 a,b,c,d;


int16 e;


int32 f,g;


float h,i;

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

 

استفاده از پین ها و پورت ها بعنوان خروجی و ورودی

 

در کامپایلر ccs در حالت کلی نیازی به تعریف خروجی ها و ورودی ها در ابتدای برنامه نیست و خود کامپایلر این کار را انجام میدهد البته دستوراتی برای این کار وجود دارد که بعدا به برسی آنها میپردازیم

 

دستور output_high(pin) مقدار پین مورد نظر را یک (high) میکند

 

output_high(PIN_B0);

 

 

دستور output_low(pin) مقدار پین مورد نظر را صفر (low) میکند

 

output_low(PIN_B0);

 

 

 

دستور output_x (value) برای مقدار دهی به یک پورت استفاده میشود

 

OUTPUT_B(0xf0);

 

 

دستور output_bit (pin, value) مقدار پین مورد نظر را از متغیر (value) میگیرد

نکته:متغیر باید 1 بیتی باشد در غیر اینصورت مقدار بیت اول متغیر را فقط در نظر میگیرد

 

output_bit( PIN_B0, 0);

 

دستور output_float (pin) پین مورد نظر را در حالت open collector خروجی میکند

 

نکته:در این حالت باید پایه با مقاومت پول اپ (pull up) شود

 

output_float(pin_B0);

 

دستور input (pin) مقدار پین مورد نظر را بعنوان ورودی میگیرد

نکته:در صورتی که خارج از شرط استفاده شود و برای مقدار دهی متغیر باشد متغیر باید 1 بیتی باشد در غیر اینصورت مقدار بیت اول متغیر را تغییر میدهد

 

A=input(PIN_B1);

 

 

دستور input_state (pin) حالت پین را از لحاظ HIGH یا LOW برمیگرداند

نکته:در صورتی که خارج از شرط استفاده شود و برای مقدار دهی متغیر باشد متغیر باید 1 بیتی باشد در غیر اینصورت مقدار بیت اول متغیر را تغییر میدهد

 

A = input_state (pin_B0);

 

دستور input_change_x () حالت پورت را چک میکند و با بار قبل که همین دستور را اجرا کرده باشید مقایسه میکند در صورتی که مقدار پین های پورت تغییر کرده باشد عدد 1 (TRUE) و اگر تغییر نکرده باشد عدد 0 (FALSE) را برمیگرداند

نکته:در صورتی که خارج از شرط استفاده شود و برای مقدار دهی متغیر باشد متغیر باید 1 بیتی باشد در غیر اینصورت مقدار بیت اول متغیر را تغییر میدهد

 

A = input_change_b( );

 

یاحق

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .
توجه: مطلب ارسالی شما پس از تایید مدیریت برای همه قابل رویت خواهد بود.

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


×
×
  • اضافه کردن...