Title: ขอความช่วยเหลือเรื่อง pic กับพอต อนุกรม สอ Post by: bears1ngha on January 26, 2008, 06:13:47 PM พอดีผมมีความจำเป็นต้องใช้พอตอนุกรม ในการส่งข้อมูลออก สองพอตครับ แบบว่า ส่งไป
บันทึกที่ เมมทางนึงแล้วก็ส่งแสดงผลที่คอมออีกทางนึง ตอนี้ผมใช้ pic16f877 อยู่ครับ เท่าที่ผมรู้ไม่รู้จะใช่รึเปล่านะครับ คือเราต้องเขียนโปรแกรม พอตอนุกรมอีกอันนึงขึ้นมาเองใช่มะครับ พอดีมีคนรู้จักเค้าเคยทำแนะนำมา แต่ตอนนี้ติดต่อเค้าไม่ได้ผมเลยไม่รู้ว่าเค้าใช้ pic เบอร์ไหน 877 นี่เขียนไม่ได้ใช่มะครับ เพราะคนที่เค้าแนะนำผมมาเค้าบอกว่า 877 เขียนไม่ได้ ต้องเป็นอีกเบอร์ถึงจะเขียนได้ รบกวนขอข้อมูลด้วยครับ ใครเคยทำหรือ เขียน ผมเขียนโดยใช้ ccs ครับ ต้องเขียนยังไงครับผม Title: Re: ขอความช่วยเหลือเรื่อง pic กับพอต อนุกรม สอ Post by: smitdh 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); } } |