การแทรก assembly ในภาษา C

การแทรก assembly ในภาษา C

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

  • เริ่มจากการสร้าง Project ตามปกติ Keil จะถามเราว่า ต้องการจะ copy ตัว Start up code เข้าไปใน Project ไหม ให้กด No

รูปที่ 1

  • จากนั้นก็ทำการสร้าง File.C ขึ้นมาแล้ว Add เข้าไปใน Project
//************************************************************************//
//Project : insertasm
//Description : Inline assembly
//Device : 89S52
//XTAL : 11.0592 MHz
//By : ThaiEmbedded 2007
//************************************************************************//
#include <REGX51.H>//————————————————————————//
// Delay (mSec)
//————————————————————————//
void dmsec(unsigned int cnt)
{
?????unsigned char i;
?????while(cnt)
?????{
??????????for (i=1;i<=228;i++);
??????????cnt–;
?????}
}
//————————————————————————//
// Main
//————————————————————————//
void main (void)
{?????while(1)
?????{
??????????#pragma ASM
??????????MOV P0,#0FH
??????????#pragma ENDASM
??????????dmsec(300);??????????#pragma ASM
??????????MOV P0,#0F0H
??????????#pragma ENDASM
??????????dmsec(300);
?????}
}
  • ที่ Project Window Tab แรกเราจะเห็น File.C ที่เรา add เพิ่มเข้ามา ให้คลิกขวา
  • เลืือก Option for

รูปที่ 2

  • ติ๊ก Generate Assembler SRC file
  • ติ๊ก Enable Assemble SRC file.
  • ทำการ compile เราจะได้ HEX file ออกมา

เมื่อนำไปต่อกับ hardware จริงเราจะเห็น LED ติดสลับกันที่ละ 4 ดวง

null

รูปที่ 3 วงจรที่ใช้ในการทดลอง

Download Code การแทรก assembly ในภาษา C

เขียนโปรแกรมไมโครคอนโทรลเลอร์ด้วยภาษา C

เขียนโปรแกรมไมโครคอนโทรลเลอร์ด้วยภาษา C

จากประสบการณ์ที่ผ่านมาการเขียนโปรแกรมให้ไมโครคอนโทรลเลอร์ด้วยภาษาแอสเซมบลีมีการทำงานที่รวดเร็วดี แต่กว่าจะเขียนได้แต่ละโปรแกรมนั้นใช้เวลามาก อีกทั้งยังไม่สามารถเขียนภาษาแอสเซมบลีในระบบใหญ่ๆได้อีกด้วย เพราะมันจะยุ่งยาก เมื่อลองศึกษาดูแล้วมีโปรแกรมที่ช่วยแปลงภาษา C เป็น HEX code ได้เลย โปรแกรมที่ว่านี้คือ KEIL C51 ซึ่งสามารถดาวน์โหลดได้ที่ http://www.keil.com เป็นเวอร์ชั่นทดลองใช้ หลายคนสงสัยว่าจะทำไงถึงจะแปลงภาษา C เป็น HEX code ได้ เอาละมาลองเขียนกันเลยดีกว่าครับ

สร้างโปรเจค

  • เปิดโปรแกรม u Vision2, สร้างไฟล์โปรเจคและเลือก CPU ที่จะใช้จาก device database
  • เขียน source code และเพิ่มเข้าไปใน source file ของโปรเจค
  • ตั้งค่า tool option สำหรับฮาร์ดแวร์ปลายทาง
  • สร้างโปรเจคและ HEX ไฟล์สำหรับ PROM

อ่านดูอาจจะงงลองมาทำ step-by-step ดีกว่าครับผมจะบอกขั้นตอนอย่างละเอียด

เปิด u Vision2 และ สร้างไฟล์โปรเจค

เมื่อเปิดโปรแกรมมาแล้วถ้าต้องการสร้างโปรเจคให้คลิกที่เมนู Project – New Project… มันจะมีหน้าต่างถามชื่อโปรเจค ตัวอย่างนี้จะตั้งชื่อว่า test.uv2 ซึ่งคุณอาจจะตั้งชื่ออื่นก็ได้ เมื่อ OK ไปแล้วจะมีหน้าต่าง Select Device for Target ให้คุณเลือก CPU สำหรับโปรเจคของคุณ ในตัวอย่างนี้ผมเลือก Atmel – 89C51

รูปที่ 1 Select device

รูปภาพทางขวามือด้านล่างจะมี File,Regs,Books เราเรียกว่า Project Window คุณสามารถดูคู่มือ CPU ได้จากหน้าต่าง Project Windows – Books

เขียนโปรแกรม

คุณสามารถสร้างโปรแกรมขึ้นใหมได้โดยคลิกที่เมนู File – New หลังจากนั้นจะมีหน้าต่างว่างๆ ไว้ให้คุณพิมพ์โปรแกรมภาษา C ใส่ลงไป โปรแกรม u Vision จะมีสีบ่งบอกคำสั่งในโปรแกรม เมื่อต้องการ save โปรแกรม ให้ไปที่ File – Save As… ไฟล์ที่บันทึกจะมีนามสกุลเป็น *.C. สมมติผมตั้งชื่อว่า main.c จะได้

รูปที่ 2 หน้าต่างเขียน code

หลังจากนั้นให้เราเอา source file ใส่ลงไปในโปรเจค ให้คุณเข้าไปคลิกที่เครื่องหมาย + หน้า Target 1 ในหน้าต่าง Project window – Files มันจะแตกย่อยออกมาเป็น Source Group 1 ให้คลิกขวาที่ตรงนี้ แล้วเลือก Add Files to Group ‘Source Group 1′ เลือก main.c ที่คุณเพิ่งสร้างไป

รูปที่ 3 Project window

สร้าง Startup Code

ไฟล์ STARTUP.A51 เป็นไฟล์ Startup Code สำหรับ CPU ตระกูล 8051 ไฟล์นี้มีไว้สำหรับเคลียร์หน่วยความจำต่างๆ และตั้งค่าเริ่มต้น (Initial) ให้กับฮาร์ดแวร์ ไฟล์ STARTUP.A51 จะอยู่ที่โฟลเดอร์ C:\KEIL\C51\LIB

เพื่อป้องกันข้อผิดพลาดจากข้อมูลที่ค้างอยู่ใน CPU เราควรจะใส่ตัว Startup ไว้ด้วย ขั้นตอนมีดังนี้ ให้คุณไปที่ Project Window – File แล้วคลิกขวาที่ main.c เลือก Targets,Groups,Files… แล้วพิมพ์ System Files ในหน้าต่าง Groups/Add File แล้วกด Add จากนั้นเลิอกที่ System Files แล้วกด Add Files to Group เลือก STARTUP.A51

??

รูปที่ 4 Start up code

การตั้งค่าอุปกรณ์ต่างๆ

u Vision 2 ให้คุณได้สามารถตั้งค่าฮารด์แวร์ปลายทางได้โดยคลิกที่ปุ่ม Options for Target คุณสามารถตั้งค่าหน่วยความจำได้ใหม่

รูปที่ 5 Options for Target

สร้างโปรเจคและ HEX ไฟล์

มาถึงขั้นตอนสุดท้ายแล้วครับ ให้เช็คดูว่าโปรแกรมถูกต้องหรือเปล่าจากนั้นให้กดปุ่ม Build Target ถ้าไม่มีอะไรผิดพลาดก็จะปรากฎหน้าต่างแบบนี้ขึ้นมาแสดงว่าโปรเจคที่เราสร้างมาใช้ได้แล้ว ให้ทดสอบดูโดยการ Simulate ดูว่าทำงานถูกต้องหรือเปล่า

รูปที่ 6 หน้าต่าง Output

ถ้าต้องการ HEX ไฟล์ไปใช้งานให้กด Option for Target – Output แล้วคลิกที่ Create HEX file แล้วกดที่ Build Target อีกทีคุณจะได้ HEX ไฟล์ไปโปรแกรมลง microcontroller ตัว HEX ไฟล์นี้จะอยู่ในโฟลเดอร์ที่คุณเซฟ ลองทำดูนะครับ