ايران ويج

نسخه‌ی کامل: شروعی دوباره برای میکروهای arm
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3 4 5 6
Biggrin

AT91C_BASE_PIOB->PIO_PDSR & 1<<19)>>19 == 1)

Biggrin
کد php:
AT91C_BASE_PIOB->PIO_PDSR 1<<19)>>19 == 1
يا
کد php:
(AT91C_BASE_PIOB->PIO_PDSR 1<<19) == 1<<19
به اين موضوع خيلي دقت كنيد!
خيلي قشنگ سركارتون مي ذارهه Biggrin

من با دوتا كامپايلر كار كردم.
اين كدهايي كه در سطح ريجستر هست در هر دوتا كامپايلر و در عمل جواب مي دهه.
تفاوت فقط موقع كار با وقفه هاست. باقيشون مثل هم هست ...

نكته ي ديگه هم اينكه ، حتما ديتاشيت يا يه كتاب مرجع موقع كد زني پيشتون باشه ...
sam7s و sam7x مقدار ID هاي peripheral هاشون ، تفاوت هايي دارهه ، همينطور براي استفاده از ويژگي هاي ديگه اي از پايه ها دو تا قسمت A و B وجود دارهه كه باز تفاوت هايي وجود دارهه ... .

از نظر خودم ، كد زني در سطح ريجستر واضح تر از استفاده از اون كتاب خونه هاست ! Biggrin

هادي خان در مورد ريجسترهاي PIO هم كه گفتم ، به جز چيزايي كه معرفي كردم ، هنوز ريجستر دارهه ...
اما ساختار ريجسترهاش به همون سبك 3تايي هست كه گفتم و صالح جان هم توضيح داد ...
یافتم یافتمBiggrin
الان تونستم همون فلاشر قبلی رو با رجیستر راه اندازی کنم
اینم برنامه اش؛
کد:
#include <AT91SAM7X256.H>
#include <delay.h>
int main(void)
{
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PIOB);
AT91C_BASE_PIOB->PIO_PER=(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7);
AT91C_BASE_PIOB->PIO_OER=(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7);
while(1){
AT91C_BASE_PIOB->PIO_CODR=(1<<0|1<<2|1<<4|1<<6);
AT91C_BASE_PIOB->PIO_SODR=(1<<1|1<<3|1<<5|1<<7);
delay_ms(50);
AT91C_BASE_PIOB->PIO_CODR=(1<<1|1<<3|1<<5|1<<7);
AT91C_BASE_PIOB->PIO_SODR=(1<<0|1<<2|1<<4|1<<6);
delay_ms(50);
};
}
کد php:
AT91C_BASE_PIOB->PIO_PDSR 1<<19)>>19 == 1
کد php:
AT91C_BASE_PIOB->PIO_PDSR 1<<19)>>19 == 1
یکم در موردشون توضیح بدینبعد از & متوجه نمی شم چه اتفاقی مییقتهConfused
pdf ندارین برای آموزش اینجا کتاب گیرم نیومدQuestion زبون اصلی هم مشکلی نیستQuestion برا ی آموزش رجیستر ها می خوام
راستی برای ال سی دی بریم سراغ کتابخونه یا نه
راستی این برنامه رو برای روشن کردن ال ای دی با کلید نوشتم تو عمل هم کار کردHappy
کد:
#include <AT91SAM7X256.H>
int main(void)
{
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PIOB);
AT91C_BASE_PIOB->PIO_PER=(1<<19);
AT91C_BASE_PIOB->PIO_OER=(1<<19);
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PIOA);
AT91C_BASE_PIOA->PIO_PER=(1<<26);
AT91C_BASE_PIOB->PIO_IFER=(1<<26);
AT91C_BASE_PIOB->PIO_PPUER=(1<<26);
while(1){
if((AT91C_BASE_PIOA->PIO_PDSR & 1<<26)>>26 == 0){
AT91C_BASE_PIOB->PIO_SODR=(1<<19);}
else{AT91C_BASE_PIOB->PIO_CODR=(1<<19);}
}}
از وقتی با رجیستر ها کار کردم تازه فهمیدم چی به چیهHeart
هادي جان روي كاغذ يه عمليات بيتي انجام بدهه خودت متوجه مي شي ، چيز عجيبي نيست!
در مورد كتاب ، كتاب فروشي هاي مركز استان ها حتما دارن. نمي دونم فروش اينترنتي دارهه يا نه.
به اميد هم مي توني بگي برات بفرسته Biggrin
اما جدا توصيه مي كنم كتاب رو بگيري.
آقا این keil جدول lookup یا یه رجیستری داره که کارمون و تو مقداردهی متغیرها و پورت ها آسون کنه؟
جدول lookup بچه بازي هاي بسكام هه ... Biggrin
يه آرايه تعريف كن ، هر كاري خواستي انجام بدهه .
زبون C هست ديگه ... ،‌ مثل كدويژن ...
خب الان بخوام یه متغیر رو برابر پورت b قرار بدم از چه دستوری استفاده کنم؟
این دستور درسته؟
کد:
AT91C_BASE_PIOB=a;
د ن د ...!
خودت كه يه كد زدي ...
ببين :

کد php:
(AT91C_BASE_PIOB->PIO_SODR=a); 

بسته به كاري كه مي خواي كني بايد از ريجستر مربوطه استفاده كني ... ( جاي SODR )
(راه اندازی سون سگمنت با at91sam7x256)
بلاخره با کمی تلاش تونستم یه شمارنده 0 تا 9 با سون سگمنت راه اندازی کنم.
برنامه رو با یه فیلم کوتاه میذارم بقیه هم استفاده کنن.
این برنامه اش؛
کد:
#include <AT91SAM7X256.H>
#include <delay.h>
char seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int main(void)
{
int i=0;
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PIOB);
AT91C_BASE_PIOB->PIO_PER=(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6);
AT91C_BASE_PIOB->PIO_OER=(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6);

while(1){
AT91C_BASE_PIOB->PIO_CODR=(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6);
i++;
if(i>9){i=0;}
AT91C_BASE_PIOB->PIO_SODR=seg[i];
delay_ms(500);
}
}
فکر کنم نیاز به توضیح کامل برنامه نداشته باشه فقط برای راه اندازی سون سگمنت از کاتد مشترک استفاده کردم و یه متغیر تعریف کردم و از 0 تا 9 در مبنای هگز مقدار دهی کردم و بعد برابر بیت های 0 تا 6 پورت b قرار دادم.
نکته؛ پایه های سون سگمنت رو با مقاومت 330 اهم به میکرو وصل کنید.
خوش باشید.

فیلم کوتاه از عملکرد مدار
[attachment=8668]
سلام.
واقعا دمتون گرم خسته نباشید.
دوستان چندتاسوال ساده داشتم.
1.فرق iar با keil چیه؟
2.کدوم خفن تره؟
3.کدوم راحت تره؟
صفحه‌ها: 1 2 3 4 5 6