microprocessor and microcontroller architectures and ... 04_programming.pdft h e b o a r d p r o t o...

49
Life cycle of a microcontroller project หลังจากกาหนดเป้ าหมายของโครงงาน แล้ว ขั ้นตอนต่อมาคือการรวบรวม ความคิด (brain storming) และการ ออกแบบ hardware ซึ่งต้องคานึงถึง ปัจจัยทางกายภาพต่างๆ เช่น ระดับ แรงดัน ตาแหน่งและขาของอุปกรณ์ ฯลฯ เพราะส่วนของการโปรแกรมนั้นเป็นส่วนทีมีความยืดหยุ ่นมากกว่าการออกแบบ hardware หลังจากนั้นการโปรแกรมจะ ทาภายใต้ข้อจากัดของ hardware ทีออกแบบไว้แล้ว Hardware design Programming & debugging Transfering to the board Prototype, Testing Brain Storming รูปที 1 การนาโปรแกรมที่เขียนแล้วไปบรรจุในไมโครคอนโทรลเลอร์สามารถทาได้หลายวิธีขึ ้นอยู ่กับชนิดของหน่วยความจาในตัว ไมโครคอนโทรเลอร์เอง โปรแกรมที่ถูกสร้างเป็น HEX file โดย compiler จะถูกบันทึกลงหน่วยความจาโปรแกรม (program memory) ซึ่งส่วนใหญ่จะเป็น ROM สิ่งที่ควรคานึงถึงคือ ความเป็นไปได้ที่ระบบจะสามารถทางานได้ในครั ้งแรกๆที่ทดลองใช้งานนั ้นมีน ้อยมากเพราะฉะนั ้น ผู ้ออกแบบระบบจึงต้องมีความอดทนและพยายามพอสมควร 1. Basic Programming Techniques Programming คืออะไร จากปัญหาที่ต้องแก้ หรืองานที่เราต้องการทา จะมีวิธีการที่เป็นขั้นตอนที่ใช้ในการแก้ปัญหาเรียกว่า Algorithms Algorithms สามารถอธิบายได้ด้วยภาษาหรือสัญลักษณ์ต่างๆ เช่น 1 เอาช้อนตักข้าว 2 ยกช้อนขึ ้นเอาข ้าวเข้าปาก 3 เคี้ยวและกลืน 4 ทาตามข้อ 1-3 จนกว่าข้าวจะหมด หรือ รู ้สึกอิ่ม ถ้า Algorithms นี้ถูกต ้อง เราจะสามารถกินข้าวได้จนถึงปริมาณที่ต้องการ เนื่องจาก Computer ไม่สามารถที่จะเข้าใจภาษา พูดในลักษณะนี้ได Algorithm จึงต้องถูกเปลี่ยนให้อยู ่ในรูปแบบที่เหมาะสม ที่เรียกว่า Programming language การเปลี่ยน นี้ จึงเรียกว่า Programming หรือ Coding โดยทั่วไปแล้วคาว่า Programming ไม่ใช่แค่การ Coding เท่านั้น แต่จะรวมถึงการออกแบบตัวโปรแกรมทั้งหมด และการ กาหนดโครงสร้างของข้อมูลด้วย โปรแกรมที่ดีมาจาก ส่วนประกอบหลายๆ อย่าง เช่นความสามารถของเรา ในการจัดสรรทรัพยากรของระบบ รวมไปถึงการ

Upload: duongngoc

Post on 17-Mar-2018

217 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Life cycle of a microcontroller project

หลงจากก าหนดเปาหมายของโครงงานแลว ขนตอนตอมาคอการรวบรวมความคด (brain storming) และการออกแบบ hardware ซงตองค านงถงปจจยทางกายภาพตางๆ เชน ระดบแรงดน ต าแหนงและขาของอปกรณ ฯลฯ เพราะสวนของการโปรแกรมนนเปนสวนทมความยดหยนมากกวาการออกแบบ hardware หลงจากนนการโปรแกรมจะท าภายใตขอจ ากดของ hardware ทออกแบบไวแลว

Hardware design

Programming & debugging

Transfering to the board

Prototype, Testing

Brain Storming

รปท 1

การน าโปรแกรมทเขยนแลวไปบรรจในไมโครคอนโทรลเลอรสามารถท าไดหลายวธขนอยกบชนดของหนวยความจ าในตวไมโครคอนโทรเลอรเอง โปรแกรมทถกสรางเปน HEX file โดย compiler จะถกบนทกลงหนวยความจ าโปรแกรม (program memory) ซงสวนใหญจะเปน ROM สงทควรค านงถงคอ ความเปนไปไดทระบบจะสามารถท างานไดในครงแรกๆททดลองใชงานนนมนอยมากเพราะฉะนนผออกแบบระบบจงตองมความอดทนและพยายามพอสมควร 1. Basic Programming Techniques

Programming คออะไร

จากปญหาทตองแก หรองานทเราตองการท า จะมวธการทเปนขนตอนทใชในการแกปญหาเรยกวา Algorithms Algorithms สามารถอธบายไดดวยภาษาหรอสญลกษณตางๆ เชน

1 เอาชอนตกขาว

2 ยกชอนขนเอาขาวเขาปาก

3 เคยวและกลน

4 ท าตามขอ 1-3 จนกวาขาวจะหมด หรอ รสกอม

ถา Algorithms นถกตอง เราจะสามารถกนขาวไดจนถงปรมาณทตองการ เนองจาก Computer ไมสามารถทจะเขาใจภาษาพดในลกษณะนได Algorithm จงตองถกเปลยนใหอยในรปแบบทเหมาะสม ทเรยกวา Programming language การเปลยนน จงเรยกวา Programming หรอ Coding

โดยทวไปแลวค าวา Programming ไมใชแคการ Coding เทานน แตจะรวมถงการออกแบบตวโปรแกรมทงหมด และการก าหนดโครงสรางของขอมลดวย โปรแกรมทดมาจาก สวนประกอบหลายๆ อยาง เชนความสามารถของเรา ในการจดสรรทรพยากรของระบบ รวมไปถงการ

Page 2: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

เลอกค าสง/วธการทเหมาะสมเพอใหไดการท างานทรวดเรว และทขาดไมไดกคอ งานเอกสาร ทจะอธบายการท างาน/ การใชงานของโปรแกรม และการจดสรรทรพยากรของระบบ

1.1 Information Representation

ขอมลทกอยางทอยใน Computer จะอยในรปของ กลมของขอมลแบบ Bit กลมของ 8 Bit ขอมลเรยกวา Byte

ขอมลทอยใน Computer น แบงเปนชนดตางๆ คอ

Program representation

Numeric data representation

Alphanumeric representations

1.1.1 Program representation

ค าสง หรอโปรแกรม อยในรปแบบของ Byte เดยว (Short instruction) หรอหลาย Byte (Long instruction) กได รหสนถกก าหนดโดยผสราง Microprocessor

1.1.2 Numeric data representation

การเกบขอมลคาตวเลขใน Computer เกบในรปแบบของเลขฐาน 2 (Binary number)

b7 b6 b5 b4 b3 b2 b1 b0

เลขฐาน 2 เปนสามารถแปลงเลขฐาน 10 ได และในทางกลบกน การเกบขอมลในรปเลขฐานสองมหลายวธ เชน

Binary data เลขฐานสองธรรมดา สามารถใช กฎเกณฑ ทางคณตศาสตรทวไปได

Hexadecimal แทนทจะแสดงขอมลในรปแบบของ Binary กแทนเลข Binary 4 หลก โดยใช 0-9 , A-F แทน เพอใหงายในการจ า

Signed Binary การแทนคาตวเลขทเปนลบ สามารถท าไดโดยก าหนดใช Bit หนาสดของขอมลเปน Bit ของเครองหมาย ( 0 = ‛+‛, 1 = ‚-‚) แตวธการน ไมสามารถกระท าทางคณตศาสตรโดยตรงกบขอมลได

00000001 = 1 และ 10000001 = -1

Two’s Complement โดยการบวก ‚หนง‛ เขากบตวเลขแบบ One’s Complement วธการน สามารถกระท าการทาง Math กบขอมลไดโดยตรงอยางถกตอง

00000011 = 3 และ 11111101 = -3

Fraction การเกบขอมลของคาตวเลขทไมเปนจ านวนเตม เชนทเปนทศนยม สามารถท าไดสองวธดวยกนคอ Fixed point และ Floating point

Page 3: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Fixed point โดยการก าหนดต าแหนงหลกของจด ทตองในการเกบขอมลเลขฐานสอง เชน 1011.11ซงสามารถคดเปนเลขฐาน 10 ได โดยคณคาประจ าหลก (1*23+0*22+1*21+1*20+1*2-1+1*2-2) =11.75 ดงนนแลว ถาในการเกบขอมลมการน า 22 คณเขาไป กจะไดเลขฐานสองทเปนจ านวนเตม ในกรณน ผใชจะตองตดตามต าแหนงของจด ในการค านวณใหถกตองเอง

Floating point โดยการเกบขอมล แยกเปนสองสวน คอ Mantissa (เลขจ านวนเตม) และ Exponent (เลขก าลง) โดยมการใชงานเปน Mantissa * 10Exponent

BCD Representation เปนการใชตวเลขฐาน 2 ในการแทนเลขฐาน 10 โดยตรง ซงใชรหสเลขฐาน 2 เพยง 00002 – 10012 เทานน การใช BCD จะสะดวกในการน าไปใชแสดงผลตอไป (External Data)

Number representations

ตาราง 1

Hexadecimal (base 16) Binary (base 2) Decimal (base 10)

00H 00000000B 0

0FFH 11111111B 255

0AAH 10101010B 170

0FFFFH 1111111111111111B 65535

0FFAAH 1111111110101010B 65450

Alphanumeric representation

การเกบขอมลตวอกษร ท าโดยการใชรหสเลขฐาน 2 ทตรงกบตวอกษร ทตองการ

ในตารางเปนการแสดงรหส ASCII (American Standard Code for Information) ฐาน 16 (MSD LSD) ขอเสยของรหส ASCII คอ ไมสามารถแทนภาษาทไมใชภาษาองกฤษได

ตาราง 2 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 2 SP ! " # $ % & ' ( ) * + , - . / 3 0 1 2 3 4 5 6 7 8 9 : < = > ? 4 @ A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ \ ] ^ _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { | } ~ DEL

Page 4: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

ตาราง 3 Characters Representation

Hexadecimal (base 16) Binary (base 2) Character

0EH 0001110B ‘a’

015H 0010101B ‘R’

017H 0010111B ‘r’

000H 0000000B NUL

068H 1101000B CR

1.2 Program development step

1.2.1 Defining the Problem

ในการเขยนโปรแกรมตองก าหนดหรอหาใหไดวา การท างานของโปรแกรมทตองการ นนเปนเชนไร สรปออกมาแลวเขยนเปน ล าดบขนตอนของสงทตองการใหท า เชน

1. อานคาของอณหภม จาก Sensor 2. ท าการปรบคาใหถกตอง โดยการบวกเพมอก 7 องศา 3. เกบคาขอมลทไดน เขาในหนวยความจ า

1.2.2 Representing Program Operation

ขบวนการหรอสมการทใชในการแกปญหาหนงๆ จะเรยกวา Algorithms การทจะแสดง หรออธบายตว Algorithm นสามารถท าไดสองวธการใหญๆ คอ

Flowcharts

จะท าโดยการใชสญลกษณ มาเรยงตอกนเพอแสดงขนตอนการท างาน

Process DecisionData

Input/Output

START Sub-routineOn-page

ConnectorOff-Page Connector

รปท 2 แสดงสญลกษณตางๆของการเขยน Flow chart

Page 5: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

ตวอยางเชน ถาตองการให Computer เกบขอมลของอณหภม ทกๆ ชวโมง เปนเวลา 1 วน และส าหรบขอมลทเกบมาไดจะตองปรบใหถกตองกอนโดยการบวกคาอก 7 กอนทจะน าไปเกบในหนวยความจ า

Structured Programming and Pseudo code

ส าหรบโปรแกรมทมขนาดใหญแลว การแสดงการท างานทงหมด โดยใช Flowchart เพยงอนเดยว จะมความซบซอนมากเกนไป และผทมาศกษาในภายหลง กจะท าความเขาใจไดยาก

ในการออกแบบโปรแกรมทมการท างานซบซอนจะท าในหลกการของ Top-Down Design โดยการท างานทงหมดจะถกแบงออกเปน Module ยอยๆ ดงนนใน Flowchart ระดบบนสดจะแสดงถงโครงสรางทงหมดของการท างาน และล าดบการท างานของ Module ตางๆ ส าหรบในแตละ Module จะถกแสดงดวย Flowchart ของ Module ยอยๆ ตอลงไปอก การแบงจะท าตอไปเรอยๆ จนกระทงถงระดบทสามารถเขาใจไดในการท างานของ Computer หรอในอกวธการหนงทตรงขามกนคอ Bottom-Up Design วธการน ท าการออกแบบสรางโปรแกรมในสวนยอยๆ ขนมากอน แลวกคาดหวงวา Module ยอยๆ เหลานมนจะสามารถท างานรวมกนได รปท 3 แตโดยทวไปส าหรบการออกแบบโปรแกรมจะใชวธการทงสองนรวมกน คอ ในตอนแรกท าการออกแบบการท างานโดยรวมทงหมด จากนนในการสรางเปนโปรแกรม จะท าการเขยนและทดสอบ Module ยอยๆ กอนจากการพฒนาของวธการเขยนโปรแกรม จนไดขอสรปวา การท างานของโปรแกรม Computer จะสามารถแบงไดเปน 3 แบบใหญๆ คอ

Sequence เปนการท างานตามล าดบขน

Decision or Selection (IF-THEN-ELSE) เปนการตดสนใจหรอเลอกการท างานตามเงอนไข

Repetition or Iteration (WHILE-DO) เปนการท างานซ าถาเงอนไขเปนจรง จากการท างานทง 3 น สามารถน ามาจดใหมเพอใหเปน ค าอธบายการท างานแบบตางๆ ไดตอไป ซงการแสดง Algorithms ดวยค าอธบายในลกษณะน เรยกวาเปน Pseudo code ซงประหยดพนทมากกวาการใช Flowchart ดงแสดงในตวอยาง

1.3 Standard Programming Structures

START

Read value from sensor

ADD 7

Store in memory

Wait 1 Hour

24 Samples ?

No

END

Yes

Page 6: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

STATEMENT(S)1

STATEMENT(S)2

SIMPLE SEQUENCE FLOWCHART

PSEUDOCODESTATEMENT(S)1STATEMENT(S)2

EXAMPLE GET DATA SAMPLE

ADD 7STORE IN MEMORY LOCATION

IF-THEN FLOWCHART

CONDITION ?

STATEMENT(S)

PSEUDOCODEIF CONDITION THEN

STATEMENT(S)

EXAMPLEIF HUNGRY THEN

GET FOOD

NO

YES

รปท 4

CONDITION?

STATEMENT(S)1 STATEMENT(S)1

IF-THEN-ELSE FLOWCHART

PSEUDOCODEIF CONDITION THEN

STATEMENT(S)1ELSE

STATEMENT(S)2

YES NO

EXAMPLEIF ROOM TEMPERATURE LESS THAN SET POINT THEN

TURN ON FURNACEELSE

TURN OFF FURNACE

รปท 5

Page 7: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

MONDAY?

TUESDAY?

SUNDAY?

MAKE CELERYSOUP

MAKEMINESTRONE

SOUP

MAKEMUSHROOM

SOUP

CASE EXPRESSED AS MULTIPLE IF-THEN-ELSE FLOWCHART

YES

YES

NO

NO

YES

PSEUDOCODEIF MONDAY THEN

MAKE CELERY SOUPELSE IF TUESDAY THEN

MAKE MINESTRONE SOUPELSE IF EWDNESDAY THEN

MAKE ONION SOUP . .

ELSE IF SUNDAY THENMAKE MUSHROOM SOUP

รปท 6

WHILE-DO LOOP FLOWCHART

NO

YES

PSEUDOCODE WHILE CONDITION DO

STATEMENT(S)

EXAMPLEWHILE MONEY LASTS DO

EAT SUPPER OUTGO TO MOVETAKE TAXI HOME

CONDITION?

STATEMENT(S)

รปท 7

Page 8: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

STATEMENT

CONDITION?

REPEAT-UNTIL FLOWCHART

NO

YES

PSEUDOCODEREPEAT

STATEMENT(S) UNTIL CONDITION

EXAMPLEREPEAT

GET DATA SAMPLEADD 7STORE RESULT IN MEMORYWAIT 3 HR

UNTIL 24 SAMPLES TAKEN รปท 8

หลงจากทได Flowchart หรอ Pseudo code แลว การเขยนเปนโปรแกรมจะท าโดยการเลอกค าสงทเหมาะสม มาประกอบกนเพอใหไดการท างานตามตองการ

1.4 การเขยนโปรแกรม

ในการเขยนโปรแกรม นอกจากทจะเลอกชดค าสงทมการท างานตามตองการแลว ยงตองมการจดการทรพยากรตางๆ ในระบบ Microcomputer ดวย เชนการจดสรรหนวยความจ า การควบคมการท างานของสวนประกอบตางๆ เปนตน ดงนนในโปรแกรม จะตองมชดค าสงอกสวนหนงทจะก าหนดคาเรมตนของสวนตางๆ ในระบบ เชนถาในโปรแกรม มการใชงานของ STACK อาจจะตองก าหนดต าแหนงทอยของ STACK ใน Memory กอน และในระบบ Microcomputer ทประกอบดวยอปกรณทสามารถเลอกรปแบบการท างานได มนกจะตองถกก าหนดรปแบบการท างานตงแตแรก หรอถาจะมการใชขอมลใน Memory มนกจะตองมคาเรมตนทแนนอนดวยเชนกน

เราจะสรปสงทตองท าเมอเรมการท างานของโปรแกรมไดดงน

1. Stack pointer (SP) 2. Setup 8255 Programmable port 3. Initialize data variable 4. Set Interrupt mode & interrupt enable flag

ตาราง 4 Standard Program Format

Address Data/Code Labels MNEM. Operand(s) Comments

0000 75 START: MOV SP, #80H ;Initialize Stack pointer

0001 81

Page 9: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

0002 80

0003 E5 MOV A, 08H ;Read value from memory address 0008H

0004 08

0005 24 ADD A, #07 ;Add 7

0006 07

0007 F8 MOV R0, A ;Store result in register B

0008 80 SJMP START ;Start over again

0009 F6

จากตวอยาง โปรแกรมเรมตนโดยการก าหนดพนทของ stack ใหเรมทต าแหนง 80H ใน Data memory และเมอขอมลเขามาจะเรมเกบทต าแหนง 81H, 82H, … ไปเรอยๆ ใน MCS-51 โดยปกตแลว ถาไมมการก าหนด ต าแหนงของ stack เรมทต าแหนง 07H ใน Data memory และเมอขอมลเขามาจะเรมเกบทต าแหนง 08H, 09H, … ไปเรอยๆ

1.5 Documentation

การจดท าเอกสารนนเปนสงจ าเปนทจะชวยใหผอนเขาใจการท างานของโปรแกรมได และยงชวยในการตรวจสอบขอผดพลาดในโปรแกรม ในเอกสารควรแสดง Algorithms ทใช การท างานของ Module ตางๆ การจดการทเกบขอมล และ Register ทใช

1.6 Program format

1.6.1 ลกษณะของภาษาเครอง ภาษาเครอง คอ ภาษาทสงให CPU ดงนนถาจะเขยนโปรแกรมภาษาเครองกบเครองคอมพวเตอรใดๆ ตองรวาเครองนนใช CPU เบอรใด เมอรเบอร CPU แลวกสามารถเปดคมอ CPU นน เพอเขยนโปรแกรมรหสภาษาเครองใหตรงกบเบอรนนได ฟลดของภาษาเครองมเพยง 2 ฟลด คอ ฟลดต าแหนง (Address) และฟลดขอมล (Data) ตาราง 5 โปรแกรมท 1

ภาษาเครอง ภาษาแอสเซมบล Address Data Label Op-code Operand Comment N FC00 USER EQU 0FC00H N 8100 ORG 8100H 8100 90 FC 03 START: MOV DPTR, #USER+3 ;SET POINTER 8103 74 80 MOV A, #80H 8105 F0 MOVX @DPTR, A ;MOVE DATA TO POINTER 8106 90 FC 00 MOV DPTR, #USER 8109 74 49 MOV A, #01001001B 810B 23 LOOP: RL A ;ROTATE LEFT 810C F0 MOVX @DPTR, a

Page 10: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

810D 78 0A MOV R0, #10 810F 79 FA DELAY: MOV R1, #250 ;TIME DELAY 8111 00 DE1: NOP 8112 00 NOP 8113 D9 FC DJNZ R1, DE1 8115 D8 F8 DJNZ R0, DELAY 8117 80 F2 SJMP LOOP END การปอนโปรแกรมภาษาเครองหมายถงการน าขอมลลงในหนวยความจ าของไมโครคอมพวเตอร ตงแตต าแหนงแรกสดถงต าแหนงทายสด

Page 11: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

11

รปท 9 แสดงการเกบโปรแกรมของโปรแกรมท 1 ลงหนวยความจ าตามต าแหนงของขอมล Address Data 8100 90 8101 FC 8102 03 8103 74 8104 80 8105 F0 8106 90 8107 FC

8108 00 8109 74 810A 49 810B 23 810C F0 810D 78 810E 0A 810F 79 8110 FA

8111 00 8112 00 8113 D9 8114 FC 8115 D8 8116 F8 8117 80 8118 F2

รปท 9

1.6.2 ลกษณะของภาษาแอสเซมบล ภาษาแอสเซมบลเปนภาษาทสงกวาภาษาเครอง มความสะดวกในการใชงานมากกวาภาษาเครอง โดยค าสงจะเขยนอยในรปค ายอภาษาองกฤษ เชน MOV ยอมาจาก MOVE หมายถง การยายขอมล หรอค าสง JMP ยอมาจาก JUMP หมายถงการกระโดด จะเหนวาแตละค าสงนนมความหมายในตวเอง และจ าไดงายกวาค าสงในรปรหสฐานสบหกของภาษาเครอง ฟลดของภาษาแอสเซมบลจะแบงแยกออกจากกน แตละฟลดจะถกแบงดวยชองวาง แตละฟลดมขอก าหนดดงน

เลเบลฟลด (Label field) เปนสวนใชส าหรบอางถงในโปรแกรม หรอเปนต าแหนง Address ในการเขยนโปรแกรมเปนภาษา Assembly นนผ เขยนจะไมทราบวา ต าแหนงทอยของรหสค าสงนนๆ อยทใดใน Memory ดงนนจงเปนการสะดวกทจะอางถงต าแหนงทตองการในโปรแกรมโดยการใช Label เชน start : , loop:, loop 2:, f16 : เปนตน

ขอก าหนดทวไปของการตงชอเลเบลมดงน

1. ชอเลเบลควรมความหมายตรงกบงานทท า

2. เปนตวอกษร A ถง Z (เปนตวพมพใหญหรอเลกกได)

3. เปนตวเลข 0 ถง 9

4. เปนสญลกษณพเศษบางตวเชน ขดลาง (_) เปนตน

5. ประกอบไปดวยตวอกษรจากขอ 1 ถง 3 อยางไรกได สวนความยาวขนอยกบตวแปลภาษาทใช (6 – 10 ตว) 6. ขนตนดวยตวอกษรในขอ 2 เสมอ

7. เลเบลตองตามหลงดวยโคลอน (:) ยกเวนค าสงทใชคกบค าสงเทยม EQU

8. หามตงชอซ ากบรหสนโมนคของ CPU หรอค าสงเทยม

Page 12: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

12

นโมนคฟลด (mnemonic field) เปนฟลดค าสงซงมอย 2 ประเภท คอ 1. ค าสงของ CPU (รหสนโมนค) ค าสงประเภทนเราตองดจากของ CPU เชนค าสงเกยวกบ การยายขอมลของไมโครคอนโทลเลอร MCSS 1 จะใชค าสง MOV สวนของ Z – 80 ใชค าสง LD 2. ค าส งเทยม (Pseudo) เปนค าสงทสรางขนมาเพออ านวยความสะดวกในการเขยนโปรแกรม มอยดวยกนหลายค าสง ขนอยกบตวแปลโปรแกรม ตวอยางของค าสงเทยมทเปนมาตรฐานมดงน ORG ยอมาจาก ORIGIN เปนตวก าหนด Address ของค าสงทอยถดไป เชน ตวอยางในโปรแกรมท 1 ค าสงในแถวเลเบลทชอ start ต าแหนง address จะเรมตนท 8100H EQU ยอมาจาก EQUAL เปนการก าหนดคาของตวแปล เชน ตวอยางในโปรแกรมท 1 ตวแปล user จะมคาเทากบ 0fc00h DB ยอมาจาก Define Byte เปนการก าหนดคาในหนวยความจ าครงละ 1 byte หรอหลาย byte เชน ตาราง 6

Address Code data Label Op-code Operand Comment

8200 FF DATA: ORG DB

8200H 255

;ขอมลในหนวยความจ าเทากบ 255

8201 FB DB -5 ;ขอมลในหนวยความจ าเทากบ -5

8202 09 DB 2+7

8203 4F65 DB 4FH, 65H ;ก าหนดตอเนองกน คนดวยคอมมา

8205 8209

4920414D 20434F4F

DB ‘I AM COOL’

;ก าหนดคาขอมลในรป ASCII

820D 4C DW ยอมาจาก Define Word เปนการก าหนดคาในหนวยความจ าครงละสอง byte ลกษณะการใชคลายกบ DB เชน ตาราง 7

Address Code data Label Op-code Operand Comment

ORG 0000H

0000 00 FF DATA: DW 255 ;ขอมลในหนวยความจ าเทากบ 255

0002 0 09 DW 2+7

0004 00 4F 00 65 DW 4FH, 65H ;ก าหนดตอเนองกน คนดวยคอมมา

0008 04 56 FF 56 DW 456H, 0FF56H

Page 13: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

13

DS ยอมาจาก Define Storage เปนการจองพนทในหนวยความจ า มคาเปนจ านวน byte เชน จองพนทในหนวยความจ าตงแต address ทชอ light เปนจ านวน 9 byte (โดยปกตพนททจองจะใสคา 00 ไวให) ตาราง 8

Address Code data Label Op-code Operand Comment

ORG 8000H

8000 00 00 00 00 LIGHT: DS 9

8004 00 00 00 00

8008 00

8009 04 56 FF 56 DW 456H, 0FF56H

END เปนค าสงบอกจดสนสดของโปรแกรม ตองมทกครง

โอเปอรแรนดฟลด (operand field) เปนฟลดทบอกถงตวกระท า ซงอาจจะเปน register data address หรอตวแปร ขนอยกบค าสงนนๆตวอยางแสดงดงโปรแกรมท 1

ฟลดหมายเหต (comment field) เปนสวนทใชอธบายโปรแกรม ฟลดนตองน าหนาดวยเครองหมาย เซม โคลอน (:) เสมอ และอาจใหเปนหมายเหตทงบรรทดกได

1.6.3 Type of Number Use in Data Statements

BINARY

MOV A, #101110B

DECIMAL

MOV A, #26

HEXADECIMAL

MOV A, #0FFH

ASCII

MOV A, #‘z’

เปนการก าหนดให Register A มคาเทากบรหส ASCII ของตวอกษร ‘z’

Page 14: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

14

1.6.4 Accessing Named Data with Program Instructions

คาคงท ทก าหนดโดย ค าสง EQU สามารถน ามาใชไดเลย เชน

Count EQU 10

MOV A, #Count

2. Assemble Language Program Developing Tools

2.1 Editor ส าหรบการ ปอนโปรแกรมภาษา Assembly เขาไป เชน Notepad ของ Windows หรอ EDIT ของ DOS โดยทวไป

แลว ไฟลทเปนโปรแกรมภาษา Assembly จะก าหนดใหมนามสกลเปน .ASM

2.2 Assembler

เมอตองการน าโปรแกรมไปใชงานตองแปลงโปรแกรมจาก Mnemonic และ Operand(s) ใหเปนรหสค าสงในแบบของเลขฐานสอง โดยใชวธการเปดตารางค าสงแลวเทยบ Code เอง อยางไรกดการแปลง รหสดวยตวเองนน มโอกาสผดพลาดมาก และเสยเวลา การแปลงรหสสามารถท าไดโดยใช Software บน Computer ทเรยกวา Assembler ซงใชแปลงโปรแกรมภาษา ใหเปนรหสค าสงของ Microprocessor นนๆ และสามารถใชค าสงควบคมในการแปลงรหสได (Assembler directive) เชน A51 เอาทพททไดจะมนามสกลเปน .OBJ

D:\PK51\BIN>A51 test.asm

MS-DOS MCS-51 MACRO ASSEMBLER A51 V4.4

Copyright (c) Franklin Software, Inc. 1988, 1989

ASSEMBLY COMPLETE, NO ERRORS FOUND

D:\PK51\BIN>

2.3 Linker

เปนตวรวม OBJ หลายๆ ไฟลใหเปนโปรแกรมเดยวกน เพราะในโปรแกรมขนาดใหญ เราจะเขยนโปรแกรมเปน Module แลวจงน ามาประกอบเขาดวยกนภายหลง ผลลพธทไดจะเปนชดของรหสค าสงทท างานไดสมบรณ เอาทพททไดจะมนามสกลเปน .HEX

Page 15: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

15

2.4 Simulator / Debugger

ส าหรบการทดสอบการท างานของโปรแกรม สามารถก าหนดใหท างานไปทละค าสงได (Single step) เพอดผลทเกดขนไดทน แตส าหรบโปรแกรมทมขนาดใหญแลว การทดสอบการทงานแบบทละขนจะเสยเวลามาก ดงนนจงจะใชวธการตง Break point เมอ โปรแกรมท างานมาถงจดทก าหนด มนกจะหยดใหเราไดดคาขอมลตางๆ ได Software ทใชในการจ าลองการท างานของ MCS-51 กเชน Emulator 8051

รปท 10

2.5 Emulator

Emulator สามารถจ าลองการท างานใน Hardware ได โดยไมตองมการ Burn ลงใน Program Memory จรงท าใหการตรวจสอบการท างานของระบบทงหมดท าไดสะดวก

Page 16: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

16

2.6 Implementation

หลงจากททดสอบการท างานของโปรแกรม เปนทตองการแลว เราสามารถน าไฟล .HEX ทไดน ไปท าการอด (Burn) ลงใน EPROM ภายในของ MCS-51 หรอ EPROM ภายนอก แลวใชงานเปน External program memory ได

2.7 Integrate Development Environment (IDE)

นอกจากโปรแกรมส าหรบการพฒนา ตามทไดยกตวอยางไปแลวขางตน ยงมโปรแกรมอนๆ ส าหรบการพฒนา ทไดรวมขนตอนตางๆ เขาไวดวยกนเพอความสะดวกเชน โปรแกรม SXA51 ทรวมขบวนการของ Assembler และ Linker เชนโปรแกรมของ MIDE Studio ทเปน Assembler, Linker, Simulator/Emulator ท างานบน Windows

รปท 11

Page 17: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

17

2.8 ตวอยางขนตอนในการเขยนโปรแกรม 8-Bit Addition

2.8.1 Defining the problem and writing the algorithms

การออกแบบโปรแกรมควรจะเรมการท าความเขาใจในสงทตองการจะท าเปนอยางด จากทตองการบวกตวเลขสองจ านวนเขาดวยกนแลวไดผลลพธออกมา จะไดเปน

บวกคาตวเลขสองจ านวน

น าคาผลลพธไปเกบ

2.8.2 Setting up the data structure

เราจะตองทราบหรอก าหนดรปแบบของขอมลทจะน ามาใชงาน โดยตองตอบปญหาเหลานใหได

1. ขอมลทจะน ามาบวก นอยทไหน ? ใน Internal/External Data Memory หรอ Program Memory 2. ขอมลนเปนแบบ Byte หรอ Word? หรอมากกวาน 3. จ านวนของขอมลนนมเทาไร? 4. ขอมลนมแตจ านวน บวก หรอไม ? หรอมการคด เครองหมายอยางไร? 5. ในกรณทเปนโปรแกรมทมความซบซอน การเกบขอมลอาจมโครงสรางเฉพาะ ซงเราจะตองทราบ

จากปญหา ถาให ขอมลทงหมดนอยใน Internal Data Memory และเปนขอมลแบบ Byte ทมแตเลขจ านวน บวกอยางเดยว

ในทนสมมตวา เราก าหนดให ขอมลของตวตง OP1 อยใน Internal Data Memory ท ADR1 และตวบวก OP2 อยท ADR2 แลวใหเกบผลลพธท ADR3

2.8.3 Initialization check list

จากทโปรแกรมนไมมการใชงานของ STACK และไมไดก าหนดอปกรณภายนอกอนๆ จงยงไมตองท าอะไร

2.8.4 การเลอกค าสงใหไดการท างานตามตองการ

ADR1 EQU 10H ; First operand address

ADR2 EQU 11H ; Second operand address

ADR3 EQU 12H ; Result address

MOV A, ADR1 ; Load OP1 into A

ADD A, ADR2 ; Add OP2 to OP1

MOV ADR3, A ; Save result at ADR3

Page 18: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

18

จากตวอยางขางตน ถาขอมลทงหมดนอยใน External Data Memory และเปนขอมลแบบ Byte ทมแตเลขจ านวน บวกอยางเดยว ก าหนดให ขอมลของตวตง OP1 อยใน External Data Memory ท ADR1 และตวบวก OP2 อยท ADR2 แลวใหเกบผลลพธท ADR3 จะไดเปนโปรแกรมคอ

ADR1 EQU 0F10H ; First operand address

ADR2 EQU 0F11H ; Second operand address

ADR3 EQU 0F12H ; Result address

MOV DPTR, ADR1 ; Load Address of OP1 into DPTR

MOVX A, @DPTR ; Load OP1 into A

MOV R0, A ; Temporary store OP1 in R0

INC DPTR ; Address the second operand

MOVX A, @DPTR ; Load OP2 into A

ADD A, R0 ; Add OP2 to OP1

INC DPTR ; Address of Result

MOVX @DPTR, A ; Save result at ADR3

2.8.5 การหาและแกขอผดพลาดในโปรแกรมภาษา Assembly

1. ท าการก าหนดปญหาใหชดเจน แลวหา Algorithms ทเหมาะสมทสด 2. เขยนและทดสอบการท างานของโปรแกรมในสวนยอยๆ ใหถกตองกอน แทนทจะเขยนทงหมดแลวคอยทดสอบ

ทเดยว 3. ถามสวนหนงสวนใดของโปรแกรมทผดพลาด ใหตรวจสอบ Algorithms ทใชอกครง ใหแนใจวา มนสามารถใชไดตาม

ตองการ บางครงอาจตองใหคนอนมาชวยดให 4. ถา Algorithms นถกตอง กตรวจสอบดทความผดพลาดในการพมพค าสงตางๆ 5. ทดลองใช Debugger/Simulator ในการทดสอบการท างานแบบ Single step เพอดวาผลทได ณ ทใดทไมถกตอง

ตามความคาดหมาย 6. ในโปรแกรมขนาดใหญ การท า Single step จะเสยเวลามาก กใหใชวธของ Break point แทน

3. MCS-51 Addressing Modes

Addressing หมายถง เปนการใส code ในรหสค าสงเพอระบถงทมาทไปของขอมล (Operand) ทจะถกน ามาใชงานกบค าสงน Addressing Methods ท MCS-51 ใชในการท างานของค าสงตางๆ จะมดงน

3.1 Register Addressing

Page 19: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

19

จากใน Register bank ทเรยกเปน R0 – R7 จะสามารถเรยกใชไดโดยตรงดวยค าสงตางๆ ซงใน Op-code ของค าสงประกอบดวย ขอมล 3 Bit ทระบถง Register ทตองการ ดงนนแลวค าสงทเปน Register addressing จงเปนค าสงทมประสทธภาพในเรองของการใชหนวยความจ า เนองจากมนไมตองการตวระบต าแหนงของขอมลทเพมจาก Op-code

เมอค าสงแบบ Register instruction ท างาน กจะเปนการอางถงขอมลทอยใน Register ของ bank ทถกเลอกโดย RS0, RS1 ใน PSW ทเวลานนๆ

MOV A, Rn ; Op-code 1 1 1 0 1 r r r MOV Rn, A ; Op-code 1 1 1 1 1 r r r

รปท 12

Register –specific Instructions

ส าหรบบางค าสงทเปนการเจาะจงอยแลววาจะกระท ากบขอมลทอยใน Register ทก าหนด เชน ค าสงทกระท ากบขอมลทอยใน Accumulator หรอ DPTR ค าสงเหลาน กไมจ าเปนทจะใชตวระบ Address อก

DA A ; Op-code 1 1 0 1 0 1 0 0

3.2 Immediate Addressing (or Immediate Constant)

รปท 13

Immediate Addressing น ตอจาก Byte ทเปน Op-code แลวตามดวย ขอมลของคาคงท ซงอาจจะเปน 8 หรอ 16 Bit ขนอยกบ Register ทใช ซงเปนการก าหนดคาคงทโดยตรง ซงสามารถเขยนใน Program ไดเลย ตวอยางเชน

MOV A, #100 ; **คาคงทจะมเครองหมาย # น าหนาเสมอ เปนการใสคา 100 เขาใน Accumulator หรอถาตองการใสขอมลเปนเลขฐาน 16 กจะท าไดคอ

MOV A, #64H

Page 20: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

20

3.3 Direct Addressing

การอางต าแหนงแบบ Direct addressing เปนการอางถงต าแหนงของขอมลทตองการ โดยใชตวระบต าแหนง 8 Bit ซงใชไดเฉพาะกบ Lower 128 ของ Internal data memory และ SFR เทานนเชน

รปท 14

เชน MOV A, 0FFH

Microprocessor

PC

0000000000001011

015

Program Memory 07

000AH

000BH000CH000DH000EH

11100101

0010H0011H

000FH

Address Bus

Microprocessor

PC

0000000000001101

015

Data Memory 07

00FAH

00FBH00FCH00FDH00FEH

1000000010100H0101H

00FFH

Data Bus

Instruction 11111111

A

11110101

07

A

10000001

07

MOV A0FFH

รปท 15 แสดงการท างานตามค าสง MOV A, 0FFH

Page 21: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

21

3.4 Indirect Addressing

รปท 16 รปแบบค าสงทเปน indirect addressing

Microprocessor

PC

0000000000001011

015

Program Memory 07

000AH

000BH000CH000DH000EH

11100110

0010H0011H

000FH

Address Bus

Microprocessor

PC

0000000000001101

015

Data Memory 07

00FAH

00FBH00FCH00FDH00FEH

100000111

0100H0101H

00FFH

Data Bus

Instruction A

11110101

07

A

10000111

07

MOV A, @R0

R0

11111010

07

R0

11111010

07Address Bus

Page 22: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

22

รปท 17 แสดงการท างานตามค าสง MOV A, @R0 การอางต าแหนงแบบ Indirect addressing เปนการอางถงต าแหนงของขอมลทตองการ โดยใช Register เปนตวชไปยงขอมลนน ซงใชไดกบ Internal และ External data memory

การอางต าแหนงของ Internal data memory สามารถท าโดยใช Register ขนาด 8 Bit R0 หรอ R1 หรอใช SP เปนตวช ส าหรบ External data memory การอางต าแหนงท าไดในแบบ 16 Bit โดยใช Register DPTR เปนตวช หรอแบบ 8 Bit โดยใช R0 หรอ R1

เชนถา R0 มคาเทากบ FAH

MOV A, @R0 ; เปนการน าขอมลใน Int. data memory ต าแหนงท FAH มาเกบใน Accumulator

3.5 Indexed Addressing

การอางต าแหนงถงต าแหนงของขอมลในแบบ Indexed addressing ท าไดกบ Program memory เทานน โดยมประโยชนใชในการท า Look-up table (อานคาขอมลจากตาราง)

โดยใช Register DPTR หรอ PC ท าหนาทเปนตวชจดเรมตนของตารางขอมลทตองการ (Base pointer) และใช Accumulator เปนตวเลอกล าดบทของขอมลทอยในตารางนน (Entry number) ซงคา Address ของขอมลทจะอานจาก Program memory จะไดจากการน าเอา Base pointer + Entry number นนเอง นอกจากนแลวการใชงานของ Indexed addressing จะใชในการท า ‚Case jump‛ ในกรณน คาต าแหนงของโปรแกรมทจะกระโดดไปท างาน จะไดจาก Base pointer + Accumulator data เชน

MOV A, @A+DPTR

รปท 18 แสดงการท างานเมอใช Indexed Addressing

Page 23: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

23

4. MCS-51 Instruction Set

CPU ทกเบอรในตระกล MCS-51 มค าสงใชงานทเหมอนกน ซงค าสงตางๆ ของ MCS-51 เปนค าสงทถกออกแบบมาใหเหมาะทจะใชในงานควบคมแบบ 8 Bit ซงมวธอางถงขอมลภายใน (Internal data memory) แบบตางๆ ทท าไดอยางรวดเรว นอกจากน ยงมชดค าสงทกระท ากบขอมลแบบ Bit ได ท าใหสะดวกในการเขยนโปรแกรมควบคมตางๆ ทมการท างานเปนตรรกะ ค าสงของ 8051 สามารถแบงออกเปนชดๆตามประเภทการท างานไดดงน

4.1 Arithmetic Instructions

ค าสงทเปนการท างานทาง Math แสดงดงตารางซงแสดง Addressing mode ทสามารถน ามาใชเปน <byte> Operand ไดส าหรบแตละค าสง

เชน ค าสง ADD A, <byte> สามารถใช Addressing mode ตางๆ ไดคอ

ADD A, 7FH (direct addressing) ADD A, @R0 (indirect addressing) ADD A, R7 (register addressing) ADD A, #127 (immediate constant)

ส าหรบคาเวลาทใชในการท างานนน สมมตให CPU ท างานท Clock 12 MHz ซงค าสงสวนมากจะใชเวลา 1 uS (1 machine cycle) เวนแตค าสงทท างานกบขอมลทเปน 16 Bit (DPTR) หรอการ คณ, หารเลข และจากตารางค าสงจะเหนวา MCS-51 สามารถท า INC, DEC กบ internal Data memory ไดโดยไมตองผาน Accumulator

ตาราง 9

ส าหรบการท างานของค าสง MUL AB จะเปนการคณเลข ของขอมลทอยใน Accumulator และ register B เขาดวยกน ซงผลลพธทไดจะเปนเลข 16 Bit ทจะแบงเกบใน Acc และ register B ตามล าดบ ตวอยางเชน

Page 24: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

24

MOV A, #80 ; A <- 80 (50H)

MOV B, #160 ; B <- 160 (0A0H)

MUL AB ; Multiply A by B

.... ; will give the product 12,800(3200H)

; B is changed to 32H and the Accumulator is cleared.

; The overflow flag is set, carry is cleared.

และค าสง DIV AB เปนการหารเลขของขอมลทอยใน Accumulator (ตวตง) ดวย register B (ตวหาร) ผลการหารสวนทเปนจ านวนเตมจะเกบใน Accumulator และเศษทหารไมลงตวจะถกเกบใน register B ดงตวอยาง

MOV A, #251 ; A <- 251 (0FBH)

MOV B, #18 ; B <- 18 (12H)

DIV AB ; A Division by B

.... ; Accumulator will contain 13 (0DH) and

; register B will contain 17 (11H)

; 251 = ( 13 x 18) + 17

; The overflow and carry flag is cleared.

นอกจากการคณ หรอหารเลขแลว เราสามารถประยกตใชในการแปลงเลขฐานตางๆ หรอใชในการท า Shifter (ตวเลอนขอมล) ทก าหนดได โดยการท า Right shift จะไดจากการคณดวย 2n สวนการท า Left shift จะไดจากการหาร

4.2 Logical Instructions

ค าสงในกลมทเปนการกระท าทาง Logic (AND, OR, XOR, NOT) เปนการท างานกบขอมลทง Byte โดยคดผลทไดในแบบของ Bit-by-Bit เชนถา

MOV A, #00110101b ; Load Acc with 0011 0101 b

MOV R1, #01010011b ; Load R1 with 0101 0011 b

Page 25: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

25

ANL A, R1 ; after execution of ANL

; Acc will be 0001 0001 b

ตาราง 10

MCS-51 ไมมค าสงส าหรบการ Shift ขอมล มเฉพาะแตค าสงส าหรบการ rotate เทานน การ rotate จะสามารถเลอกไดวาจะเปนการ rotate โดยไมใช carry flag (RL A, RR A) หรอใช carry flag (RLC A, RRC A)

ในกรณทตองการ Shift ขอมลตองท าโดยการเพมค าสงส าหรบการ Clear ขอมลบตท rotate เขามา หรอประยกตใชค าสง MUL, DIV

รปท 19

ค าสง SWAP A จะเปนการสลบขอมลใน Accumulator 4 บต บน กบ 4 บต ลาง ซงค าสงนมประโยชนในการท างานกบตวเลขขอมลแบบ BCD

4.3 Data Transfers

Page 26: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

26

นอกจากการเคลอนยายขอมลกบ Accumulator แลว MCS-51 สามารถเคลอนยายขอมลใน Internal data memory address ตางๆ ได โดยไมผาน Accumulator ดวยค าสง

MOV <dest>, <src>

ตาราง 11 Internal RAM

การใชงานของ Stack ใน MCS-51 นน จะใช Internal data memory เปนพนทในการเกบขอมล และจะเกบขอมลเพม ใน Address ทเพมขนดวย อธบายไดคอ เมอท าการเกบขอมล (ดวยค าสง PUSH) คาของ SP (Stack pointer) จะเพมขน 1 แลวจงท าการเกบขอมลทตองการเขาใน Address ท SP ชอย ส าหรบขอมลทตองการ PUSH เขาไปส stack หรอ POP ออกมาจาก Stack จะก าหนดไดดวยวธการของ Direct addressing สวนการท างาน/การเกบขอมลของ Stack นนจะเปนแบบ Indirect addressing โดยใช SP ช ดงนนแลวเราสามารถใช Internal data memory ในสวนของ Upper 128 เปนทอยของ Stack ได แตตองระวงวา ถา MCS-51 ทเลอกใชนน ไมมหนวยความจ าในสวนของ Upper 128 อย จะท าใหขอมลท PUSH เขาไปสญหาย และการ POP ขอมลออกมากจะไดคาทไมแนนอน

ค าสง XCH A, <byte> สามารถใชในการสลบขอมลระหวาง Accumulator กบขอมลใน internal data memory address ตางๆ ได สวนค าสง XCHD A, @Ri นนจะสลบขอมลใน Accumulator กบขอมลใน Address ทก าหนดโดย Ri (R0, R1) เฉพาะ 4 บตลางเทานน

ตาราง 12 External RAM การเคลอนยายขอมลกบ External data memory ท าไดกบ Accumulator เทานน และการก าหนด ต าแหนงของขอมลทตองการ ตองใชวธ Indirect addressing โดยผาน Ri (R0, R1) หรอ DPTR

Page 27: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

27

การใช @Ri เปนการอาง Address ของ External data memory แบบ 8 บต (อางได 256 Byte) ถาใช @DPTR จะเปนการอาง Address ของ External data memory แบบ 16 บต ซงใช Port 0 และ Port 2 ทงหมดเพอเปน Data/Address Bus ท าใหสามารถ อางหนวยความจ าไดทง 64K Byte ในกรณทตองการใช External data memory เพยงไมก K Byte นน การอางต าแหนงแบบ 16 Bit จะท าใหเปลองขาของ Port 2 ไปโดยไมจ าเปน ทางแกไขสามารถท าไดโดยใชเทคนคการอางถงหนวยความจ าเปน Page โดยใชขาของ Port 2 เพยงบางสวนในการเลอก Page ของขอมลทตองการ (ขาของ Port 2 ทเหลอจงสามารถน าไปใชเปน I/O ได)

MCS-51

P0P1

P3 P2

ALE

EA

INTERNAL

ROMLATCH

OE

RAM

DATA

ADDR

WR

VCC

WR

PAGE

BITES

I/ORD

0000H

รปท 20

การเคลอนยายขอมลตองมโปรแกรมเพมเตมเพอเลอก Page ของขอมล (ไมจ าเปนในกรณทขอมลอยใน Page เดยวกน) แลวใช การอาง Address แบบ 8 บตผาน Ri ตวอยางโปรแกรม ก าหนดใหใช Port 2 เพยง 3 บต ในการเลอก Page และบตทเหลอ ก าหนดใหใชเปน I/O ANL P2, #1111 1000b ; Clear Page select Bit

OR P2, #2 ; Select data page 2

MOVX A, @R0 ; Load A with data @R0 in page 2

ตาราง 13 Lookup table Lookup table คอการบรรจขอมลไวในหนวยความจ า แลวใชค าสงเรยกเอาขอมลทตองการออกมาใชงาน ในการเขยนโปรแกรมส าหรบ MCS-51 สามารถใสตารางของขอมลเขาไปพรอมกบโปรแกรมได เชน ตารางคาของ

Function Sine ทมมองศาตางๆ หรออาจเปนตาราง Pattern ของการแสดงผล เปนตน

Page 28: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

28

Table EQU 1000H ; Define table start at address 1000h

MOV DPTR, #Table ; Load table start address

. . .

MOV A, #3 ; Load A with the select entry in table - 1

MOVC A, @A+DPTR ; Load 4th entry of table

. . .

ORG Table ; Begin of the Table

DB 00H, 22H, 0A3H, 0AAH, . . . ; Data in table

วธการขางตนน มปญหาทส าคญคอตองก าหนด Address ของ Table ทแนนอน ซงไมยดหยนในการเขยนโปรแกรม อาจแกไขไดดงน . . .

MOV A, #EntryNumber ; Load A with the select entry in table

CALL Table ; Call subroutine for getting data

. . .

Table: MOVC A, @A+PC ; Get data from table below

RET

DB 00H, 22H, 0A3H, 0AAH, . . . ; Data in table

แตการใชโปรแกรมน ไมสามารถใช Entry number 0 ได เนองจากในขณะท Execute ค าสง MOVC A, @A+PC นน คาของ PC จะชอยท Address ของค าสง RET นนเอง ตาราง 14

Page 29: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

29

4.4 Boolean Instructions

จากท MCS-51 ถกออก แบบมาใหสามารถกระท า Single-Bit Boolean operation ไดอยางสมบรณ ท าใหมความสะดวกในการเขยนโปรแกรมเพอการควบคม ทหาไมไดใน CPU อนๆ ซงท างานกบขอมลทละ Byte

ต าแหนงของ Internal data memory ในบางสวนสามารถอางถงและใชงานในระดบ Bit ได โดยท Bit address 00 – 7FH จะอยในสวนของ Lower 128 และ 80 – FFH อยใน SFR ในการท างานระดบ Bit นน MCS-51 จะใช Carry flag เปน Single-bit Accumulator ดงจะเหนไดจากค าสงตางๆ ทกระท าการกบ Carry flag ตวอยางเชน ถาตองการให Bit 0 ของ Port 1 มสถานะเปน ‘1’ เมอม Logic ‘1’ เขามาท Bit 1 และ Bit 2 ของ Port 1 กจะเขยนโปรแกรมไดดงน MOV C, P1.1 ; Load status of P1.1 into C

ANL C, P1.2 ; AND with status from P1.2

MOV P1.0, C ; Output the result to P1.0

จากตารางค าสงของ Boolean operation ทมเฉพาะการ AND (ANL) และ OR เทานน ไมมค าสงในการท า Exclusive OR ซงถาตองการท า XOR แลวจะสามารถเขยนเปนโปรแกรมไดเชนกน

C = bit1 XRL bit2 MOV C, bit1 ; Load status of bit1 into Carry

JNB bit2, Over ; Test bit2 and jump if bit2 = 0

CPL C ; Invert Carry

Over: . . .

การท างานอธบายได คอ จากสถานะของ bit1 ทถกเกบเขาไปใน Carry ถาสถานะของ bit2 เปน ‘0’ แสดงวา Carry มคาทถกตองแลว ( 0 XOR 0 = 0; 1 XOR 0 = 1) แตถา bit2 เปน ‘1’ กจะตองกลบ Invert สถานะของ Carry เพอใหไดค าตอบทถกตอง ( 0 XOR 1 = 1; 1 XOR 1 = 0) ดงนนเมอสถานะของ bit2 เปน ‘0’ ตองท าค าสง CPL C ซงท าไดโดยใช JNB (Jump not bit) เมอ bit2 เปน ‘0’ MCS-51 กจะท างานขาม CPL C ไป การท างานของค าสง JBC น จะแตกตางจาก JB (Jump ถา bit เปน ‘1’) อยท เมอการ Jump เกดขนแลว bit address นนๆ จะถก Clear ดวย

Page 30: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

30

4.5 Jump Instructions

ค าสงในการ Jump ซงในตารางแสดงเปน Mnemonic คอ JMP addr นน ทจรงแลวส าหรบ MCS-51 มค าสงส าหรบการ Jump คอ SJMP, LJMP, AJMP โดยจะมขอแตกตางกนท วธการก าหนด Address ทตองการ Jump ไป ในการเขยนโปรแกรมนน เราสามารถ ใช JMP ไดถาเราไมสนใจวธการก าหนด Address ซงตว Assembler จะท าการเลอกค าสงของการ Jump พรอมกบการก าหนด Address ทเหมาะสมใหเอง

ตาราง 15

ค าสงในการ Jump ซงในตารางแสดงเปน Mnemonic คอ JMP addr นน ทจรงแลวส าหรบ MCS-51 มค าสงส าหรบการ Jump คอ SJMP, LJMP, AJMP โดยจะมขอแตกตางกนท วธการก าหนด Address ทตองการ Jump ไป ในการเขยนโปรแกรมนน เราสามารถ ใช JMP ไดถาเราไมสนใจวธการก าหนด Address ซงตว Assembler จะท าการเลอกค าสงของการ Jump พรอมกบการก าหนด Address ทเหมาะสมใหเอง

Page 31: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

31

โดยทวไปของค าสง JUMP หรอ BRANCH แลวประกอบดวย Op-code 8 Bit แลวตามดวย Address ของโปรแกรมต าแหนงทตองการจะไป มขอเสยคอ ท างานไดชา ผออกแบบ Microprocessor จงก าหนดวธการทมประสทธภาพกวา คอ Relative Addressing ซงรหสค าสงประกอบดวย Byte แรกเปน Op-code ทระบการ JUMP แบบ Relative (จะมเงอนไข หรอไมมกได) และ Byte ทสองเปน Displacement

จากทการ JUMP จะตองไปขางหนา หรอยอนกลบได คาของ Displacement นจงเปนแบบ 2’s Complement (-128 ถง +127) แตเมอ CPU กระท าค าสงนแลว คาของ PC จะเพมขน ดงนนระยะทางทกระโดดไปไดจรงๆ จะนบจาก Address เรมตนของค าสงทอยตอจากค าสงในการ JUMP นน

การใชงานของ Relative Address นมประโยชน มากในโปรแกรมทเปนการวน Loop (เพราะโดยมากแลวการวน Loop จะเปนการวนในระยะใกลๆ) ซงท าใหโปรแกรมนนสามารถท างานเรวขนอยางเหนไดชด และประโยชนอกประการหนงคอ ตวโปรแกรมน สามารถยายไปอยทใดๆ กไดเนองจากมนไมขนอยกบคา Address ทใช

SJMP เปนการ Jump โดยก าหนดต าแหนงทตองการ ในแบบของ Relative offset ดงทไดกลาวไปแลว ซงค าสงนจะเปนแบบ 2 Byte ประกอบดวย Opcode byteและ relative offset byte (-128 ถง +127) โดยนบจาก Address เรมตนของค าสงทอยตอจาก SJMP

LJMP ใชการก าหนดต าแหนงทตองการ ในแบบของ 16 Bit ดงนนค าสงนจงเปนแบบ 3 Byte (1 Byte Opcode and 2 Byte address) การใช LJMP ท าใหสามารถ Jump ไปทไดกไดของ Program memory ทง 64K

AJMP ใชการก าหนดต าแหนงทตองการดวยเลข 11 Bit ค าสงนจะเปนแบบ 2 Byte ประกอบดวย Byte แรกทเปน Opcode ทม 3 Bit ของ Address อยดวย ตามดวยอก Byte ซงก าหนด Address สวนทเหลอ ดงแสดง

A10 A9 A8 0 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 ใน MCS-51น A10 A9 A8 เปน 0 0 0 การท างานเมอการ Jump เกดขน ต าแหนง Address ทจะ Jump ไปจะไดจากการน าเอา address 11 bit น แทนเขาไปใน 11 Bit ลางของ PC เพราะฉะนนต าแหนงทจะท าการ Jump ไปไดตองอยใน Block 2K เดยวกบค าสงทอยถดจาก AJMP Jump address = PC15 PC14 PC13 PC12 PC11 A10 – A0 เชน

PC Instruction (Binary) Instruction (Assembly)

0000 1001 0000 0000 หรอ 0900H 0000 0001 0010 0011 AJMP 23H

ต าแหนงทจะท าการ Jump ไปคอ 0000 1000 0010 0011 หรอ 0823

Page 32: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

32

JMP @A+DPTR ใชในการท า Case jumps (การท า Switch-Case) ซงต าแหนงทจะ Jump ไปจะถกค านวณจาก DPTR + คาใน Accumulator ในการใชงานตองก าหนด DPTR ใหเปนคา Address เรมตนของ Jump table และ Accumulator ใหเปนตวชต าแหนง ดงตวอยาง ถาตองการท า 5-ways branch โดยก าหนดจากคาใน Accumulator 0 – 4

MOV DPTR, #Jump_Table

MOV A, Index_Number

RL A ; Convert index number (0 – 4) to an even number 0 – 8 ; because AJMP is 2 bytes long

JMP @A+DPTR

. . .

Jump_Table:

AJMP Case_0

AJMP Case_1

AJMP Case_2

AJMP Case_3

AJMP Case_4

4.6 ค าสงในการเรยกใช Sub-routine

ส าหรบ MCS-51 สามารถท าได 2 แบบคอ LCALL และ ACALL เชนเดยวกบการ JUMP ดงทอธบายขางตน

การใชงานของ Sub-routine ตองจบดวยค าสง RET เสมอ ซงเปนการให MCS-51 กระโดดกลบไปท างานยงค าสงทอยตอจาก เรยกใช Sub-routine (CALL)

ส าหรบค าสง RETI นน จะใชในการ Return เมอจบการท างานของ Interrupt service routine ขอแตกตางระหวาง RET กบ RETI คอ เมอท า RETI จะมการสงสญญาณไปบอก ระบบทควบคมการ Interrupt ดวยวา Interrupt ทเกดขนนน ไดท างานเสรจแลว และพรอมทจะท างาน Interrupt ทรออยได แตถาไมม Interrupt ทรออย การท างานของ RETI จะไมแตกตางกบ RET

4.7 การ Jump แบบมเงอนไข

ตาราง 16

Page 33: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

33

ดงทแสดงในตาราง จะเหนไดวาการ Jump แบบมเงอนไขทงหมดมการก าหนด Address ในแบบ Relative offset

ค าสง DJNZ (Decrement and jump if not zero) ใชในการวน Loop เปนจ านวนทก าหนด โดยการก าหนดคาใหกบ Counter ดวยจ านวนรอบ การท างาน ทตองการ แลวจบการท างานทตองการนนดวย DJNZ

ค าสง CJNE (Compare and jump if not equal) กสามารถใชควบคมการวน Loop ได ดงตวอยางทแสดงตอไปน

ตวอยาง โปรแกรมคนหาขอมล ‚*‛ ทอยใน External data memory 100 Byte ก าหนดให Address เรมตนของ ขอมลอยท 0

การใชIndirect addressing ในการเขาถงขอมลทอยตดตอกน (Block) มขอจ ากดทสามารถใชไดกบขอมลเพยง 256 ตวเทานน ถาใช Register ในการอางองแบบ indirect address จะมขนาดได 8 Bit

SEARCH: MOV R0, #0

MOV R1, #100 TEST: MOVX A, @R0 CJNE A, #’*‛, NEXT

JMP FOUND NEXT: INC R0 DJNZ R1, TEST

NOTFND: . . .

รปท 21

5. ตวอยางการเขยนโปรแกรม

การเขยนโปรแกรม 16-Bit Addition

INITIALIZE TO

ELEMENT 0

READ NEXT

ELEMENT

IS

LAST

ELEMENT

IS

ELEMENT=' * '

POINT TO NEXT

ELEMENT

NO

YES

YESNO

FOUND

NOT

FOUND

Page 34: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

34

ในการบวกเลขแบบ 8-Bit นนมนจะบวกเลขไดเพยง 0 – 255 เทานน ในการใชงานเราอาจตองการบวกเลขทมจ านวนมากกวาน ซงกจะท าไดโดยการเกบขอมลโดยใชจ านวน bit ทมากขน

1. Defining the problem and writing the algorithms

หลกการหรอวธการทใชในการหาค าตอบ

1. บวกคาตวเลขของขอมลทงสอง ในสวนของ Low byte 2. น าผลลพธไปเกบเปน Low byte 3. บวกคาตวเลขของขอมลทงสอง ในสวนของ High byte และตองรวมคาของตวทดทไดจาก การท างานในขนท 1. ดวย 4. น าผลลพธไปเกบเปน High byte

2. Setting up the data structure

ในการท างานกบขอมลในหนวยความจ าทเปนแบบ Multiple byte นน เราตองร หรอ ก าหนดวา ขอมลทเกบนน จดเรยงอยเชนไร ถาก าหนดให ขอมลของตวตง OP1 อยใน Internal Data Memory ท AD1 กบ AD1+1 และตวบวก OP2 อยท AD2 กบ AD2+1 แลวใหเกบผลลพธท AD3 กบ AD3+1 โดยการเกบขอมล ใหเกบ คาในสวนของ Low byte กอน แลวจงเกบ High byte

3. Initialization check list

จากทโปรแกรมนไมมการใชงานของ STACK และไมไดก าหนดอปกรณภายนอกอนๆ

4. การเลอกค าสงใหไดการท างานตามตองการ

AD1L EQU 30H ; First operand LOW byte address

AD1H EQU 31H ; First operand HIGH byte address

AD2L EQU 40H ; Second operand LOW byte address

AD2H EQU 41H ; Second operand HIGH byte address

AD3L EQU 50H ; Result LOW byte address

AD3H EQU 51H ; Result HIGH byte address

MOV A, AD1L ; Load low byte of OP1

ADD A, AD2L ; Add OP2 to OP1 low byte

MOV AD3L, A ; Store result, low byte

MOV A, AD1H ; Load high byte of OP1

ADDC A, AD2H ; High byte OP1 + OP2 + carry

MOV AD3H, A ; Store result, high byte

Page 35: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

35

แลวถาในการบวกเลขในสวนของ High byte มตวทดเกดขน ทางเลอกทมไดคอ

1. ปลอยไว ใหเปนความผดพลาดของโปรแกรม หรอก าหนดใหโปรแกรมนใชไดเฉพาะตวเลขทบวกมาแลวไมเกน 16 bit

2. เขยนโปรแกรมเพอท าการตรวจสอบ ตวทดทเกดขน แสดงวาผลลพธทไดไมถกตอง หรอมการตรวจสอบสถานะของ OV Flag

Subtracting Number

ในการลบเลข นนจะใชค าสง SUBB แทน ADD แตเนองจากวา SUBB จะเปนการลบเลขแบบ คดตวทดดวย ดงนนจงตองท าการ CLEAR คาของตวทดกอน

ADR1 EQU 10H ; First operand address

ADR2 EQU 11H ; Second operand address

ADR3 EQU 12H ; Result address

MOV A, ADR1 ; Load OP1 into A

CLR C ; Clear carry flag

SUBB A, ADR2 ; OP1 – OP2 -> A

MOV ADR3, A ; Save result at ADR3

การเขยนโปรแกรม 8-Bit BCD Addition

การเกบขอมลแบบ BCD มความสะดวกในการใชงานเมอตองการปฏบตงานกบขอมลตวเลขทละหลก หรอเมอเกยวกบการแสดงตวเลขทละหลก จากการทตวเลข BCD ใชเลขฐานสอง จ านวน 4 bit เปนตวแทนของเลขฐานสบ 1 หลก ดงนนในการบวกเลข คาของขอมลทไดมากกวา 9 จะตอง ทด ขนไปอยในหลกตอไป

‘08’ 0000 1000 (BCD) ‘03’ 0000 0011 (BCD) ‘11’ 0000 1011 (BIN) ‘ทด’ 0001 0001 (BCD)

MCS-51 ถกออกแบบมาใหท างานกบขอมลเลข BCD ไดงาย โดยการใชงานของค าสง DA A (Decimal Adjust) การท างานอาศยคาสถานะของ AC Flag (Auxiliary carry flag) ซงเปนตวทดภายใน จาก bit 3 ไป 4

การใชงานของ DA A ตองใชตามหลงการบวก (ADD, ADDC) ของตวเลขทเปน BCD อยแลว

ADR1 EQU 10H ; First BCD operand address

ADR2 EQU 11H ; Second BCD operand address

Page 36: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

36

ADR3 EQU 12H ; Result address

MOV A, ADR1 ; Load OP1 into A

ADD A, ADR2 ; Add OP2 to OP1

DA A ; Adjust the result to BCD

MOV ADR3, A ; Save result at ADR3

การเขยนโปรแกรม 4-Digits BCD Addition (16 Bits)

การบวกสามารถท าไดโดยใชขบวนการเดยวกน กบการบวกเลขฐานสอง ดงตวอยางขางตน เพยงแตเพมค าสง DA A ตามหลงการ บวก เทานน (ADD, ADC)

การเขยนโปรแกรม BCD Subtraction

การลบเลข BCD นคอนขางยงยาก เพราะเมอท าการลบเลข ตองท าการบวกดวย Ten’s complement ของเลข BCD นนๆ ซงท าไดยาก

การเขยนโปรแกรม Converting Two ASCII Codes to Packed BCD

ทวไปแลว การสงขอมล หรอการแสดงผลขอมล ท าโดยใชรหส ASCII เชน เมอ เราตองการ พมพ ตวเลข ‘9’ ออกทาง Printer เราจะตองสงขอมล ASCII ของ ‘9’ ไปให

ASCII 5 0011 0101 = 35H ASCII 9 0011 1001 = 39H

Unpack BCD 5 0000 0101 = 05H Move to upper nibble

Unpack BCD 5 0101 0000 = 50H Unpack BCD 9 0000 1001 = 09H

Packed BCD 59 0101 1001 = 59H

จากตวอยางของขอมลทแสดง เราจะได Algorithms เปน

1. เปลยนรหส ASCII ของขอมลตวแรกใหเปน Unpacked BCD 2. เปลยนรหส ASCII ของขอมลตวทสอง ใหเปน Unpacked BCD 3. ยายขอมล BCD ของตวแรก จาก 4 Bit ลาง ใหเปน 4 Bit บน 4. Pack ขอมลเขาดวยกนใหเปนหนง Byte

Page 37: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

37

การเขยนโปรแกรม Masking with the AND instruction

จากรหส ASCII สามารถแปลงใหเปน BCD ไดโดยการท าให 4 Bit หนามคาเปน 0 จากการกระท าทาง Logic การ AND ดวยขอมล 0 ใหผลลพธทเปน 0 เสมอ การท าเชนนเรยกวาการท า Masking ดงนนการแปลงจะท าไดโดยการ AND ขอมล ASCII ดวย Mask

ASCII 5 0011 0101 = 35H MASK 0000 1111 = 0FH Unpack BCD 5 0000 0101 = 05H

การเขยนโปรแกรม Moving a nibble with ROTATE instruction

การทยายขอมลจาก 4 Bit ลางใหมาเปน 4 Bit บน น สามารถท าไดโดยการ SHIFT หรอ ROTATE ของขอมลไปทางซาย

รปท 22

ในการ SHIFT หนงครง ขอมลของ Bit ทถก shift ออกมาจะอยใน Carry flag และขอมล 0 จะถกใสเขาไปอกดานหนง แต MCS-51 ไมมค าสงส าหรบการ SHIFT

ส าหรบการ ROTATE นน ขอมลของ Bit ทเลอนออกไปจะเขาไปใน Carry flag และสามารถเลอกไดวา จะเอาขอมลจาก Carry flag หรอ จาก Bit ทเลอนออกไป มาใสแทนท

การเขยนโปรแกรม Combining BYTE or BIT with the ADD or the OR instruction

ในการรวมขอมลสอง Byte เขาดวยกนนน สามารถท าไดโดยการ ADD ขอมลเขาดวยกน ถาขอมลชดแรกมเฉพาะ Byte และอกชดหนงมเฉพาะ Byte ลาง การ ADD จะใหผลลพธตามตองการ หรออกวธการหนงคอการใชค าสง OR จากการกระท าทาง Logic ของ OR ‘0’ OR กบอะไรกไดคาเดม และ อะไรท OR กบ ‘1’ จะไดเปน ‘1’

การใชงานของ OR น ยงสามารถใชในการท าให Bit ของขอมลทตองการใน Byte เปน ‘1’ ได

ดงนน โปรแกรมทไดจะเปน

Page 38: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

38

MASK EQU 0FH ; Mask

ASCII1 EQU ‘5’ ; ASCII of ‘5’ = 35H

ASCII2 EQU ‘9’ ; ASCII of ‘9’ = 39H

MOV A, #ASCII1 ; Load ACCII ‘5’ into A

ANL A, #MASK ; AND A with MASK

RL A ; Rotate left 4 times

RL A

RL A

RL A

MOV R0, A ; Store result high

MOV A, #ASCII2 ; Load ACCII ‘9’ into A

ANL A, #MASK ; AND A with MASK

ORL A, R0 ; Packed result

การเขยนโปรแกรม Converting Binary number to BCD

การแปลง Binary number ใหเปน BCD นน สามารถท าไดโดยงาย จากการท MCS-51 มค าสงส าหรบการ หาร เลข และดวยการใชงานของค าสง SWAP A ทท าการสลบ 4 บต บน กบ 4 บต ลางของ Accumulator (แทนการ Rotate 4 ครงจากตวอยางทแลว)

ADR1 EQU 10H ; Address of Binary to be converted to BCD

MOV A, ADR1 ; Load Binary number into A

MOV B, #10

DIV AB

SWAP A ; Move 10’s to high nibble

ADD A, B ; Packed result

การเขยนโปรแกรม Converting BCD to Binary number

การแปลง BCD ใหเปน Binary นน สามารถท าไดโดยงาย ดวยการคณเลข คาประจ าหลก (หนวย, สบ, รอย ...) แลวน าผลทไดของแตละหลกมาบวกกน

Page 39: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

39

การเขยนโปรแกรม Boolean Operations

MCS-51 ไดถกออกแบบมาใหสามารถประมวลผลขอมลแบบ Bit ได (Single –bit processor) โดยจะใช Carry flag เสมอนเปน Accumulator ของขอมลแบบ บต น

MOV C, P1.0 ; Load Port 1 bit 0 status

ANL C, P1.1 ; AND with status from Port 1 bit 1

MOV P1.2, C ; Output to Port 1 bit 2

การเขยนโปรแกรม IF-THEN, IF-THEN-ELSE Programs

IF-THEN ใชในการตดสนใจวาจะท า หรอไมท า สวนของ Program

IF condition THEN action A action B

สวน IF-THEN-ELSE นใชในการเลอกวา จะท างานอะไร

IF condition THEN action A ELSE action B

ส าหรบ Microprocessor ทวไปแลว เงอนไขทใชในการตดสนใจนน ไดจาก FLAG แตส าหรบ MCS-51 ไดออกแบบใหสามารถใชเงอนไข จากสถานะของขอมลแบบบต หรอคาของขอมลทมอยใน Accumulator หรอหนวยความจ า ในการเลอกวาจะท าหรอไมท างานตามสวนของโปรแกรมใดๆ โดยใชค าสงของการ JUMP แบบมเงอนไข (Conditional JUMP) ท าใหสามารถเขยนโปรแกรมไดโดยงาย

6. MCS-51 FLAGS

ใน MCS-51 Flag คอสถานะของ Bit ทอยใน Register PSW ดงแสดงในรป

Page 40: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

40

รปท 23

Carry (CY)

ส าหรบ Microprocessor ทวไปแลว Carry flag มหนาทอยสองอยางคอใชในการแสดงสถานะวา ในการ บวก หรอ ลบ เลข นนม ตวทด (ยม) หรอไม และใชเปน Bit ท 9 ของการ ROTATE ในการใช Carry flag ตองเขาใจวา การท างานของค าสงในการค านวณ จะสงผลถงสถานะของ Carry flag ขนอยกบผลทไดจากการท างานนนๆ และการใชค าสง RLC, RRC สงผลถงสถานะของ flag ขนอยกบขอมลทออกมา

Auxiliary Carry Flag (AC)

เปนคาสถานะทแสดงถงตวทด ทเกดขนจาก 4 Bit ลาง ไปยง 4 Bit บน ถกใชในการท าค าสง DA A

General purpose status flag (F0, F1)

เปน Flag ส าหรบการใชงานทวไป ซงผใชสามารถเขยนโปรแกรมเพอก าหนดคา และตรวจสอบคาของ F0 นได

Register bank select (RS1, RS0)

ส าหรบการเลอก Bank ของ Register R0 – R7 ทจะใชงาน โดยการก าหนดคา Bank ทตองการ กอนการใชงาน

Page 41: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

41

รปท 24

Overflow flag (OV)

ส าหรบ Flag นท าหนาทคอ ใชแสดงสถานะ การเกด Overflow ในการท างานทางคณตศาสตร

Parity of Accumulator (P)

สถานะของ P Flag ขนอยกบ Parity ของขอมลทมอยใน Accumulator ถาจ านวนของ Bit ทเปน ‘1’ ถามจ านวนเปน ‘ODD’ Parity Flag จะ set เปน ‘1’ แตถามเปน ‘EVEN’ Parity Flag จะ reset เปน ‘0’ Parity มประโยชนใชในการตรวจสอบความถกตองของขอมลทเกบไว หรอรบเขามา

Summary of the Flags

การเปลยนแปลงสถานะของ Flag ตางๆ ขนอยกบผลของการท างานของค าสงตางๆ ทพอสรปได ดงน

นอกจากนแลว การกระท ากบ Register PSW หรอ Bit ของ PSW กจะเปนการเปลยนสถานะของ Flag โดยตรง

รปท 25

การเขยนโปรแกรม JUMPS and Conditional JUMPS

Branch instruction เปนค าสงท ท าใหการท างานของ Microprocessor กระโดดไปยง โปรแกรม ในต าแหนงทตองการ การกระโดดไปน อาจเปนแบบมเงอนไข หรอไมมกได

การกระโดดแบบมเงอนไข คอการกระโดดจะเกดขน เมอเงอนไขนนเปนจรง การกระโดดในแบบน ใชในการตดสนใจทขนอยกบสถานะของขอมล หรอผลทไดจากการท างานกอนหนา เงอนไขทสามารถใชได คอ

สถานะของ Carry flag: Jump if C = 1, Jump if C = 0

สถานะของ Bit address: Jump if bit = 1, Jump if bit = 0

ขอมลใน Accumulator: Jump if Acc = 0 Jump if Acc != 0 Jump if Acc != คาในหนวยความจ า หรอคาคงท

ขอมลในหนวยความจ า: Jump if คาในหนวยความจ า != คาคงท

Page 42: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

42

นอกจากค าสง JUMPS แลว การกระโดดสามารถท าไดในอกรปแบบหนง ทเรยกวา การเรยกใช (CALL) โปรแกรมยอย (Subroutine) ซงกสามารถท าไดแบบไมมเงอนไขเทานน

Example program

ถาตองการตรวจสอบคาของขอมลในหนวยความจ าทต าแหนง LOC วา มนมคาเปน ‘A’ หรอ ‘B’ หรอเปนคาอนๆ ตาม Algorithm ทแสดง

IF @LOC = ‘A’ THEN action A ELSE IF @LOC = ‘B’ THEN action B ELSE action C

รปท 26

MAIN: MOV A, LOC ; Read character in TEST1: CJNE A, #’A’, TEST2 ; Compare to ‘A’ ACT_A: . . . ; Action A . . . JP FIN ; Finish TEST2: CJNE A, #’B’ , ACT_C

ACT_B: . . . ; Action B . . . JP FIN ; Finish ACT_C: . . . ; Action C . . . FIN: . . . ; Finish

Action A

@LOC

= ‘A’

@LOC

= ‘B’

Action B Action C

Yes

Yes

No

No

Page 43: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

43

WHILE-DO Programs

WHILE condition is present DO action A action B

ในการเลอกใชงานของ WHILE-DO นนมจดทสงเกตคอ เงอนไขจะถกตรวจสอบกอนทจะมการท างาน

TEMP_IN: MOV A, P0 ; Read Temp.

CLR C ; Clear Carry

SUBB A, #100 ; Compare to 100

JNC T_OFF ; If temp >= 100 then off

T_ON: . . . ; Turn On Heater

. . .

JP TEMP_IN

T_OFF: . . . ; Turn off heater

. . .

START

Read value from sensor

Stroe in memory

Wait 1 Hour

24 Samples ?

END

Temp.>= 100

Turn ON HeaterYes

No

START

Read Temp.

Turn OFF Heater

Page 44: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

44

รปท 27

REPEAT-UNTIL Programs

REPEAT action . . . UNTL condition is present

ส าหรบการท างานของ REPEAT-UNTIL น มการท างานกอน แลวจงตรวจสอบเงอนไข วาจะตองท างาน นนๆ อกรอบหรอไม

Example Monitoring the Duration

การตรวจวดระยะเวลาของสญญาณ Input สามารถจะท าไดเชนเดยวกบการสรางสญญาณ คอท าไดโดยการใช Software หรอ Hardware กได การนบชวงเวลาโดย Software จะท าโดย การเพมคาของ Counter ขนเรอยๆ ถายงมสญญาณ Input อย ดงนนเมอสญญาณ Input หายไป คาทมอยใน Counter กคอระยะเวลาของสญญาณทเขามา จะเขยนเปน Program คอ

MOV R7, #0 ; Clear counter Start: JNB P1.0, Start ; Read Input and Testing Bit 0 for ‘1’ Count: INC R7 ; Increment counter NOP NOP

JB P1.0, Count ; Reading Input and Testing Bit 0 for ‘0’

ส าหรบการท างานของโปรแกรมน จะมขอจ ากดคอ ระยะเวลาทจะตรวจสอบ ตองไมนานเกนไป เพราะจะท าใหเกด Overflow ขน

Page 45: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

45

7. Subroutines

กคอกลมของค าสง ทผ เขยนโปรแกรมไดตงขน โดยเรมจาก สวนทก าหนดต าแหนงหนวยความจ าเรมตนทเกบค าสงแรกของ Subroutine และตว Subroutine จะสนสดดวยค าสงเฉพาะ ทเรยกวา RETURN การท างาน หรอการเรยกใชงานของ Subroutine สามารถแสดงไดดงรป

รปท 28

จากสวนของ Main program ทางดานซาย และ สวนของ Subroutine ทแสดงทางดานขวา เมอ CPU ท างานตามค าสงตางๆ ใน Main program มาจนถงค าสง CALL SUB (เปนค าสงส าหรบการเรยกใช Subroutine) เปนผลให CPU กระโดดไปท างานยง ค าสงแรกสดของ Subroutine (แสดงโดยเสนหมายเลข 1)

CPU จะท างานตามค าสงตางๆ ใน Subroutine นไปเรอยๆ เชนเดยวกบการท างานตามปกต จนไปถงค าสงสดทายใน Subroutine ซงกคอ RETURN ค าสงนจะท าให CPU กระโดดกลบไปท างานในสวนของ Main program ยงค าสง ทอยตอจาก CALL SUB (แสดงโดยเสนหมายเลข 3) และท างานตอใน Main program (แสดงโดยเสนหมายเลข 4)

จนกระทงพบค าสง CALL SUB เปนครงทสอง การกระโดดไปท างานยง Subroutine จะเกดขนอก (เสนหมายเลข 5) และเมอถง RETURN มนกกลบมาท างานใน Main program ณ. ค าสงทอยตอจาก CALL SUB ทเรยกไปนนเอง (เสนหมายเลข 7)

ประโยชนของการใชงาน Subroutine กคอ มนสามารถทจะเรยกใชซ าๆ ไดจากหลายๆ สวนใน Main program โดยไมตองเขยนกลมของค าสงเหลานนอก ท าใหประหยดหนวยความจ าในการเกบโปรแกรม และประโยชนอกขอคอ เมอเราออกแบบ Subroutine ทท างานตามตองการ เพยงครงเดยว แลวสามารถน ามาใชใหมไดในภายหลง ท าใหการเขยนโปรแกรมงายขน

สวนขอเสยของการใชงาน Subroutine กคอ การท างานทชากวานนเอง

7.1 การท างานทเกดขนเมอเรยกใช Subroutine

Page 46: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

46

สงทเกดขนเมอ CPU ท าค าสง CALL SUB คอ CPU จะท าการ FETCH ค าสงแรกของ Subroutine นนๆ มาท างาน นนคอการท า CALL SUB จะเปนการเปลยนคาของ PC (Program Counter) ใหม เปนคา Address ของค าสงแรกของ Subroutine

สวนการท างานของค าสง RETURN ซงเปนการเปลยนคาของ PC กลบเปนคา Address ของค าสงทอยตอจากการใช CALL SUB จะท าเชนนได กแสดงวา มนจะตองมการเกบคาของ PC เมอท า CALL SUB เอาไว ทใดทหนง เมอท าค าสง RETURN กเพยงแตน าคาน กลบมาใสท PC คน นนเอง ปญหาตอไปกคอ เราจะเอาคา Address ทจะ return นไปเกบไวทใด

ในการใชงานโดยทวไปของ Subroutines นน อาจมการเรยกใชซอนๆ กนไดเปนจ านวน N ชน (N nested call) ดงแสดงในรป

รปท 29 เมอใดกตามทมการท าค าสง CALL ตองมกลไกทจะ เกบคาของ PC เอาไว ซงเราจะตองม Memory เปน 2N เพอท าการเกบคาของ PC และในการ return กจะตองมการ return จาก SUB2 กอน แลวจง return จาก SUB1 ดงนนในการเกบคาของ PC จงตองเปนไปตามล าดบดวย

การเกบคาของ PC นจะท าโดยใช Stack ดงจะแสดงการท างานทเกดขนไดดงน

ตาราง 17

Stack 1st Time 2nd Time 3rd Time 4th Time

0008H 0103H 0103H 0103H

0009H 0303H

จากท Address 100 มค าสง CALL SUB1 (ซงถาใหค าสง CALL SUB ใน CPU นเปนค าสงแบบ 3 Byte) เมอท าค าสง CALL SUB1 คาของ PC ซงเปน 103 จะถกเกบลงใน Stack และคา Address ของ SUB1 (280) จะถกใสใน PC

Page 47: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

47

ในการท างานของ Program SUB2 เมอไปถงค าสง RETURN คาบนสดของ Stack จะถกน ากลบไปใสกลบไปใสใน PC ท าใหคาของ PC กจะเปนคาเดมกอนทจะไปท าใน SUB2 จากนนเมอ Program SUB1 เมอไปถงค าสง RETURN คาบนสดของ Stack จะถกน ากลบไปใสกลบไปใสใน PC ท าใหคาของ PC กจะเปนคาเดมกอนทจะไปท าใน SUB1

จากขบวนการท างานของ Subroutine น จะเหนไดวาจ านวนครงทสามารถเรยกใชซอนกนไดนน (Nested Call) ขนอยกบขนาดของ Stack

ในรปตวอยางทยกมาน ไดเขยนแสดง สวนของ Subroutine ไวทางดาน ขวามอ กเพอใหสามารถอธบายการท างานไดสะดวกเทานน โดยทวไปแลว Subroutine จะถกเขยนไวตอจาก main program โดยม Label ทเปนตวบอกชอของ Subroutine และควรม Comment ทอธบายการท างานของมนดวย

7.2 MCS-51 Subroutines

จะเหนไดวาในการท างานของ Subroutines นนตองม Stack ส าหรบ MCS-51 แลว Stack เปนแบบ Software Stack โดยการท างานของ Stack-Pointer Register (SP) ซงขนาดของ Stack และต าแหนงทอยของ Stack ใน Memory ผ เขยนโปรแกรมสามารถก าหนดไดและจะตองถกกนเอาไว แตในปกตแลวหลงจากการ Reset Stack จะถกก าหนดใหเรมตนเกบขอมลท Address 08H เปนตนไป (SP = 07H)

การเรยกใช Subroutine ใน MCS-51 ท าโดยใชค าสง CALL แลวตามดวย Address ของ Subroutine การใชงานของค าสง CALL นน ท าไดแบบ ไมมเงอนไขเทานน

เชนเดยวกบการ Return จาก Subroutine กเปนแบบไมมเงอนไข (RET) เชนเดยวกบค าสงส าหรบการ Return จาก Interrupt routine (RETI) ซงจะไดอธบายในหวขอของ Interrupt

7.3 Subroutine Examples

ตวอยางเชน ถาในการท างานของโปรแกรม มความตองการแปลงเลข Bin เปน BCD อยหลายครง เราสามารถสราง Subroutine ของการแปลงเลขได จากตวอยางของโปรแกรมแปลงเลข Bin เปน BCD ทผานมา สามารถท าเปน Subroutine โดยใหชอเปน Bin_BCD และในตอนจบของโปรแกรมก เตมค าสง RET

มขอควรระวงทส าคญคอ การท างานของ โปรแกรมใน Subroutine จะสงผลถงสถานะของ Register และ Flag ตางๆ ดวย ดงนนถาไมตองการใหสถานะ หรอคาของ Register มการเปลยนแปลง กตองท าการเกบคาเหลานนเอาไว และน ามาคนเมอ return จาก Subroutine ท าไดโดยการเกบคาของ Register (เฉพาะทตองการคงคาเดม) ลงใน Stack และกอนขนตอนของการ return กท าการ POP คานนๆ กลบมาคนส Register หรอส าหรบการใชงานของ Register R0 – R7 นน กสามารถท าไดโดยการสลบ Register Bank ทใชงาน ซงมขอดคอท าไดสะดวกรวดเรว แตจะไมสามารถเรยก Subroutine ซอนกนได

Bin_BCD: PUSH A ; Store Acc

Page 48: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

48

PUSH B ; Store B

PUSH PSW ; Store PSW

MOV PSW, #0000 1000B ; Change used Register bank to 01

ADR1 EQU 30H ; Address of Binary to be converted to BCD

MOV A, ADR1 ; Load Binary number into A

MOV B, #10

DIV AB

SWAP A ; Move 10’s to high nibble

ADD A, B ; Packed result

MOV ADR1, A ; Store result

POP PSW ; Restore old value

POP B

POP A

RET ; Return

7.4 Subroutine Parameters

เมอมการเรยกใชงาน Subroutine โดยทวไปแลว เมอตองการให มนกระท ากบขอมลจ านวนใด เชนในตวอยางของ Subroutine ของการแปลงเลข เรากตองสงคาตวเลข Binary นนไปใหมนท าการแปลง และตองการไดผลลพธ กลบออกมา จากตวอยางทแลว Subroutine ไดรบ คาของตวเลข Binary จากหนวยความจ าในต าแหนงทก าหนดไว (ADR1: 30H) และผลลพธ จะไดกลบมาท Address เดยวกน

ส าหรบวธการทใชในการสงคาใหกบ Subroutine สามารถท าไดหลายๆ วธคอ

Using Registers

โดยใช Register เปนตวสงคาไปให ท าไดรวดเรว และเปน Subroutine ทไมขนอยกบ Address ของ Memory แตมขอจ ากดทจ านวนของ Register เชน

MOV R0, #01AH

Delay: DJNZ R0, Delay

Page 49: Microprocessor and Microcontroller Architectures and ... 04_Programming.pdft h e b o a r d P r o t o t ... พูดในลักษณะนี้ได้ Algorithm จึงต้องถูกเปลี่ยน

Lecture 04

49

RET

Using Memory

เปนวธการทยดหยนกวา สามารถสงคาตวแปรไปให ไดมาก แตมการท างานทชาลง และตองมการ กนทใน Memory ไวเปนทางผานของขอมลเชน

MOV 20H, #01AH

Delay: DJNZ 20H, Delay

RET

Using Stack

มขอดเชนเดยวกบการใช Register แตจะท าใหการใชงานของ Stack นนเตมเรวขน เชน

MOV 20H, #01AH

PUSH 20H

Delay: POP 20H

Delay1: DJNZ 20H, Delay1

RET

การเลอกวธการทจะใชนขนอยกบผ เขยนโปรแกรม ซงโดยทวไปแลวควรเลอกวธการทไมขนอยกบ Address ของ Memory มากกวา ในกรณทขอมลทตองการประมวลผลโดย Subroutine มจ านวนมาก ไมควรสงขอมลนนๆ ไปให Subroutine โดยตรง แตควรสงตวชต าแหนงของขอมล (Data pointer) ซงเปนคา Address เรมตนของ ขอมล ไปใหแทน

7.5 Subroutine Library

เราสามารถสราง Subroutine ทมการท างานตางๆ เกบไวใช ภายหลงได หรอรวบรวมเอาไว ในการเขยนโปรแกรมตอไปกจะท าไดโดยงาย ซงในขบวนการ Link นน จะเลอกเอาเฉพาะ Code ของโปรแกรม ทมการใชงานมารวมกนเทานน