اطلاعیه

Collapse
No announcement yet.

اشکال برنامه نویسی سی پورت سریال

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    اشکال برنامه نویسی سی پورت سریال

    من یه برنامه ساده در C میخواستم بنویسم که از یک وسیله خارجی بصورت سریال یه سری داده دریافت و نشون بده.
    اینو نوشتم اما جواب نداد :


    کد:
    #include <conio.h>  //for putch,...
    #include <bios.h>   //for bioscom
    #include <stdio.h>  //for file functions
    #include <dos.h>
    #define COM1 0
    #define SETTINGS ( 0xC0 | 0x03 | 0x00 | 0x00 )
    //baud 4800, 8 data bits, no parity, 1 stop bit
    char msg[80];
    int i=0,j;
    void dsply(){j=0;while(j!=i)putch(msg[j++]);i=0;putch('\n');}
    void main()
    {
    	bioscom(0,SETTINGS,COM1);//init.port
    	while(1){
    		 msg[i]=bioscom(2,0,COM1)&0x7F;//&0x7F for chek data ready
    		 if(msg[i])continue;
    		 if(msg[i]==13)dsply();else i++;
    	}
    }

    اینم یکی دیگه بود که جواب نداد :
    کد:
    #include <conio.h>  //for putch,...
    #include <stdio.h>  //for file functions
    #include <dos.h>
    #define COM1 0x3F8
    int c;
    void main(){while(1)
    {
    	c=inportb(0);
    	if(c==13)printf("%d","\n");
    	else printf("%d",c);
    }}

    البته من با هایپر ترمینال از اینکه وسیله خارجی درست داده میده مطمئن شدم اما نمیدونم چرا کد های بالا فقط صفر میده ؟!

    اساتید کمک کنن.
    ) __ ()
    (='.'=)
    (&quot_(&quot
    نابرده رنج گنج ميسر نميشود ...http://i13.tinypic.com/2qd35u8.gif

    #2
    پاسخ : اشکال برنامه نویسی سی پورت سریال

    سلام. من هم یه بار امتحان کردم نتونستم بخونم از پورت.
    ولی تا جایی که من پیش رفتم باید بتونید وقفه سریال رو به طریقی فعال کنید(از طریق وقفه های اسمبلی). یعنی زمانی که بافر پر شد وقفه فعال بشه بعدش میتونید داده رو دریافت کنید.
    موفق باشید.
    شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
    هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
    چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

    دیدگاه


      #3
      پاسخ : اشکال برنامه نویسی سی پورت سریال

      حل شد ممد جان!

      مشکل در این بود که باید dataReady رو هم چک میکردم!

      سورس اصلاح شده این شد :

      [pre]
      کد:
      #include <conio.h>  //for putch,...
      #include <bios.h>   //for bioscom
      #include <stdio.h>  //for file functions
      #include <dos.h>
      #define COM1 0
      #define SETTINGS ( 0xC0 | 0x03 | 0x00 | 0x00 )
      #define DATA_READY 0x100
      //baud 4800, 8 data bits, no parity, 1 stop bit
      int i=0,j,msg[80];
      void main()
      {   int status,out;
         bioscom(0,SETTINGS,COM1);//init.port
         while(1){
         status = bioscom(3,0,COM1);/*wait until get a data*/
         if(status & DATA_READY)
      	  if ((msg[i]=bioscom(2,0,COM1)&0x7F)!= 0)/*input a data*/
      			putch(msg[i]);
         i=0;
      	}
      }
      [/pre]

      البته بجای یه متغیر int یه آرایه گذاشتم چون دارم گسترشش میدم!

      ) __ ()
      (='.'=)
      (&quot_(&quot
      نابرده رنج گنج ميسر نميشود ...http://i13.tinypic.com/2qd35u8.gif

      دیدگاه


        #4
        پاسخ : اشکال برنامه نویسی سی پورت سریال

        سلام.
        تبریک میگم من که 3 سال پیش روش وقت گذاشتم نتونستم.
        این دیتا ردی همون وقفه هست؟
        اگه کتابی هم که استفاده میکنی معرفی کنی فکر کنم مفید باشه.
        موفق باشید.
        شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
        هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
        چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

        دیدگاه


          #5
          پاسخ : اشکال برنامه نویسی سی پورت سریال


          خدمتتون عارضم که وقتی داده رو از پورت کام1 میخونیم یه 16 بیت میگیره که 8 بیت کم ارزشش داده و 8 بیت پر ارزشش یه سری اطلاعات راجع به وضعیت و صحت و... اون 8 بیت دادست.

          دیتا ردی هم تو مایه های وقفه سخت افزاری فک کنم باشه.

          اینجا میتونین توضیحات کاملش رو ببینین :

          http://heim.ifi.uio.no/~stanisls/helppc/bioscom.html
          ) __ ()
          (='.'=)
          (&quot_(&quot
          نابرده رنج گنج ميسر نميشود ...http://i13.tinypic.com/2qd35u8.gif

          دیدگاه


            #6
            پاسخ : اشکال برنامه نویسی سی پورت سریال

            سلام. .
            سایتی که بالا دادی رو ISP من فیلتر کرده :eek:.
            شما کتاب خاصی نداشتی؟ من میخواستم این کار رو با کتاب مدار های واسط مزیدی بکنم که نشد البته هنوز هم میشد روش وقت بذاری ولی من دیگه خسته شدم ولش کردم. شما از اینترنت مطلب جمع کردی یا نه کتابی داشتید؟
            موفق باشید.
            شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
            هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
            چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

            دیدگاه


              #7
              پاسخ : اشکال برنامه نویسی سی پورت سریال

              به یکی از اساتیدمون گفتم میخوام با سی برا اینترفیس پورت کام برنامه بنویسم گفت برو تو سی بزن bioscom و روش کلیک راست کن تا help ش رو بده ، این کار رو کردم اما بنظرم کافی نبود ، لذا توی اینترنت گشتم و توضیحات کاملتری همراه مثال و .... پیدا کردم.
              کلمات کلیدی سرچش رو هم از من بهتر میدونین مثلا یک نمونه :
              http://www.google.com/search?as_q=rs232+bioscom+Communication&as_epq =Serial+port&as_oq=c-language++c-programming&as_eq=&lr=&as_ft=i&as_ filetype=&as_qdr=all&as_nlo=&as_nhi=&a mp;as_occt=any&as_dt=i&as_sitesearch=& as_rights=&safe=images&num=50&btnG1=Go ogle+Search

              کتاب هم پی سی اینتفیس رو دارم اما اون با وی بی و دلفیه و من سی نیاز داشتم.
              ) __ ()
              (='.'=)
              (&quot_(&quot
              نابرده رنج گنج ميسر نميشود ...http://i13.tinypic.com/2qd35u8.gif

              دیدگاه

              لطفا صبر کنید...
              X