Home Parallel Port Serial Port USB Webboard API I/O Today Project Directory .NET VB VC++


 

เขียนโปรแกรมรับส่งข้อความ กับ 8051 ผ่าน Serial Port

 

     ในเนื้อหาติดต่อไมโครคอนโทรลผ่าน RS-232 ที่เคยกล่าวมาแล้วนั้น จะเป็นการส่งอักษรได้ที่ ละไม่กี่ไบท์ เนื่องมาจาก ไม่ได้กำหนดให้เก็บไว้เป็นแบบชุดข้อมูลเพื่อจะส่งเป็นข้อความ หลักการเขียนโปรแกรม คราวนี้ ผมจะมาแนะนำการเขียนโปรแกรมเพื่อรับและส่งข้อมูลทีละหลายๆข้อมูลหรือข้อความ แต่ทั้งนี้โปรแกรมโดย รวมยังเหมือนเดิม เพียงแต่จะเพิ่มในส่วนการส่งชุดข้อมูลไปให้คอมพิวเตอร์และรับชุดข้อมูลจากคอมพิวเตอร์ เข้ามาที่ไมโครคอนโทรลเลอร์ 

การเขียนโปรแกรมเพื่อติดต่อรับส่งข้อมูลผ่าน Serial port สามารถดูได้ที่นี้  
 

   เนื่องจากผมจะกล่าวในส่วนของการจัดเก็บข้อมูลในหน่วยความจำภายในของไมดครคอนโทรลเลอ์เป็นเนื้อหา หลักจะไม่ขอกล่าวเรื่องการตั้งค่าหรือวิธีในการเขียน โปรแกรมติดต่อกับ Serial port อีก โดยที่อันดับแรกจะ กล่าวถึงแบบการรับข้อมูลที่ส่งมาจากคอมพิวเตอร์ ตามด้วยการส่งข้อมูลไปที่คอมพิวเตอร์

การรับข้อความจาก Serial port เก็บลงหน่วยความจำภายใน

1. ตั้งค่าตำหน่ง Address ที่เริ่มใช้ของหน่วยความจำภายใน อาจจะกำหนดตอนเริ่มโปรแกรม

   MOV R1,#20H 

2. ในส่วนของการรับข้อมูลจาก Serial port โดยเราจะสร้างโปรแกรมย่อยชื่อ GetData 

GetData :  JNB  RI,$  ;  เปรียบเทียบเงื่อนไขจนกว่าเป็นจริงเมื่อ Buffer Receive data เรียบร้อยแล้ว

                    CLR RI       ;  เคลียร์ค่าใน Register RI ในการที่จะไปรับข้อมูลใหม่

                    MOV  A,SBUF  ; เคลื่อนย้ายค่าใน Buffer SBUF register ไปเก็บไว้ที่ register A

3. นำค่าที่รับจาก register A มาเก็บไว้ในหน่วยความจำภายใน 

    MOV @R1,A  ; เคลื่อนย้ายข้อมูลไปเก็บไว้ในหน่วยความจำ ณ ที่ตำแหน่งที่ชี้ด้วยค่าใน R1(#20H)

    INC  R1            ; เพิ่มค่าใน Register R1

    CJNE   A,ODH,GetData   ;เปรียบเทียบเงื่อนไขถ้าหากใน Register A  ว่ามีค่าแอสกี้=ODH ซึ่ง   ; ก็คือการ  Enter สำหรับข้อความใน 1 บรรทัดที่ส่งมาจากโปรแกรมของคอมพิวเตอร์ หากไม่ใช่ก็กลับไป รับข้อมูลมาเพิ่มใหม่

    MOV   R1,#25H   ; ตั้งค่าเริ่มต้นใน R1 ใหม่สำหรับข้อมูลที่จะนำมาเก็บชุดต่อไป

การส่งข้อความจากหน่วยความจำผ่าน Serial port

1. ตั้งค่าตัวแปรสำหรับกำหนดเป็นรหัส Ascii เพื่อเริ่มต้นตำแหน่งเคอร์เซอร์ซ้ายมือในโปรแกรมบน คอมพิวเตอร์ ในที่นี้สมมุติชื่อ ST และตัวแปร NL สำหรับบอกให้ขึ้นบรรทัดใหม่ในโปรแกรมบน PC เช่นกัน ซึ่งสามารถกำหนดดังต่อไปนี้

    ST   EQU   ODH

    NL    EQU   OAH

2.ตั้งค่าสำหรับกำหนดพื้นที่ในหน่วยความจำ

    DATA:  DS      20H  ; กำหนดใช้พื้นที่ในหน่วยความจำไว้ที่ 32  byte

3. ตั้งค่าใน Register DPTR ในการที่จะเริ่มตำแหน่ง Address ในหน่วยความจำ สำหรับจะเอาไว้ เก็บข้อมูลหรือข้อความที่ส่งไปยังคอมพิวเตอร์

   MOV   DPTR,#GiveWord

4. เคลียร์ค่าใน Register A โดยกำหนดค่า #00H และเคลื่อนย้ายข้อมูลที่เก็บในหน่วยความจำไปที่ Register A เพื่อจะในไปส่งข้อมูลผ่าน Serial port ให้กับคอมพิวเตอร์ต่อไป 

 แนะนำว่าควรกำหนดเป็นโปรแกรมย่อยขึ้นใหม่ โดยผมใช้ชื่อ Send_Data 

Send_Data :     MOV A,#00

                             MOV A,@A,+DPTR

     ; ในส่วนนี้จะเป็นการส่งข้อมูลผ่านออก serial port 

    MOV SBUF,A  ; เอาค่าใน Register A ไปเก็บไว้ที่ Buffer เพื่อส่งข้อมูลผ่าน Serial port

    JNB TI,$            ;  เปรียบเทียบเงื่อนไขเป็นจริงเมื่อ Buffer Send Data เรียบร้อยแล้ว

     CLR TI               ; เคลียร์ค่าของ TI(Transmit Interrupt) bit ใน SCON Register       เพื่อคอยส่งข้อมูลชุดใหม่ออกไป

     JZ  HOME       ; ตรวจสอบข้อมูลหากพบว่าเป็น 00H แสดงว่าข้อมูลหรือข้อความซึ่งถูกเก็บใน หน่วยความจำที่เขียนไว้ถูกส่งไปหมดแล้ว

     INC  DPTR     ; หากยังไม่หมดข้อความก็ให้ส่งข้อมูลที่ตำแหน่ง Address ในลำดับต่อไป

    SJMP Send_Data   ; กลับไปทำขั้นตอนส่งข้อมูล

5.กำหนดโปรแกรมย่อยสำหรับการเก็บข้อมูลในหน่วยความจำที่จะส่งไปยังคอมพิวเตอร์ โดยผมสมมุติชื่อ GiveWord ซึ่งจะมีข้อมูลที่ส่งเริ่มต้นจะบอกด้วยค่าแอสกี้ ก็คือ ST กับ NL ที่กำหนดไว้ตอนบนของ โปรแกรมนี้แล้วนั้น ก็ เพื่อจะให้โปรแกรมบนคอมพิวเตอร์รับรู้แล้วขึ้นบรรทัดใหม่ ต่อจากนั้นก็จะเป็น ข้อความ ปิดท้ายด้วยค่าแอสกี้ ST กับ NL และค่าเพื่อใช้ในการตรวจสอบว่าส่งข้อมูลในหน่วย ความจำ ไปหมดแล้วในที่นี้คือ 00H 

GiveWord :  DB   ST,NL,"MICROCONTROLLER INTERFACE SERAIL PORT"

                        DB  " BY THAIIO DOT COM ",ST,NL

                        DB  " SEND DATA TO COMPUTER COMPLETED! " ,ST,NL

                        DB  00H  

 

     จากเนื้อหาที่กล่าวมาข้างต้น ผมคิดว่าเราพอที่เข้าและสามารถนำไปเขียนโปรแกรมเพื่อติดต่อ Serial Port ของไมโครคอลโทรลเลอร์ได้ เพื่อความเข้าใจที่ดียิ่งขึ้น ผมมีโครงงานเกี่ยวกับเนื้อหานี้มาด้วยที่นี้ครับ

ไมโครคอนโทรลเลอร์ติดต่อกับ PC แบบ RS-232 ผ่าน Serial Port   

สิ่งที่ได้รับจากบทความนี้
   1) เป็นพื้นฐานในการเขียนโปรแกรมเพื่อควบคุมการทำงานของ Microcontroller Serial Port 
   2) รู้จัก Register สำหรับจัดการกับหน่วยความจำเพื่อเก็บข้อมูล
 
   3) นำมาประยุกต์การรับและจัดส่งข้อมูลลักษณะครั้งละหลายๆไบท์ผ่าน Serial port ได้
   4) สามารถประยุกต์โปรแกรมไมโครคอลโทรลเลอร์ติดต่อสื่อสารส่งข้อความกับโปรแกรมบน PC ผ่าน Serail Port

   เอกสารอ้างอิง
   1. 8051 Tutorial Serial Communication
   2. http://www.smartdata.com.au/8051/serial.txt 

 

Copyright (c)2000-2002 ThaiIO.com All rights reserved.
Contact webmaster :webmaster@thaiio.com