در این پست قصد داریم پروژه ای مخصوص افراد مبتدی و کسانی که تازه کار با میکرو کنترولر pic18f452 را شروع کرده اند قرار دهیم.
در این پروژه ساده و ابتدایی یک LED متصل به یک pic18f452 را روشن و خاموش می نماییم ، این پروژه به زبان سی نوشته شده است.
شما می توانید پی دی اف آموزش روشن و خاموش کردن یک LED را از ابتدا تا انتهاکه با نرم افزار proteus طراحی و با mikroc کد نویسی شده است، از لینک زیر دریافت نمایید:
تشریح کد نویسی در mikroC برای یک led به زبان سی
void main()//شروع برنامه
{
TRISB.F0 = 0;// خروجی می کند PORTB0 یا RB0 پین
while(1) //یک حلقه نامتناهی که در داخل آن ال ئی دی متناوبا خاموش و روشن میشود
{
PORTB.F0 = 1;// رایک کرده و ال ئی دی را روشن میکند RB0 پین
Delay_ms(1000);//یک ثانیه تاخیر
PORTB.F0 = 0; // را صفر کرده و ال ئی دی را خاموش میکند RB0 پین
Delay_ms(1000);
}
}
برنامه ریزی پورتهای ورودی/خروجی میکروکنترلر pic
بسته به میکروکنترلری که استفاده میکنیم، پورتهای ورودی/خروجی میکروکنترلر pic18f452 دارای نامهای A, B, C, D, E میباشد. پایه های این پورتها ممکنه آنالوگ یا دیجیتال باشد. در مد آنالوگ، این پایه ها ورودی هستند و به مدارات آنالوگ به دیجیتال متصل میشود. در مد دیجیتال میتوان این پورتها ورودی یا خروجی تعریف کرد.
رجیستر TRIS مسیر پورت ها را تعیین میکند. برای هرپورت یک ریجیستر TRIS وجود دارد. ۰ کردن یک بیت این رجیستر، پایه پورت متناظرش را خروجی میکندو بر عکس.
PORT ها از طریق یک رجیستر ۸ بیتی یا بیت های پورت قابل دسترسی هستند.مثلا اگر پورتی را بخواهیم به صورت خروجی تعریف شود، باید همه پایه های آن ۱ شود.
تشریح کد نویسی در mikroC برای دو led به زبان سی
void main()
{
TRISB.F0 = 0;
TRISB.F1 = 0;
while(1)
{
PORTB.F0 = 1;
Delay_ms(1000);
PORTB.F0 = 0;
Delay_ms(1000);
PORTB.F1 = 1;
Delay_ms(1000);
PORTB.F1 = 0;
Delay_ms(1000);
}
روش دیگر ///////////////////////////////////////////////////////////////////////////////
int unsigned Counter;
void main() {
trisB = ۰;
while(1)
{
portB = 0x01; // روشن میشود LED
for(Counter = 0; Counter < 2;Counter++)
{
delay_ms(1000);
portB = portB << 1; // بعدی میشودLED یک شیفت به چپ باعث روشن شدن
}
}
}
تشریح کد نویسی در mikroC برای هشت led به زبان سی
void main()
{
TRISB.F0 = 0;
TRISB.F1 = 0;
TRISB.F2 = 0;
TRISB.F3 = 0;
TRISB.F4 = 0;
TRISB.F5 = 0;
TRISB.F6 = 0;
TRISB.F7 = 0;
while(1)
{
PORTB.F0 = 1;
Delay_ms(1000);
PORTB.F0 = 0;
Delay_ms(1000);
PORTB.F1 = 1;
Delay_ms(1000);
PORTB.F1 = 0;
Delay_ms(1000);
PORTB.F2 = 1;
Delay_ms(1000);
PORTB.F2 = 0;
Delay_ms(1000);
PORTB.F3 = 1;
Delay_ms(1000);
PORTB.F3 = 0;
Delay_ms(1000);
PORTB.F4 = 1;
Delay_ms(1000);
PORTB.F4 = 0;
Delay_ms(1000);
PORTB.F5 = 1;
Delay_ms(1000);
PORTB.F5 = 0;
Delay_ms(1000);
PORTB.F6 = 1;
Delay_ms(1000);
PORTB.F6 = 0;
Delay_ms(1000);
PORTB.F7 = 1;
Delay_ms(1000);
PORTB.F7 = 0;
Delay_ms(1000);
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
int unsigned Counter;
void main() {
trisb = 0;
while(1)
{
portb = 0x01;
for(Counter = 0; Counter < 8; Counter++)
{
delay_ms(1000);
portb= portb << 1;
}
}
}