سلام.
کسی هست بدونه چطور میشه یک سری عددو چطور میشه بصورت یک رشته از lpc1768 ارسال کرد؟
من می خوام اعداد هگز 680400a00000f8516 رو بصورت رشته در یک لحظه بدون حلقه for ارسال کنم.
کسی هست کمکم کنه؟
سلام.
کسی هست بدونه چطور میشه یک سری عددو چطور میشه بصورت یک رشته از lpc1768 ارسال کرد؟
من می خوام اعداد هگز 680400a00000f8516 رو بصورت رشته در یک لحظه بدون حلقه for ارسال کنم.
کسی هست کمکم کنه؟
سوالتون خیلی گنگنه
یعنی به چه درگاهی ارسال کنید ، منظورتون از بودن حلقه For چی هست
مثلا اگر فرض کنیم میخواید به واحد سریال ارسال کنید در صورتی که فرمان Printf رو فعال کرده باشید میتونید ازش استفاده کنید ، اگر منظورتون این نیست میتونید از DMA نیز استفاده کنید.
با ارتباط سریال میخوام یک سری اعداد هگز رو به هم متصل کنم و بعد بفرستم.نه اینکه از یک حلقه for استفاده کنم و دونه دونه این اعدادو بفرستم.
تابع printf رو با تابع هدر stdio.h تعریف می کنم ولی اصلا نمیتونه عددو ارسال کنه.
منظورتون از DMA چی بود؟
سلام شما برای استفاده از Printf توی کیل باید کتابخونه ریتارگت رو هم اضافه کنید که مسیر داده رو مشخص میکنید.
حالا اگر بخواید از حلقه استفاده کنید چه مشکلی پیش میآد.
میشه در مورد معرفی ریتارگت بیشتر توضیح بدید؟
نمیشه، باید یکدفعه بفرستم.چون تعداد دفعات فرستادنم از 8 شروع میشه تا بعضی مواقع ممکنه به 21 بار هم طول بکشه . باید کاری کنم که همه رو یکدفعه بفرسته؟
شما راهی به ذهنتون نمیرسه؟؟
سلام یک دفعه فرستادن که معنی نمیده - چرا که خود پورت سریال داره کارکتر به کارکتر میفرسته - فکر میکنم که منظور شما اینه که تاخیر بین کارکتر های ارسالی وجود نداشته باشه - خوب حالا شما به من بگید که این اعدادی رو که میخواید ارسال کنید کجا و به چه صورت نگه داری میکنید تا من بتونم به سمپل کد براتون بذارم
سلام.
void putchr0(char ch){//write character to serial port
;(while(!LPC_UART0->LSR & 0x20
{ LPC_UART0->THR = ch;//out ch
char getchr1(void){//read character from serial port
while(!LPC_UART1->LSR & 0x01 );
{ ;(return(LPC_UART1->RBR
LPC_SC->SCS = 0x30;
main (void)
unsigned char i;
unsigned char r[8]={0x68,0x04,0x00,0x0a,0x00,0x0f,0x85,0x16};
LPC_SC->SCS = 0x30;
LPC_SC->PCLKSEL0 |= 0x0;
LPC_PINCON->PINSEL0 |= 0x40000050;
LPC_PINCON->PINSEL1 |= 0x01;
LPC_UART1->FCR = 7;
LPC_UART1->LCR = 0x83;
LPC_UART1->DLL = 0x78;
LPC_UART1->DLM = 0;
LPC_UART1->LCR = 3;
LPC_UART0->FCR = 7;
LPC_UART0->LCR = 0x83;
LPC_UART0->DLL = 0x78;
LPC_UART0->DLM = 0;
LPC_UART0->LCR = 3;
for(i=0;i<8;i++){
putchr0(r[i ]);
getchr1();
}
این خطوط برناممه.
اگر اینو با پورت سریال rs232 ببینم درسته که داره یکدفعه میفرسته اما داره 8 بار میفرسته. من از اون طرف نمی خوام 8 بار stop bit داشته باشم یعنی از اون طرف باید یک رشته اعداد داشته باشم که استاپ بیت اون در آخر همه اعداد ارسالی باشه نه آخر هر بیتی که ارسال می کنم .
متوجه منظورم شدید؟
میتونید کمکم کنید؟
متشکرم.
سریال rs232 فقط میتونه تک بایت بفرسته و اینطور که شما میخواهید نمیشه اگه چنین چیزی مد نظرتون هست باید سراغ یک پرتکل ارتباطی دیگه برید
مثلا چه پروتکل ارتباطی ای؟ میشه بیشتر توضیح بدید؟
حالا هر پروتکل ارتباطی دیگه ای استفاده کنم مگه نحوه ارسالم تغییر کرده؟
در هر صورت من 8 بار دارم ارسال میکنم.
سلام.
فرستنده اطلاعاتو میفرسته. گیرنده اطلاعاتو میگیره. اگر استاپ بیت بره فرستنده اطلاعاتو پردازش میکنه.
پس اگر بخواد بعد از هر بایتی یک استاپ بیت بره اون اندازه اطلاعاتی که از اون طرف باید دریافت بشه تا مورد استفاده و پردازش قرار بگیره غلط میشه.
مثل اینه که ما میخوایم آخر هر جمله یک نقطه داشته باشیم اما با این نحوه ارسال بعد از هر کلمه یک نقطه داریم.
سلام
به نظرتون میشه با printf اینارو ارسال کرد ؟اونوقت فقط یک استاپ بیت داریم یا بازم دونه دونه میفرسته و به ازای هر ارسال یک استاپ بیت داریم؟
حالا که توضیح دادید بهتر شد شما رشته اعداد رو به صورت اسکی بفرست و در پایان هم یک عدد(غیر اسکی) مثلا 0x0d رو در انتهای رشته بفرست حالا اونطرف وقتی سریال آمد اینقدر بافر رو بخون و بریز تو یک آرایه تا به 0x0d برسی و بعد روی رشته ورودیت پردازش کن