قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

simo aden
:: مهندس ::
تاريخ التسجيل: Mar 2011
المشاركات: 4
نشاط [ simo aden ]
قوة السمعة:0
قديم 28-03-2011, 05:18 PM المشاركة 1   
افتراضي عاجل جدا .. عاجل جدا .. أرجو المساعدة Twitter FaceBook Google+



لمن يمتلك الخبرة في لغة ال c المستعملة في الmicro controller أرجو المساعدة للضرورة القصوة و المستعجلة
هذا هو كود لتجربة التحكم . Single phase AC Motor speed controlle
وللأسف لم أتمكن من تحويلها الى لغة الhex لتفعيل التجربة , لذلك لمن يمتلك الخبرة أو القدرة على تحويله الى ال hex وارساله لي عن طريق الpdf وله جزيل الشكر .
وهذا هو الكود في لغة c
The complete operation is based on the software embedded in micro controller 89C2051. The software is written in C language. Different functions are used for different operations like ext1, ext0, delay and keydly etc. Here is the code with necessary comments which it self explains all above functions.

click here for the C code.


#include<reg51.h>
#include <string.h>

sbit led1 = P3^0;
sbit s1 = P3^4;
sbit s2 = P3^5;
sbit s3 = P3^7;

unsigned int d1=0;
unsigned int d2=0;
unsigned int c=0;
bdata unsigned char byte;
sbit b0 = byte^0;
sbit b1 = byte^1;
sbit b2 = byte^2;
sbit b3 = byte^3;
sbit b4 = byte^4;
sbit b5 = byte^5;
sbit b6 = byte^6;
sbit b7 = byte^7;
void dely(void);
void incangle(void);
void decangle(void);
void delay(int d);

void shiftup() // raise the bar graph by one step
{
b7=b6; // shitf the bits one by one to up
b6=b5;
b5=b4;
b4=b3;
b3=b2;
b2=b1;
b1=b0;
b0=1; // insert 1 to first bit
}
void shiftdown() // decrease bar graph by one step
{
b0=b1; // shift all the bits down one by one
b1=b2;
b2=b3;
b3=b4;
b4=b5;
b5=b6;
b6=b7;
b7=0; // insert 0 to last bit
}
void keydly(void) //key debounce delay
{
unsigned int x,y;
for(x=0;x<100;x++)
for(y=0;y<1000;y++);
}
void decangle() //decrease delay by 1ms
{
EX1=0; //first disable all interrupts
if(d1>0)
{
d1--; // decrease delay
shiftdown();
P1=byte;
}
EX1=1; // enable interrupts before leaving
}
void incangle() // increase delay by 1 ms
{
EX1=0; // all other things remains same as above
if(d1<9)
{
d1++;
shiftup()
P1=byte;
}
EX1=1;
}
void delay(int d) // generates delay from 1 to 9 ms
{
int k;
TL0 = 0x17; // load timer 0 with 64535 = FC17h
TH0 = 0xFC; // so it will overflow after 1000 counts
TR0 = 1; // start timer
for(k=0;k<d;k++) // count overflows of timer 0 till
{ // desire delay is required
while(TF0==0);
TF0 = 0;
TL0 = 0x17;
TH0 = 0xFC;
}
TR0 = 0;
}
void int0(void) interrupt 2 // external interrupt 1 subroutine
{
keydly(); // after key debounce delay
if(s1==0) // for first key
{
c++; // increase counter
if((c%2)==1) // check even or odd
{
EX0 = 1; // enable external interrupt 1 if odd
}
else
{
EX0 = 0; // disable external interrupt 1
}
}
else if(s2==0) // for second key
{
incangle(); // increase phase angle
}
else if(s3==0) // for third key
{
decangle(); // decrease phase angle
}
}
void int1(void) interrupt 0 // external interrupt 1 subroutine
{
int t;
led1=0; // led1 is on
delay(d1); // after desired delay
pulse=1; // send pulse on p2.0
for(t=0;t<200;t++);
pulse=0;
led1 = 1; // led1 off
}

void main()
{
TMOD = 0x01; // initialize timer0 as 16 bit timer
P1=0x00; // P1 as output ports
P3=0xFF; // P3 as input port
IE=0x84; // enable external interrupt 1
while(1); // continuous loop
}

اعلانات

الصورة الرمزية #MAAM#
#MAAM#
:: عضو ذهبي ::
تاريخ التسجيل: Jun 2008
الدولة: EGYPT
المشاركات: 567
نشاط [ #MAAM# ]
قوة السمعة:92
قديم 28-03-2011, 05:56 PM المشاركة 2   
افتراضي


لمن يمتلك الخبرة في لغة ال c المستعملة في الmicro controller أرجو المساعدة للضرورة القصوة و المستعجلة
هذا هو كود لتجربة التحكم . Single phase AC Motor speed controlle
وللأسف لم أتمكن من تحويلها الى لغة الhex لتفعيل التجربة , لذلك لمن يمتلك الخبرة أو القدرة على تحويله الى ال hex وارساله لي عن طريق الpdf وله جزيل الشكر .
وهذا هو الكود في لغة c
The complete operation is based on the software embedded in micro controller 89C2051. The software is written in C language. Different functions are used for different operations like ext1, ext0, delay and keydly etc. Here is the code with necessary comments which it self explains all above functions.

click here for the C code.


#include<reg51.h>
#include <string.h>

sbit led1 = P3^0;
sbit s1 = P3^4;
sbit s2 = P3^5;
sbit s3 = P3^7;

unsigned int d1=0;
unsigned int d2=0;
unsigned int c=0;
bdata unsigned char byte;
sbit b0 = byte^0;
sbit b1 = byte^1;
sbit b2 = byte^2;
sbit b3 = byte^3;
sbit b4 = byte^4;
sbit b5 = byte^5;
sbit b6 = byte^6;
sbit b7 = byte^7;
void dely(void);
void incangle(void);
void decangle(void);
void delay(int d);

void shiftup() // raise the bar graph by one step
{
b7=b6; // shitf the bits one by one to up
b6=b5;
b5=b4;
b4=b3;
b3=b2;
b2=b1;
b1=b0;
b0=1; // insert 1 to first bit
}
void shiftdown() // decrease bar graph by one step
{
b0=b1; // shift all the bits down one by one
b1=b2;
b2=b3;
b3=b4;
b4=b5;
b5=b6;
b6=b7;
b7=0; // insert 0 to last bit
}
void keydly(void) //key debounce delay
{
unsigned int x,y;
for(x=0;x<100;x++)
for(y=0;y<1000;y++);
}
void decangle() //decrease delay by 1ms
{
EX1=0; //first disable all interrupts
if(d1>0)
{
d1--; // decrease delay
shiftdown();
P1=byte;
}
EX1=1; // enable interrupts before leaving
}
void incangle() // increase delay by 1 ms
{
EX1=0; // all other things remains same as above
if(d1<9)
{
d1++;
shiftup()
P1=byte;
}
EX1=1;
}
void delay(int d) // generates delay from 1 to 9 ms
{
int k;
TL0 = 0x17; // load timer 0 with 64535 = FC17h
TH0 = 0xFC; // so it will overflow after 1000 counts
TR0 = 1; // start timer
for(k=0;k<d;k++) // count overflows of timer 0 till
{ // desire delay is required
while(TF0==0);
TF0 = 0;
TL0 = 0x17;
TH0 = 0xFC;
}
TR0 = 0;
}
void int0(void) interrupt 2 // external interrupt 1 subroutine
{
keydly(); // after key debounce delay
if(s1==0) // for first key
{
c++; // increase counter
if((c%2)==1) // check even or odd
{
EX0 = 1; // enable external interrupt 1 if odd
}
else
{
EX0 = 0; // disable external interrupt 1
}
}
else if(s2==0) // for second key
{
incangle(); // increase phase angle
}
else if(s3==0) // for third key
{
decangle(); // decrease phase angle
}
}
void int1(void) interrupt 0 // external interrupt 1 subroutine
{
int t;
led1=0; // led1 is on
delay(d1); // after desired delay
pulse=1; // send pulse on p2.0
for(t=0;t<200;t++);
pulse=0;
led1 = 1; // led1 off
}

void main()
{
TMOD = 0x01; // initialize timer0 as 16 bit timer
P1=0x00; // P1 as output ports
P3=0xFF; // P3 as input port
IE=0x84; // enable external interrupt 1
while(1); // continuous loop
}
أخي الكريم أولا حضرتك لم تذكر التردد .. ثانيا حاولت أعمل لك كومبيل للكود ولكنه يحتوى على أخطاء .......... على العموم هذا هو الرابط الذي يحتوي على الكومبيلر الذي يستطيع أن يساعدك في هذا النوع من الميكروكنترولر
http://www.qariya.com/vb/showthread.php?t=87000

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية mar7aba_01
mar7aba_01
:: مهندس متميز ::
تاريخ التسجيل: Jan 2010
الدولة: المغرب
المشاركات: 746
نشاط [ mar7aba_01 ]
قوة السمعة:0
قديم 28-03-2011, 06:40 PM المشاركة 3   
افتراضي


أخي تمنيت لو أساعدك فأنا لست من مستخدمي ال C أنا أقوم بالبرمجة على الفلوكود .لكن رغم ذلك تفضل ملف الهيكس
قمت بنسخ الأوامر في ملف عادي وحولت امتداده إلى امتداد ال C وبعد ذلك فتحته بواسطة برنامج الميكروسي وقمت بأستخراج ملف الهكس أتمنى أني أفلحت رغم أن هناك مشكل وهو عدم معرفتي بنوع المتحكم والتردد.http://www.4shared.com/file/few6CppV/simo_aden.html


simo aden
:: مهندس ::
تاريخ التسجيل: Mar 2011
المشاركات: 4
نشاط [ simo aden ]
قوة السمعة:0
قديم 03-04-2011, 06:13 PM المشاركة 4   
افتراضي


أخي تمنيت لو أساعدك فأنا لست من مستخدمي ال C أنا أقوم بالبرمجة على الفلوكود .لكن رغم ذلك تفضل ملف الهيكس
قمت بنسخ الأوامر في ملف عادي وحولت امتداده إلى امتداد ال C وبعد ذلك فتحته بواسطة برنامج الميكروسي وقمت بأستخراج ملف الهكس أتمنى أني أفلحت رغم أن هناك مشكل وهو عدم معرفتي بنوع المتحكم والتردد.http://www.4shared.com/file/few6CppV/simo_aden.html
تشكر أخي ولك جزيل الشكر وجزاك الله ألف خير
ودعواتي لك بالتوفيق

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 08:27 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025