به نام خدا : تو این مطلب میخوام یه پروژه قرار بدم که یه led رو با یه دکمه روشن خاموش میکنیم و تو این پروژه دکمه به پایه وقفه خارجی lpc1768 وصل هستش.
پروژه ساده کنترل led با دکمه و وقفه خارجی lpc1768
شماتیک پروژه
کد پروژه
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <lpc17xx.h> int state = 0; void EINT3_IRQHandler() { LPC_GPIOINT -> IO0IntClr = 2; state = !state; } int main() { LPC_PINCON -> PINSEL0 = 0x00000000; LPC_GPIO0 -> FIODIR = 0x0001; LPC_GPIOINT -> IO0IntClr = 2; LPC_GPIOINT -> IO0IntEnR = 2; NVIC_EnableIRQ(EINT3_IRQn); while(1){ if(state == 0) LPC_GPIO0->FIOSET = 0x0001; else LPC_GPIO0->FIOCLR = 0x0001; } } |
پروژه بالا رو به صورت دیگه ای هم میشه نوشت، که دیگه از تابع وقفه استفاده نکنیم و از پرچمش استفاده کنیم، شماتیک و کد پروژه به صورت زیر هستش، شماتیک همون هستش ولی به جای مقاومت خارجی از مقاومت داخلی خود میکرو استفاده کردم برا ساده شدن مدار!، عملکرد پروژه زیر و بالا هر دو یکسان هستش.
شماتیک پروژه
کد پروژه :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <lpc17xx.h> void delay_ms(unsigned int ms) { for( unsigned int i=0; i<ms; i++ ) for( unsigned int j=0; j<20000; j++ ); } int main() { LPC_PINCON -> PINSEL0 = 0x00000000; // Port0 Pin0:15 Set GPIO LPC_GPIO0 -> FIODIR0 = 0x01; // OutPut Port0 Pin0, Input Port0 Pin1:31 LPC_PINCON -> PINMODE0 = 0x00; // Enable PullUp Port0 Pin0:15 LPC_GPIOINT -> IO0IntEnR = 0x00000002; // Enable Interrupt GPIO Port0 Pin1 bool State = 0; while(1) { if( LPC_GPIOINT->IntStatus ) { State = !State; LPC_GPIO0->FIOPIN0 = State; LPC_GPIOINT->IO0IntClr = 0x00000002; // Clear Flag Interrupt GPIO } } } |
فیلم پروژه
مطلب مرتبط : LPC1768: External Interrupts
خب این مطلب کوچولو هم تموم شد رفت، اگه مفید بود یه فاتحه برا اموات خودمو خودتون بخونید.
یه چند تا پروژه دسته بندی شده قبلا آماده کردم که بر مبنای همینا آموزش ها رو پیش میبرم، فعلا پروژه ها رو میزارم و بعد شروع به قرار دادن آموزش میکنم.
یا علی.
مهمان
سلام ممنون واسه آموزش های مفیدتون
ی سوال داشتم شما چ طوری تو پروتئوس lpc1768 رو وارد و شبیه سازی می کنین؟؟؟؟؟؟؟؟؟؟؟؟؟؟
نویسنده این مطلب
سلام
شبیه سازی نمیشه
اینی هم که میبینی altium هستش.
مهمان
سلام
برنامه هایی که توی پروژه های مربوط به lpc1768 گذاشتین برای من اونایی که وقفه دارن وقفشون اجرا نمیشه.. همه ی قسمتای برنامه اجرا میشه به جز وقفه به نظرتون مشکل از کجاست؟
نویسنده این مطلب
سلام
کد پروژه رو کپی نکن
خود پروژه رو از ته مطلب دانلود کن و با پروژه خودت مقایسه کن
یه سری تنظیمات بود تا جایی که یادمه پاور ماور فعال میکردیم و از این جور حرفا – الان دقیقا خاطرم نی که بخوام راهنماییت کنم – همین کاری که گفتمو فعلا بکن.
مهمان
سلام
خط ۱۹ پروژه اولی میشه بگین چکار میکنه !!
نویسنده این مطلب
سلام-فعال کرن وقفه External Interrupt
NVIC_EnableIRQ(EINT3_IRQn);
مهمان
یک سوال دیگه
bool ==bit
یعنی فقط صفر و یکه
و این که برای خط ۱۹
که گفتین روتین وقفه خارجی فعال میکنه
میخوام ببینم هر پینی از p0 زده بشه به روتین پرش میکنه یا به صورت تکی انتخاب میشه من این رو درست درک نمیکنم
نویسنده این مطلب
بله
========
اگه وقفه GPIO اش رو فعال کرده باشی >>> بله هر کدوم از پایه های انتخاب شده ( پایه هایی که وقفشون فعال شده ) اگه رخ بدن میپره داخل تابع وقفه( همون روتینی که شما فرمودین) و بعد داخل اون تابع باید منبع رو بررسی کنید که این رخداد برا کدوم پایه بوده ———- ولی خب External Interrupt دیگه این طوری نیست – یه ۳-۴ تا ازش داریم و هر کدوم یه تابع وقفه جدا گونه دارن برا خودشون.
مهمان
یک توضیح درباره تابع وقفه جداگانه میدین که چه جوری باید انتخابش کرد (شما چرا ۳ انتخاب کردین ) واین که اون سه تای دیگش رو چجوری باید انتخاب کرد
ببخشید زیاد سوال میکنم (:
نویسنده این مطلب
External Interrupt رو میگی یا وقفه gpio ؟
خب اگه میگی چرا از EINT3_IRQHandler استفاده کردم برا وقفه های gpio باید بگم که باید بری مطالب آموزش lpc که تو سایت گزاشتم رو بخونی.
مهمان
stm32 کی نوبتش می رسه
نویسنده این مطلب
اینو دیگه باید کسایی که کار کردن و بلدن بیان یاد بدن – من حقیقتا کار نکردم.
مهمان
آقا دمیرچلو آخر ما نفهمیدیم تو این فیلما شما چه شکلی هستس
آدمی یا فرشته؟؟؟؟
ولی دمت گرم
مهمان
سلام
میگم فاتحه بخونیم یا فاصله؟؟؟؟؟؟؟
نویسنده این مطلب
سلام
ممنون ازت – الان تصحیح میکنم.