contact  us  
 
 
 
  โรงงานอุตสาหกรรม
  โรงสี โรงมัน
  ซื้อขายหน้าร้าน
  ไมโครคอนโทเลอร์
  โปรแกรมโรงแรม
  โปรแกรมไฟแนนซ์
  โปรแกรมจัดการเอกสาร
  โปรแกรมขนส่ง
  รวมทุกโปรแกรม
  โปรแกรมอื่น ๆ
  Demo Product
  โครงสร้าง
  เครื่องจักร
จำหน่าย Source Code
วิธีการ SET
แลกเปลี่ยน Source Code
ProductController
  กันขโมยส่ง sms
  วัดสัญญาณเข้า computer
  เแปลงสัญญาณ
  เครื่องวัดอุณหภูมิ
SoftwareArticle
  Visual C++
  Visual Basic
  Assmbly
  Ladder PLC
  SCADA
  Delphi
  FoxPro
Electric Design
  ออกแบบระบบไฟฟ้า
  ตารางไฟฟ้า
 

 

หจก .ซอฟท์แอนด์แวร์ 872/1 ต.บ้านเกาะ อ.เมือง จ.นครราชสีมา 30000 : จำหน่ายและออกแบบโปรแกรมทุกชนิด ...โทร 044-372160
 
 
 
[ 10 ข้อควรจำสำหรับภาษา Assembly ของ MCS-51]
พบ 2 หน้า      หน้าก่อนนี้ << >> หน้าถัดไป     หน้าที่ 1 จาก 2 
  3. ชื่อ Register หรือ Bit ... กำหนดให้ถูกกับการใช้งาน
ใน MCS-51 จะมีมุมมองจากจุดต่าง ๆ กัน  เพราะฉะนั้นจะมีชื่ออ้างอิงที่ต่างกันด้วย  ทั้งนี้การที่ผู้ผลิตชิพ
ออกแบบไว้อย่างนี้  ก็เพื่อให้ชุดคำสั่งใช้ได้อย่างมีประสิทธิภาพโดยไม่สับสน  ชื่อจะมีอยู่ 3 แบบ คือ
    ชื่อเฉพาะ เช่น A, R2, C(Carry), DPTR
    ชื่อ Bit เช่น INT1, T0, T1, CY(Carry)
    ชื่อ SFR (Special Function Register) เช่น ACC, B, DPH, P1, PSW, TCON
ชื่อทั้ง 3 กลุ่มนี้ บางตัวก็คือตัวเดียวกัน  แต่มองจากคนละมุม  เช่น A และ ACC , C และ CY  ทั้งนี้เพื่อ
ให้เข้ากับชุดคำสั่งของแต่ละประเภท  ตัวอย่างเช่น  คำสั่ง PUSH จะกำหนดให้ตามด้วยชื่อแบบ Direct
เพราะฉะนั้นจะต้องใช้เป็น  PUSH ACC  จะใช้เป็น PUSH A ไม่ได้  ชื่อ Direct ในที่นี้ยังหมายถึงชื่อ
ที่เรากำหนดเองก็ได้จากคำสั่ง DS หรือ EQU ด้วย   อีกตัวอย่างเช่น  คำสั่ง JB bit,rel  ถ้าเราใช้เป็น
JB CY,rel  ก็จะทำงานเหมือนคำสั่ง JC rel เช่นกัน โดยมี Op-Code ที่แตกต่างกัน  ทั้งนี้ CY จะเป็นชื่อ
ที่มองในฐานะของ Bit Address  ส่วน C จะเป็นชื่อที่เป็นรูปแบบของคำสั่งไปเลย   เราจะต้องเข้าใจ
คำสั่งแต่ละคำสั่งให้ชัดเจน  จึงจะสามารถอ้างอิงได้ถูกต้องตามขบวนท่า  นอกจากนี้  ชื่อ SFR ยังมี
ความสามารถในการใส่จุดหลังชื่อได้อีก  ซึ่งจะทำให้เรียกใช้งานได้ในหลายรูปแบบ   ตัวอย่างเช่น
P3.3 จะเหมือนกับ INT1 (คือ SFR ชื่อ P3 บิทที่ 3) , PSW.7 จะเหมือนกับ CY นั่นเอง
  4. Boolean Processor ต้องใช้ให้คุ้ม
MCS-51 มีความสามารถในเรื่องบิทที่ดีมาก ซึ่งจะต้องนำมาใช้ประโยชน์ให้คุ้มค่า  โดยเฉพาะอย่างยิ่ง
ในเรื่องของการกำหนด Flag ต่าง ๆ    พื้นที่ใน Internal RAM ส่วนหนึ่งคือ 20-2FH (16 Byte,128 Bit)
และพื้นที่ SFR ที่มี Address ลงท้ายด้วย 0 และ 8 จะสามารถอ้างอิงถึงในระดับบิทได้  เปรียบเสมือนมี
Register 1 บิท ซึ่งนำมาเปรียบเทียบได้ , move ได้ , กำหนดให้เป็น 0 หรือ 1 ได้  รวมทั้งทำการ Jump
ตามค่าบิทนั้น ๆ ได้ด้วย   การใช้งาน MCS-51 โดยไม่ได้ใช้คำสั่งเกี่ยวกับบิทเลย  คงจะเป็นเรื่องแปลกทีเดียว
  5. ใช้ Registor ขนาด 16 บิทอย่างเหมาะสม
หลายคนคงรู้สึกอึดอัดใจกับ MCS-51 ในเรื่องการอ้างอิง Address แบบ 16 บิท  ซึ่งมี DPTR เพียงตัวเดียว
และยังทำการ Increment ได้อย่างเดียว  โดยไม่สามารถ Decrement ได้  ในเรื่องนี้ถ้าเราใช้ External
RAM เพื่อการเก็บข้อมูลอย่างเหมาะสม  ก็จะไม่รู้สึกถึงปัญหานี้แต่อย่างใด   MCS-51 ได้ออกแบบโดยให้
ใช้งานที่ Internal RAM เป็นหลัก  เพราะฉะนั้นไม่ต้องคิดมาก พยายามใช้งานให้สอดคล้องตามที่เขาออก
แบบมา ... สบายมาก
  6. อักษรที่ต้องจำให้ขึ้นใจ (# และ @)
ในภาษา Assembly ของ MCS-51 อักษรทั้ง 2 ตัวนี้จะพบบ่อย ๆ และมักจะทำให้ผู้เริ่มสับสนได้พอสมควร
อักษร # จะใช้แทนค่าคงที่  เช่น คำสั่ง MOV A,#40H  คือการนำค่า 40H เก็บไว้ใน Register A  ถ้าไม่ได้ใส่
อักษร # ไว้ก็จะเป็น MOV A,40H  ซึ่งจะมีการทำงานไปคนละเรื่องเลย  คือการนำค่าจาก Internal RAM
ตำแหน่งที่ 40H ไปไว้ใน Register A   ส่วนอักษร @ จะใช้ในความหมายของ In-direct  คือการอ้างถึง
หน่วยความจำผ่านทาง Register อีกที  เช่น MOV A,@R0  คือการนำค่าใน Internal RAM ที่ถูกชี้ด้วย R0
มาเก็บไว้ใน Register A  หรือเช่น MOVX A,@DPTR  คือการนำค่าใน Data Memory ที่ถูกชี้ด้วย DPTR
มาเก็บไว้ใน Register A
  7. คำสั่งที่อาจจะสับสนได้
คำสั่งของ MCS-51 หลายคำสั่งที่ให้ความหมายไม่เหมือนกับคำสั่งของชิพตระกูลอื่น ๆ (โดยเฉพาะ Z80)
ซึ่งอาจจะทำให้สับสนได้ (ใครทำให้ใครสับสนก็ไม่รู้)  พอจะรวบรวมได้ดังนี้ ...
คำสั่ง RLC และ RL หมายถึงการ Rotate Left แบบผ่าน Carry และไม่ผ่าน Carry ตามลำดับ
    (Z80 จะให้ความหมายตรงข้ามกันเลย)
    คำสั่ง JNZ และ JZ หมายถึงการกระโดดไป เมื่อ A ไม่เท่ากับ 0 และ A เท่ากับ 0 ตามลำดับ
สำหรับ MCS-51 จะตรวจสอบจากค่า A โดยตรง  คือไม่ได้มี Zero flag เหมือน Z80  เพราะฉะนั้น
    จะใช้ที่จุดใด  ต้องแน่ใจว่าก่อนหน้านั้นมีการกระทำกับ Register A เสียก่อน
    คำสั่ง SUBB หมายถึงคำสั่งลบเลข  โดยใน MCS-51 จะสนใจค่า Carry ด้วยเสมอ  คือถ้าเป็นการ
    เริ่มต้นลบ  จะต้องทำการ Clear Carry (CLR C) ก่อนเสมอ
    คำสั่ง CJNE หมายถึงการ Compare  ซึ่งจะทำการกระโดดไป เมื่อค่าไม่เท่า  แต่ถ้าจะกระทำการ
    เปรียบเทียบในเชิงค่ามากกว่า,น้อยกว่า  ก็ทำได้เช่นเดียวกัน โดยการให้กระโดดไปยังบรรทัดต่อไป
    และใช้คำสั่ง JNC และ JC ได้ตามต้องการ (ไม่สามารถใช้ JNZ และ JZ ได้) ตัวอย่างเช่น
    CJNE A,B,$+3    (อักษร $+3 เป็นการบอกให้ตัวแปลรับรู้ โดยอ้างถึงตำแหน่ง ณ คำสั่งนี้ บวกไปอีก 3 Byte)
    JNC ...                   ให้กระโดดไปที่ ... ถ้า A < B
    หรือ
    JC ...                      ให้กระโดดไปที่ ... ถ้า A => B
  8. Interrupt ... เลือกใช้ให้เหมาะสม
เนื่องจาก MCS-51 มีโครงสร้างการ Interrupt ให้ใช้จากแหล่งหลาย ๆ อย่าง  จึงทำให้ผู้เขียนโปรแกรมมีทาง
เลือกวิธีการใช้ได้มากขึ้นด้วย   อย่างไรก็ตาม ใน Interrupt Routine จะต้องพยายามทำให้กระชับ และทำงาน
อย่างรวดเร็วที่สุดเท่าที่จะทำได้   ทั้งนี้ในระหว่างที่ทำงานอยู่ใน Interrupt Routine นี้  ถ้าเกิดมีกรณีการ
Interrupt ซ้อนกันอีกครั้ง  ระบบจะไม่ตอบสนองการ Interrupt นั้น ๆ จนกว่าจะจบการทำงานของ Routine
ที่มีกำลังทำอยู่ (คือเจอคำสั่ง RETI)  การ Interrupt ซ้อนกัน 1 ครั้งจะไม่มีปัญหาใด ๆ กับระบบ เพราะ MCS-51
จะยังคงตอบสนองได้ครบถ้วน   แต่ถ้ามีการ Interrupt ซ้อนกันมากกว่า 1 ครั้ง (หมายถึงจากแหล่งเดียวกัน) 
ก็จะทำให้การตอบสนองผิดพลาดไปได้ 
  9. P0,P1,P2,P3 ... ใช้เป็น Active Low ให้หมด
เมื่อเปิดไฟเข้าระบบ  หรือเมื่อทำงาน Reset ตัว MCU แล้ว  ขาสัญญานทั้ง 4 Port จะมีสถานะเป็น 1 เสมอ
เพราะฉะนั้น  ถ้ามีการนำขาสัญญานไปขับวงจรใด ๆ แล้ว  ต้องคำนึงเสมอว่าให้วงจรทำงานแบบ Active Low
คือทำงานเมื่อเป็น 0   เช่นถ้านำไปขับวงจร Relay  วงจรนี้จะทำให้ Relay ON เมื่อเป็น 0   ด้วยการออกแบบ
ที่ถูกต้องนี้  จะช่วยให้งานมีความสมบูรณ์ในการใช้งานเป็นอย่างดี
  10. ไมโครคอนโทรลเลอร์ ก็คือ ไมโครคอนโทรลเลอร์
ความหมายของข้อนี้ก็คือ  ให้ไมโครคอนโทรลเลอร์ทำงานของมันอย่างที่ควรเป็น  ถ้าจะทำระบบที่ซับซ้อนมาก ๆ 
หรือมีการเก็บข้อมูลอย่างมหาศาล  หรือมีความเร็วสูงแบบไม่เห็นฝุ่น   บางทีอาจจะต้องทบทวนก่อนว่า  ระบบ
ไมโครคอนโทรลเลอร์จะสามารถทำได้อย่างที่ต้องการหรือไม่  เพราะชื่อของมันก็บอกอยู่แล้วว่า  สำหรับการ
Control หรือการควบคุมนั่นเอง   การนำไปใช้กับระบบที่เกินขอบเขตของมัน  อาจจะต้องแยกงานเป็นส่วน ๆ
และใช้ MCU หลาย ๆ ตัวช่วยกันทำงาน  หรืออาจจะออกแบบให้ทำงานร่วมกับเครื่อง PC  หรือถ้ายังไม่ไหว
ก็เปลี่ยนไปใช้ MCU ที่มีขนาดใหญ่ ๆ ตามไปด้วยเลยจะดีกว่า
พบ 2 หน้า      หน้าก่อนนี้ << >> หน้าถัดไป     หน้าที่ 1 จาก 2 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

:::www.softanware.com ::

Home | Download | Member | Customer | Webboard | contact us | Guestbook | Fortune

หจก .ซอฟท์แอนด์แวร์ (softanware)
872/1 ม.1 ถ.สุรนารายณ์ ต.บ้านเกาะ อ.เมือง จ.นครราชสีมา 30000
โทรศัพท์ 044-372160 โทรสาร 044-372161
:: Email softanware@yahoo.com :::