|
السلام عليكم
أخي كريم طريقه القراءه من كمبيوتر عبر uart فأفضل طريقه هي قراءه حرف حرف وعن طريق انتربت وبالطبع لايمكنك او لاتحصل على نتائج صحيحه عند أستخدام طرق أخرى
فقد جربت طريقه ارفقتلك اياها في مشاركه سابقه وهي بسيطه جدا صحيح طويله ولكن بسيطه
وانا سحاول كتابه لك الكود اي تستفاد منه في قراءه النص ولكن كم هو طول النص
مطلوب عرضه لانك بحاجه الى مصفوفه لخزن البيانات مستقبله
تحياتي
|
السلام عليكم
تفضل أخي هذا أبسط كود
كود:
void interrupt()
{
{
if(RCIF_bit==1)
{
RCIF_bit=0;
read_data=UART1_Read();
if(read_data=='"' )
{
recieve=0xFF;
}
else if(recieve ==0 && read_data >=32 && read_data <='z' )
{
flag=0;
buffer1[kk]=read_data;
if(kk< max_length)kk++;// must be limited kk value
}
}
}
}
هذا هو مشروع
http://up.top4top.net/downloadf-top4...bf911-rar.html
شرح الكود
=======
max_length هو أقصى حرف ممكن خزنه وطبعا هنا سوف يتم خزن البيانات في ايبروم
لذا عليك بتعريف اقصى طول اي تكتب في برنامج
كود:
char const max_length=200;
فعندما يتم ارسال البيانات فسيتم مقاطعه لان RCIF_bit سوف يصبح =1 وبتالي تتم قراءه حرف عن طريق ()read_data=UART1_Read
ويتم خزن البيانات في مصفوفه buffer1
حيث يتم تعريف هذه مصفوفه في بدايه البرنامج كنالي
كود:
unsigned char buffer1[max_length];
ولكن كيف يتم ارسال البيانات ترسل هكذا
" iam from Iraq
وبتالي سوف يقرا الحرف الاول وهو i وعندما يصل الى علامه " فانه سوف ينهي عمليه الاستقبال recieve=0xFF و هذا متغير نستفاد منه بأنه flag للبيانات اي تم استلام بيانات جديده
سؤال // ماذا يعني هذا الشرط
كود:
if(recieve ==0 && read_data >=32 && read_data <='z' )
الجواب //
اذا كان recieve لايساوي 0xFF يعني لم نتهي من استقبال البيانات أذن شوف البيانات المقروءه هل هي ضمن اسكي الكود بين 0x32 وبين 'z'
http://cdn.top4top.net/i_6e8ae028f21.png
================================================
طبعا واذا تريد خزن البيانات في ايبروم تكتب التالي
كود:
if(recieve==0xFF )
{
delay_ms(100);
recieve=0;
flag=1;
for(x=0;x<kk;x++)
{
EEPROM_Write(x+1,buffer1[x]);
}
EEPROM_Write(0,kk);
for(x=0;x<kk;x++)
{
buffer1[x]=0;
}
delay_ms(100);
kk=0;
}
كود:
if(flag==1 )
{
text_print(1);
}