Pages: [1]   Go Down
Print
Author Topic: ขอความช่วยเหลือเรื่อง pic กับพอต อนุกรม สอ  (Read 13804 times)
0 Members and 5 Guests are viewing this topic.
bears1ngha
Guest
« on: January 26, 2008, 06:13:47 PM »

พอดีผมมีความจำเป็นต้องใช้พอตอนุกรม ในการส่งข้อมูลออก สองพอตครับ แบบว่า ส่งไป
บันทึกที่ เมมทางนึงแล้วก็ส่งแสดงผลที่คอมออีกทางนึง ตอนี้ผมใช้ pic16f877 อยู่ครับ
เท่าที่ผมรู้ไม่รู้จะใช่รึเปล่านะครับ คือเราต้องเขียนโปรแกรม พอตอนุกรมอีกอันนึงขึ้นมาเองใช่มะครับ
พอดีมีคนรู้จักเค้าเคยทำแนะนำมา แต่ตอนนี้ติดต่อเค้าไม่ได้ผมเลยไม่รู้ว่าเค้าใช้ pic
เบอร์ไหน 877 นี่เขียนไม่ได้ใช่มะครับ เพราะคนที่เค้าแนะนำผมมาเค้าบอกว่า 877 เขียนไม่ได้
ต้องเป็นอีกเบอร์ถึงจะเขียนได้
รบกวนขอข้อมูลด้วยครับ ใครเคยทำหรือ เขียน
ผมเขียนโดยใช้ ccs ครับ ต้องเขียนยังไงครับผม
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #1 on: February 09, 2008, 01:39:03 PM »

PIC ส่วนใหญ่มี hardware  UART  อยู่ 1 port ครับสามารถรับส่งข้อมูลแบบ Full Duplex
(รับส่งได้ในขณะเดียวกัน )ดู ต.ย. ที่
http://www.thaimicrotron.com/CCS-628/EXAM/RS232.htm มี ต.ย.ให้ดูทั้ง2 แบบ และ
http://www.thaimicrotron.com/CCS-628/Referrence/RS232.htm

นอกนั้นก็สามารถ ใช้เป็น software UART ได้ทุก port
และสามารถใช้ได้อีกหลาย port ด้วย  เวลาจะใช้ port ใดก็ให้ระบุ port ที่จะส่งนั้น
แต่จะเป็นแบบ Half Duplex (เป็นการส่งและรับข้อมูลแบบสลับกัน)
หากเป็น RA4 ต้องต่อ R pull up เพราะเป็นแบบ open dain

PIC16F877 ก็มี Hardware  port อยู่ 1 port คือ RC6 เป็น TX และ RC7 เป็น RX

- เมื่อใช้คำสั่ง #use rs232 โดยกำหนดขา TX,RX ให้ตรงกับ hardware ของ PIC
คอมไพเลอร์จะรู้ว่า เราต้องการที่จะใชพอร์ตอนุกรมแบบ hardware
- หากกำหนด ขาอื่นที่ไม่ใช้ Hardware port 
คอมไพเลอร์ ก็จะสร้างคำสั่งให้เองเลย เราไม่ต้องเขียนคำสั่งขึ้นมาใหม่

การกำหนด hardware  port ของ PIC16F877
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8
- เพราะ RC6,RC7 เป็น hardware  port ของ PIC

การกำหนด software port ของ pic16f877
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8
- เพราะ RA0,RA1 ไม่ได้เป็น hardware  port ของ PIC

ต.ย. การใช้งาน
ใช้ Hardware Port
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8
printf("HW PORT\r\n");
และเมื่อจะเปลี่ยนไปเป็น software port
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8
printf("SW PORT\r\n");

ในกรณีของคุณการรับ ควรใช้ Hardware port เพราะถือว่าสำคัญกว่า เพราะไม่รู้ว่าจะมีการส่ง ข้อมูลมาเมื่อไร
ส่วนการส่งออกไปอีก port นั้น ให้เป็น soft ware port  เพราะเรามักจะรู้ว่าเราจะส่งเมื่อไร

ใน help ของ CCS ก็มี ต.ย. ให้ดูครับ
ใน topic How can I use two or more RS-232 ports on one PIC
ซึ่งการใช้ก็จะต่างกันออกไปอีกแบบ คือกำหนด STREAM=COM_A, และ STREAM=COM_B
และใช้ฟังก์ชั่น fprintf();

#USE RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, STREAM=COM_A)
#USE RS232(BAUD=9600, XMIT=PIN_A0, RCV=PIN_A1, STREAM=COM_B)

main()
{
char c;
      fprintf(COM_A,"Online port1 \n\r");
      fprintf(COM_B,"Online port2 \n\r");

      while(TRUE)
     {
        c = fgetc(COM_A);
        fputc(c, COM_A);
        fputc(c, COM_B);
      }
 }


« Last Edit: March 27, 2008, 08:22:12 AM by admin » Logged
Pages: [1]   Go Up
Print
 
Jump to: