Proto Tech - Series
Embedded System ศักดิ์ชัย ผางส�าเนียง
เรี ย น-เล น -ใช
ไมโครคอนโทรลเลอร MCS-51 ดวยโปรแกรมภาษาเบสิก µÍ¹·Õè 3 : 㪌§Ò¹¾Íà µÍÔ¹¾ØµàÍÒµ ¾Øµ
เพิ่มเงื่อนไขในการควบคุมพอรต เอาตพุตดวยการอานคาจากพอรต อินพุต อีกหนึ่งการทดลองสําหรับ การเรียนรูเพื่อใชงานพอรตอินพุต เอาตพุตของไมโครคอนโทรลเลอร P89V51RD2 เกี่ ย วกั บ ¾อร์ ต อิ น ¾Ø ต ของไมâครคอนâทรลเลอร์ P89V51RD2 ในการก�าหนดให้เป็นพอร์ตของไมโครคอนโทรลเลอร์ P89V51RD2 ท�างานเป็นพอร์ตอินพุต ต้องเริ่มต้นด้วยการเขียนข้อมูล "1" มาที่แต่ละบิต ของพอร์ตที่ต้องการใช้งานเป็นอินพุต เพื่อหยุดการท�างานของเฟตที่ใช้ใน การขับสัญญาณเอาต์พุตของบิตนั้น ๆ ท�าให้ขาสัญญาณของพอร์ตเชื่อม ต่อเข้ากับวงจรพูลอัปภายในโดยตรง ส่งผลให้ขาพอร์ตนั้นมีลอจิกเป็น "1" สามารถรับสัญญาณลอจิก "0" จากอุปกรณ์ภายนอกได้ง่าย สัญญาณ ข้อมูลจากอุปกรณ์ภายนอกจะถูกส่งเข้ามาแล้วเก็บไว้ในวงจรบัฟเฟอร์ ภายในพอร์ต แล้วรอให้ซีพียูมาอ่านค่าเข้าไป เมื่อเป็นเช่นนี้ อุปกรณ์ ภายนอกที่เชื่อมต่อกับพอร์ตอินพุตของไมโครคอนโทรลเลอร์ MCS-51 แบบแฟลชควรก�าหนดให้ท�างานในสภาวะลอกิจ "0" จะดีและสะดวกที่สุด ซึ่งในปัจจุบันอุปกรณ์อินพุตที่เชื่อมต่อไมโครคอนโทรลเลอร์แทบทั้งหมด ท�างานที่ลอจิก "0" อยู่แล้ว ในรูปที่ 3-1 แสดงโครงสร้างอย่างง่ายของขาพอร์ตทั้งหมดในไมโคร คอนโทรลเลอร์ MCS-51 มาตรฐาน
การท´ลองที่ 2 อ‹านค‹าอิน¾Øตเ¾ื่อควบคØมเอาต์¾Øต การทดลองที่ 1 เราสามารถท�าให้ LED ติดดับตามเวลาที่ก�าหนดได้ แล้ว ในการทดลองนี้จะเปลี่ยนการวิธีควบคุม LED โดยมาใช้สวิตช์แทน ใน โปรแกรมของการทดลองนี้จะท�าให้เมื่อกดสวิตช์ครั้งแรก LED จะติด และ เมื่อกดอีกครั้ง LED จะดับ อุปกรณ์ที่ต้องใช้ในการทดลองนี้แสดงในรูปที่ L2-1 ส่วนวงจรทดลองเป็นดังรูปที่ L2-2 72
The Prototype Electronics
a
b c
d
(a) LED ขนาด 5 มม. สีแดงหรือสีอื่นตามต้องการ (b) ตัวต้านทาน 510Ω 1/4W 5% หรือ 1% (c) สวิตช์กดติดปล่อยดับ (d) สายต่อวงจร
รูปที่ L2-1 แสดงอุปกรณ์ทั้งหมดที่ใช้ในการทดลองนี้ (L2.1) เปิดโปรแกรม Bascom-8051 ขึ้นมา เขียนโปรแกรมที่ L2-1 บันทึกชื่อเป็น InOutPort.bas (L2.2) คอมไพล์และดาวน์โหลดโปรแกรมลงไปยังบอร์ด TPE-51 โดย ใช้ซอฟต์แวร์ Flash Magic (L2.3) รันโปรแกรมด้วยการกดสวิตช์ RESET จากนั้นทดลองกดสวิตช์ S1 หากทุกอยางถูกตอง LED ตองติดสวาง จากนั้นทดลองกดสวิตช S1 อีกครั้ง LED ตองดับ
รูปที่ 3-1 โครงสร้างของขาพอรตในไมโครคอนโทรลเลอร MCS-51
$regfile = "89C51RD.DAT $default Xram
$ramstart = 0
$ramsize = 1024
$crystal = 11059200 Lamp Alias P0.0 Switch Alias P0.1 Lamp = 1 Do
‘ เริ่มตนการทำางานที่ตำาแหนงแรก ‘ กำาหนดใหใชหนวยความจำาแรม 1024 ไบต ‘ ใชความถี่สัญญาณนาฬิกา 11.059200MHz ‘ กำาหนดใหคำาวา Lamp คือขาพอรต P0.0 ‘ กำาหนดให switch คือขาพอรต P0.1 ‘ กำาหนดสภาวะเริ่มตนให Lamp มีคาเปน “1” ‘ จุดเริ่มตนการวนรอบไมรูจบ
Debounce Switch , 0 , Controllamp , Sub
‘ ตรวจสอบการกดสวิตช ถาเปน “1” แสดงวายังไมมีการกดสวิตช ‘ ถาเปน “0” แสดงวา มีการกดสวิตชใหกระโดดไปทำางานที่โปรแกรมยอย Controllamp
Loop Controllamp:
If Lamp = 1 Then Lamp = 0
Else
Lamp = 1
End If Return
‘ จุดสิ้นสุดของการวนรอบไมรูจบ ‘ จุดเริ่มตนโปรแกรมยอย Controlleamp ‘ การตรวจสอบเงื่อนไข ถา Lamp มีคาเปน “1” ‘ ใหเปลี่ยนคา Lamp เปน “0” ‘ ถา Lamp ไมไดมีคาเปน “1” ‘ เปลี่ยนคา Lamp ใหเปน “1” ‘ จุดสิ้นสุดการตรวจสอบเงื่อนไข ‘ ยอนกลับ ในที่นี้คือกลับไปที่ Do...Loop
โปรแกรมที่ L2-1 ไฟล InOutPort.bas โปรแกรมอ่านค่าจากพอรตอินพุตเพื่อใช้ในการควบคุมพอรตเอาตพุตอย่างง่าย (คําอธิบายโปรแกรมภาษาไทยไม่ต้องพิมพ)
The Prototype Electronics
73
จากโปรแกรมที่ L2-1 มีคำาสั่งใหม 2 คำาสั่ง และรูปการเขียนโปรแกรม ยอยเพิ่มขึ้นมา
ส ว นโปรแกรมย อ ยแบบเป น ทางการต อ งมี ก ารประกาศชื่ อ ของ โปรแกรมยอยไวที่สวนหัวของโปรแกรม กอนเขาสูโปรแกรมหลัก ดังตัวอยาง
คำาสั่งที่ 1 คือ ค�ำสั่ง Debounce เปนคำาสั่งที่ออกแบบมาเพื่อตรวจ สอบการกดสวิตชโดยเฉพาะเพื่อปองกันสัญญาณรบกวนจากหนาสัมผัส ของสวิตชที่ยังไมนิ่ง เมื่อมีสัญญาณเขามา โปรแกรมจะไมทำางานทันที แต จะรออีก 25 มิลิวินาทีจึงตรวจสอบอีกครั้ง หากยังมีสัญญาณเขามาอยู แสดงวา ไมใชสัญญาณรบกวน โปรแกรมจึงทำางานตามเงื่อนไขที่เขียนไว
Declare Sub Controllamp 'ประกาศชื่อของโปรแกรมยอย Controllamp
คำาสั่ง Debounce มีวิธีการใชอยู 2 รูปแบบ คือ
.............. ..............
[รหัสคำาสั่งของโปรแกรมหลัก]
.............. Sub Controllamp () 'จุดเริ่มตนของโปรแกรมยอย Controllamp
Debounce Switch , 0 , โปรแกรมยอย, Sub
..........................
' ใหไปทีโ่ ปรแกรมยอย Controllamp เมือ่ Switch มีคา เปน "0"
...........................
Debounce Switch , 1 , โปรแกรมยอย , Sub
End sub
[รหัสคำาสั่งของโปรแกรมยอย] 'จุดสิ้นสุดของโปรแกรมยอย Controllamp
' ใหไปทีโ่ ปรแกรมยอย Controllamp เมือ่ Switch มีคา เปน "1" คำาสั่งที่ 2 คือ ค�ำสั่ง IF...Then เปนคำาสั่งตรวจสอบเงื่อนไขวาเปนจริง หรือไมจริง หากเปนจริงใหไปทำาตามเงื่อนไขที่อยูหลัง Then หากไมจริงให ไปทำาตามเงื่อนไขที่อยูหลัง Else แทน รูปแบบการใชงานที่ไมซับซอนมีอยู 2 แบบคือ IF..Else..Then และ IF...Then กรณี IF..Then...Else IF A <> B Then
จากการทดลองที่ผานมาดวยคําสั่งเพียงไมกี่บรรทัด ซึ่งทําความเขาใจ ไดงาย ก็ทําใหเราเขียนโปรแกรมควบคุมการติดดับของ LED ดวยการใช สวิตชไดแลว นี่คือการเริ่มตนสรางระบบควบคุมงายจากอุปกรณอินพุตหนึ่ง ตัวควบคุมอุปกรณเอาตพุตหนึ่งตัว การทดลองใน BASIC-51 Course จะ คอยๆ เริ่มทวีความนาสนใจเพิ่มขึ้นกับอุปกรณที่หลากหลาย และแนนอน นักทดลองมือใหมสามารถทําความเขาใจตามไปไดไมยากอยางแนนอน
[เงื่อนไขเปนจริง - ใหกระทำาคำาสั่งในบล็อกนี้] Else [เงื่อนไขไมเปนจริง - ใหกระทำาคำาสั่งในบล็อกนี้แทน] End if กรณี IF... Then
www.tpemagazine.com
IF A <> B Then [เงื่อนไขเปนจริง - ใหกระทำาคำาสั่งในบล็อกนี้] [เงื่อนไขไมเปนจริง - ใหขามการทำางานไป] ในโปรแกรมที่ L2-1 เลือกใชการตรวจสอบในแบบ IF...Then...Else เมื่อการตรวจสอบเงื่อนไขเปนจริง จะทำางานอยางหนึ่ง ถาหากไมเปนจริงก็ จะทำางานอีกอยางหนึ่ง ในขณะที่คำาสั่ง IF...Then จะเกิดการทำางานตามที่กำาหนดก็ตอเมื่อ เงื่อนไขในการตรวจสอบเปนจริงเทานั้น หากไมจริง โปรแกรมก็จะเพิกเฉย เพราะไมไดวางเงื่อนไขคำาสั่งไว โปรแกรมยอยเปนการสรางโปรแกรมขึ้นมาเพื่อทำางานเฉพาะ โดย โปรแกรมยอยที่สรางขึ้นในโปรแกรมที่ L2-1 เรียกวา โปรแกรมยอยแบบ ไมเปนทางการ กลาวคือ สามารถสรางขึ้นมาไดเลย โดยไมตองประกาศ เปนโปรแกรมยอยกอนลวงหนา ตองมีเครื่องหมายโคลอน : อยูหลังชื่อของ โปรแกรมยอยเสมอ เชน Controllamp: เปนตน
74
The Prototype Electronics
á เ ก @
2