اطلاعیه

Collapse
No announcement yet.

کار با پورت توسط C

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

    کار با پورت توسط C

    سلام
    ایا میتوان با Cداده از کیبورد گرفت و به پورت سریال ارسال کرد؟؟
    لطفا دستورات لازمو برام بنویسید

    #2
    پاسخ : کار با پورت توسط C

    ضمن خوش آمد گویی.
    مشکلی نداره نوشتنش , شاید کلا 10 - 12 خط بشه.
    ولی اینجا عرف اینه که کسی برای کسی سورس نمینویسه , به قولی ماهی نمیگیرند برات , اگه دوست داشته باشی , ماهی گیری یادت میدند.

    برای این کار , باید بتونی پورت کام رو کانفیگ کنی , و با دستورات ساده ای که برای کار با صفحه کلید هست , اگر کلیدی فشرده شد , کد کلید رو به پورت بفرستی.
    الهم عجل لولیک الفرج

    دیدگاه


      #3
      پاسخ : کار با پورت توسط C

      سلام
      می تونید راجع به پیکر بندی توضیح و منبع بدید؟

      کتاب جعفر نژاد قمی کا فی است؟

      دیدگاه


        #4
        پاسخ : کار با پورت توسط C

        سلام
        این برنامه کارت رو راه میندازه
        کد:
        #include <stdio.h>
        
        #include <stdlib.h>
        
        #include <dos.h>
        
        #include <math.h>
        
        #include <conio.h>
        
        #include <bios.h>
        
        #define INTR 0X14
        
        #define __CPPARGS ...
        
        #define PORT1 0x3F8 /* Port Address Goes Here */
        
        #define INTVECT 0X0C /* Com Port's IRQ here (Must also change PIC setting) */
        
        /* Defines Serial Ports Base Address */
        
        /* COM1 0x3F8 */
        
        /* COM2 0x2F8 */
        
        /* COM3 0x3E8 */
        
        /* COM4 0x2E8 */
        
        int bufferin = 0;
        
        int bufferout = 0;
        
        char ch;
        
        char buffer[1025];
        
        void interrupt (*oldport1isr)(__CPPARGS);
        
        void interrupt PORT1INT(__CPPARGS) /* Interrupt Service Routine (ISR) for PORT1 */
        
        {
        
        int c;
        
        do { c = inportb(PORT1 + 5);
        
        if (c & 1) {buffer[bufferin] = inportb(PORT1);
        
        bufferin++;
        
        if (bufferin == 1024) {bufferin = 0;}}
        
        }while (c & 1);
        
        outportb(0x20,0x20);
        
        }
        
        void main(void)
        
        {
        
        int c;
        
        outportb(PORT1 + 1 , 0); /* Turn off interrupts - Port1 */
        
        oldport1isr = getvect(INTVECT); /* Save old Interrupt Vector of later
        
        recovery */
        
        setvect(INTVECT, PORT1INT); /* Set Interrupt Vector Entry */
        
        /* COM1 - 0x0C */
        
        /* COM2 - 0x0B */
        
        /* COM3 - 0x0C */
        
        /* COM4 - 0x0B */
        
        /* PORT 1 - Communication Settings */
        
        outportb(PORT1 + 3 , 0x80); /* SET DLAB ON */
        
        outportb(PORT1 + 0 , 0x0C); /* Set Baud rate - Divisor Latch Low Byte */
        
        /* Default 0x03 = 38,400 BPS */
        
        /* 0x01 = 115,200 BPS */
        
        /* 0x02 = 57,600 BPS */
        
        /* 0x06 = 19,200 BPS */
        
        /* 0x0C = 9,600 BPS */
        
        /* 0x18 = 4,800 BPS */
        
        /* 0x30 = 2,400 BPS */
        
        outportb(PORT1 + 1 , 0x00); /* Set Baud rate - Divisor Latch High Byte */
        
        outportb(PORT1 + 3 , 0x03); /* 8 Bits, No Parity, 1 Stop Bit */
        
        outportb(PORT1 + 2 , 0xC7); /* FIFO Control Register */
        
        outportb(PORT1 + 4 , 0x0B); /* Turn on DTR, RTS, and OUT2 */
        
        outportb(0x21,(inportb(0x21) & 0xEF)); /* Set Programmable Interrupt Controller */
        
        /* COM1 (IRQ4) - 0xEF */
        
        /* COM2 (IRQ3) - 0xF7 */
        
        /* COM3 (IRQ4) - 0xEF */
        
        /* COM4 (IRQ3) - 0xF7 */
        
        outportb(PORT1 + 1 , 0x01); /* Interrupt when data received */
        
        printf("\nSample Comm's Program. Press ESC to quit \n");
        
        do {
        
        if (bufferin != bufferout){ch = buffer[bufferout];
        
        bufferout++;
        
        if (bufferout == 1024) {bufferout = 0;}
        
        printf("%c",ch);}
        
        if (kbhit()){c = getch();
        
        outportb(PORT1, c);}
        
        } while (c !=27);
        
        outportb(PORT1 + 1 , 0); /* Turn off interrupts - Port1 */
        
        outportb(0x21,(inportb(0x21) | 0x10)); /* MASK IRQ using PIC */
        
        /* COM1 (IRQ4) - 0x10 */
        
        /* COM2 (IRQ3) - 0x08 */
        
        /* COM3 (IRQ4) - 0x10 */
        
        /* COM4 (IRQ3) - 0x08 */
        
        setvect(INTVECT, oldport1isr); /* Restore old interrupt vector */
        
        }

        برای تستش می تونی ورودی خروجی پورت سریال com1 رو به هم وصل کنی و با زدن هر کلید کاراکتر مربوط به آن کلید به پرت فرستاده می شود و جون خروجی وصل ورودی هست کارکتر فرستاده شده دباره دریافت و روی صفحه نمایش چاپ می شود. من برنامه رو تو Torbo C++ 3.0 کامپایل کردم و جواب می ده.ان شاالله که ماهی گیر رو هم یا می گیری.
        کتاب جعفر نژاد هم کافیه.تابع : outportb(address,data)
        موفق باشی!

        دیدگاه

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