[ บทความ : โปรแกรมจำลองการทำงานของ MCS-51 ]

ปกติแล้วในการเขียนโปรแกรมกับระบบไมโครคอนโทรลเลอร์ เรานิยมใช้ภาษาแอสเซมบลีเขียน และเมื่อเขียนเสร็จก็จะ นำมาทดสอบการทำงานบนโปรแกรมที่มีหน้าที่จำลองการทำงานของชิพ ทั้งนี้เพื่อเป็นการประหยัดค่าใช้จ่ายในการซื้อเครื่องมือทดสอบ โปรแกรมในตัวชิพ ซึ่งตัวอย่าง โปรแกรมที่ผมเอามาแนะนำในคราวนี้เป็นโปรแกรม TS Controls Emulator 8051 รุ่นทดลอง .. โดยถ้า ผู้อ่านสนใจใช้งานโปรแกรม หรือจะซื้อโปรแกรมตัวนี้มาใช้งานก็สามารถเข้าไปดาวน์โหลด และหารายละเอียด เกี่ยวกับราคาได้ที่ www.tscontrols.com ซึ่งหน้าตาของโปรแกรมเป็นดังนี้ครับ

ก่อนที่จะมาทดลองใช้โปรนแกรมกัน ตอนนี้เรามาเขียนโปรแกรมเพื่อใช้ในการทดลองกันก่อนครับ ... รายละเอียดของโปรกรม เป็นดังนี้ครับ

	* Filename  : test01.asm
	* Assembler : ASM51 (Assembler in Micro-C51 suite)
	*
	        	ORG     	$0000
	MAIN    	MOV     	A,#$00
	LOOPS   	INC     	A
	        	CJNE    	A,#$07,LOOPS
	QUIT    	SJMP    	QUIT

เมื่อคีย์โปรแกรมเรียบร้อยแล้วก็เข้าสู่ขั้นตอนของการสั่งแปลภาษาแอสเซมบลีให้เป็น machine code โดยสั่งดังนี้ครับ

	asm51 	test01  	-i

ส่วนถ้าผู้อ่านใช้ assembler ตัวอื่นที่ไม่ใช่ assembler ในชุด Micro-C51 ก็ให้แก้ไขส่วนของโปรแกรมให้เหมาะสม กับ assembler ที่ท่านใช้อยู่ด้วยนะครับ (เดี๋ยวทำงานไม่ได้แล้วจะมาโทษว่าผมวางยาไม่ได้นะครับ :-D) ... เมื่อทำการคอมไพล์เสร็จก็จะได้ไฟล์ .HEX มา ตอนนี้เราก็พร้อมจะใช้งานโปรแกรมจำลองการทำงาน ของชิพ MCS-51 กันแล้ว (แต่ก่อนอื่น ผู้อ่านจะต้อง download โปรแกรม และติดตั้งโปรแกรมให้เรียบร้อยก่อนนะครับ) ... เมื่อเราเรียกโปรแกรม TS Controls Emulator 8051 มาใช้งาน ก็จะแสดงหน้าจอเหมือนรูปด้านบนครับ เสร็จแล้วเราสั่ง เปิดไฟล์ แล้วจะมีหน้าต่างดังรูปด้านล่าง

ตอนนี้ให้ click ที่ปุ่ม ... แล้วจะแสดงหน้าต่างดังนี้

ในขั้นตอนนี้ให้เราเปิดไฟล์ test01.hex ที่เราได้คอมไพล์เสร็จแล้วขึ้นมา หลังจากนั้นก็กด OK ไปเรื่อยๆ จน กว่าจะกลับมาที่หน้าจอหลักของโปรแกรม .... เมื่อเรากลับมาที่หน้าจอหลักของโปรแกรม ให้สังเกต หน้าจอที่เขียน title ว่า disassembler code ... ก็จะเห็นว่า มันแสดงข้อมูลของโปรแกรมของเราขึ้นมา และที่น่าสังเกตก็คือ ที่บรรทัด 0000 ... มีพื้นเป็นสีดำ และตัวอักษรสีขาว นั่นแสดงว่า บรรทัดนั้นเป็นบรรทัดเริ่มต้นทำงาน ดังรูปด้านล่าง

และหน้าต่างที่สำคัญอีกที่หนึ่งก็คือ หน้าต่างที่แสดงข้อมูลใน register ดังรูปด้านล่างครับ

มาถึงตรงนี้แสดงว่าเราพร้อมแล้วที่จำทำการทดลองให้โปรแกรมทำงาน ... ปุ่มที่เราจะใช้สำหรับสั่งให้โปรแกรม ทำงานทีละคำสั่งก็จะเป็นปุ่มด้านซ้ายสุดของรูปด้านล่างนี้ครับ

แต่ถ้าเราต้องการให้ reset แล้วเริ่มโปรแกรมใหม่ ก็สามารถสั่งได้จากเมนู คือ Run แล้ว เลือก Reset (ดูรูปด้านล่างประกอบ) หลังจากนั้นโปรแกรมก็จะเริ่มต้นใหม่ทั้งหมด

เอาล่ะครับ มาทดลอง debug โปรแกรมกัน ให้กดปุ่ม Step Info Next Instruction หรือกดแป้น F11 ก็ได้ แล้วแถบสีดำก็จะเลื่อนไป อยู่ที่ตำแหน่ง 0002 ดังรูปด้านล่าง แล้วให้สังเกตที่หน้าต่างของรีจิสเตอร์ด้วยนะครับว่า PC จะเปลี่ยนค่าจาก 0000 เป็น 0002

เมื่อกด F11 อีกครั้ง โปรแกรมก็จะเลื่อนไปที่ 0003 โดยสังเกตจากรูปด้านล่างดูจะเห็นว่า PC เปลี่ยนเป็น 0003 และ ACC เปลี่ยนเป็น 01 เหตุที่ ACC เปลี่ยนจากเดิม คือ 00 เป็น 01 ก็เพราะเราได้เขียนโปรแกรมที่ตำแหน่ง 0002 เอาไว้ว่า INC A ซึ่งมีความหมายว่า ให้เพิ่มค่า ACC ขึ้น 1 หรือเขียนเป็นภาษาซีได้เป็น ACC = ACC+1 นั่นเอง

เมื่อสั่งทำงานอีก 1 คำสั่ง ก็จะเป็นดังรูปด้านล่าง จะเห็นว่า PC เปลี่ยนเป็น 0002 และโปรแกรมกลับไปทำงานที่ ตำแหน่ง 0002 อีกครั้ง ทั้งนี้เพราะที่ตำแหน่ง 0003 เราสั่งเอาไว้ว่า CJNE A,#07,0002 ซึ่งหมายความว่าให้ทำการตรวจสอบว่า ค่าที่เก็บใน ACC หรือ A นั้นมีค่าเป็น 7 หรือไม่ ถ้าไม่ใช่ให้กระโดดไปทำงานที่ตำแหน่ง 0002 (CJNE = Compare Jump if Not Equal) ...

เมื่อเราสั่งทำงานทีละบรรทัดไปเรื่อย ๆ จะเห็นว่าค่าของ ACC จะเพิ่มขึ้นมาทีละ 1 จนสูดท้ายเมื่อ ACC เป็น 07 ดังรูปด้านล่าง

แล้วเราสั่งทำงานต่อ ก็จะเห็นว่าโปรแกรมก็จะกระโดดมาทำงานที่ 0006 (ดังรูปด้านล่าง) แทนที่จะเป็น 0002 ทั้งนี้ เพราะตอนนี้ ACC เท่ากับ 07 ตามเงื่อนไขแล้วนั่นเอง ... ตอนนี้ไม่ว่าเราจะกดสั่งให้โปรแกรมทำงานสักกี่ครั้งก็ตาม ผลที่ได้ก็คือ จะไม่มีการกระโดดไปทำงานที่ใดเลย ทั้งนี้เนื่องจากเราเขียนโปรแกรมเอาไว้ว่า SJMP 0006 ซึ่งหมายความว่าให้กระโดด ไปทำที่ตำแหน่ง 0006 ซึ่งก็คือตำแหน่งที่คำสั่ง SJMP 0006 อยู่นั่นเอง ทำให้โปรแกรมกระโดดมาที่นี่เรื่อยๆ ไม่รู้จบ สาเหตุที่ต้องทำอย่างนี้ก็เพราะว่า ใน MCS-51 ไม่มีคำสั่งให้ไมโครคอนโทรลเลอร์หยุดทำงาน เราจึงจำเป็นที่จะต้องสั่งอย่างนี้ เพื่อให้โปรแกรมของเราหยุดทำงาน

เป็นอย่างไรบ้างครับกับโปรแกรมจำลองการทำงานของชิพ MCS-51 ... จะเห็นว่า ถ้าเราอยากศึกษาเขียนโปรแกรม ภาษาแอสเซมบลีกับ MCS-51 เราก็ไม่จำเป็นที่จะต้องมีบอร์ดคอนโทรลเลอร์ก็ได้ ลองทดลองศึกษาคำสั่งต่างๆ จากโปรแกรม จำลองการทำงานดูก่อน เมื่อเข้าใจดีแล้วค่อยจัดหาบอร์ดมาใช้งานกันอีกครั้งก็ยังไม่สายครับ ... บทความนี้คงจบเพียงเท่านี้ก่อน ครับ ... คราวหน้าผมจะเอาโปรแกรมทดลองติดต่อกับ KEY Pad บนบอร์ด ET-BOARD V6 ด้วยภาษาซี มาเป็นตัวอย่างให้ นำไปศึกษาครับ ...


เขียนโดย : ศุภชัย บุศราทิจ
Author : Supachai Budsaratij
e-mail : raek@se-ed.net
วันที่ทำการปรับปรุง : ๖ ก.ย. ๒๕๔๓, ๑๒ ก.ย. ๒๕๔๓