ตัวอย่างการเขียนโปรแกรมอย่างง่าย

/****   ชุดคำสั่งโปรแกรมเบสิก-แสตมป์  ****/

/================================/

/         ชุดคำสั่งให้หุ่นยนต์เดินตามแสง        /

/================================/

  1. SO                   CON    14
    ความหมายของคำสั่งต่างๆในโปรแกรม
    บรรทัดที่1-3   จะเป็นการกำหนดค่าของตัวเบสิกแสตมป์
    บรรทัดที่4          กำหนดให้พอร์ตที่6ือ"L_LIGHT" (แผงวงจรตรวจจับแสงด้านซ้าย)
    บรรทัดที่5 กำหนดให้พอร์ตที่9คือ"R_LIGHT" (แผงวงจรตรวจจับแสงด้านขวา)
    บรรทัดที่6-8 เป็นการกำหนดให้ตัวแปรชื่อ "L_VALUE" , "R_VALUE" และ "ERROR" เป็นตัวแปรระดับเวิร์ดซึ่งมีข้อมูล 65,536 ค่า (0-65,535) (ฐานสิบ)
    บรรทัดที่ 9 กำหนดค่า 200 ให้กับตัวแปร DEVIATION (เราสามารถกำหนดค่าเองได้)
    บรรทัดที่10-11 กำหนดให้ตัวแปร "L" และ "R"  เป็นตัวแปรระดับไบต์มีข้อมูลได้ 256 ค่า (0-255) (ฐานสิบ)
    บรรทัดที่12 เป็นการหยุดพักชั่วคราว 1000 มิลลิวินาที

    กำหนดค่าตัวแปรโหมดและความเร็ว

    ไปที่คำสั่ง WAIT_BUSY

    บรรทัดที่13 คำสั่ง " MAIN " : ให้ L_LIGHT มีลอจิก = 1
    บรรทัดที่14 หยุด 1 มิลลิวินาที

    เป็นคำสั่งวัดค่าของเวลาที่ขาพอร์ตยังคงสถานะเดิมอยู่ โดยมี L_LIGHT เป็นตัวแปร 1คือค่าคงที่เพื่อกำหนดสภาวะของขาเมื่อกระทำคำสั่งอยู่  และ L_VALUE เป็นตัวแปรสำหรับเก็บค่าคาบเวลา

    ให้ R_LIGHT มีลอจิก = 1

    หยุด 1 มิลลิวินาที

    เป็นคำสั่งวัดค่าของเวลาที่ขาพอร์ตยังคงสถานะเดิมอยู่ โดยมี R_LIGHT เป็นตัวแปร 1คือค่าคงที่เพื่อกำหนดสภาวะของขาเมื่อกระทำคำสั่งอยู่  และ R_VALUE เป็นตัวแปรสำหรับเก็บค่าคาบเวลา

    ถ้าค่าของ L_VALUE (ได้จากการวัด) - ค่า error มากกว่า 200 (กำหนดไว้) ให้ไปที่คำสั่ง REDIRECT

    ค่าของ error เท่ากับค่าของ L_VALUE  -  ค่าของ R_VALUE

    สั่งให้ถอยหลัง 4 สเตป

    ไปที่คำสั่ง DRV

    ให้กลับไปที่คำสั่ง MAIN

    บรรทัดที่ 15 เป็นคำสั่ง REDIRECT เพื่อให้หุ่นยนต์ตามแสง  :

    ถ้า L_VALUE มากกว่า R_VALUE ให้ไปที่คำสั่ง REDIRECT_R

    ถ้า R_VALUE มากกว่า L_VALUE ให้ไปที่คำสั่ง REDIRECT_L

    บรรทัดที่ 16 เป็นคำสั่ง REDIRECT_L : เลี้ยวขวา โดยล้อซ้ายอยู่กับที่ ส่วนล้อขวาถอยหลัง 4 สเตป

    ไปที่คำสั่ง DRV

    บรรทัดที่ 17 เป็นคำสั่ง REDIRECT_R : เลี้ยวซ้าย โดยล้อซ้ายถอยหลัง 4 สเตป ส่วนล้อขวาอยู่กับที่

    ไปที่คำสั่ง DRV

    บรรทัดที่ 18 คำสั่ง DRV : ส่งผลกลับไปที่ด้านบนที่เรากำหนดตัวแปรไว้
    บรรทัดที่ 19 คำสั่ง WAIT_BUSY : ถ้า BUSY = 1 ให้ไปที่คำสั่ง WAIT_BUSY เพื่อรอจนกระทั่ง BUSY = 0

    ให้โปรแกรมกลับไปทำงานที่โปรแกรมหลักหลังจากทำงานที่โปรแกรมย่อยๆ เสร็จแล้ว

  2. BUSY              VAR    IN15
  3. BAUD            CON    16624
  4. L_LIGHT        CON    6
  5. R_LIGHT        CON    9
  6. L_VALUE       VAR    WORD
  7. R_VALUE       VAR    WORD
  8. ERROR            VAR    WORD
  9. DEVIATION    CON    200
  10. L                       VAR    BYTE
  11. R                       VAR    BYTE
  12. PAUSE 1000

    SEROUT SO,BAUD,[128,"M",4,128,"S",40]

    GOSUB WAIT_BUSY

  13. MAIN:              HIGH L_LIGHT
  14. PAUSE 1

    RCTIME L_LIGHT,1,L_VALUE

    HIGH R_LIGHT

    PAUSE 1

    RCTIME R_LIGHT,1,R_VALUE

    IF (L_VALUE-ERROR) >DEVIATION THEN REDIRECT

    ERROR = L_VALUE-R_VALUE

    L=-4 : R=-4

    GOSUB DRV

    GOTO MAIN

  15. REDIRECT:      IF L_VALUE>R_VALUE THEN REDIRECT_R

                            IF R_VALUE>L_VALUE THEN REDIRECT_L

  16. REDIRECT_L: L=0:R=-4

    GOSUB DRV

    GOTO MAIN

  17. REDIRECT_R: L=-4: R=0

GOSUB DRV

GOTO MAIN

     18.    DRV:                 SEROUT SO,BAUD,[L,R]

     19.    WAIT_BUSY: IF BUSY=1 THEN WAIT_BUSY

RETURN

Back to Class - Room next