Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
1
คานา
เอกสารประกอบการสอนเลมน ไดจดทาขนเพอใชในการสอนรายวชา 178 320 ไมโครโพรเซสเซอรและการตอประสาน (Microprocessors and Interfacing) สาหรบนกศกษาระดบปรญญาตร สาขาวชาวศวกรรม
คอมพวเตอร
อยางไรกตาม นกศกษาควรจะตองศกษาและคนควาเพมเตมดวยตวเอง ทงจากหนงสออางอง (ทกลาวไว
ในเอกสารฉบบน) และหนงสอเลมอนๆทเกยวของ
ในการผลตเอกสารประกอบการสอนเลมน ผเขยนใครขอแสดงความขอบคณบคลากรภาควชาวศวกรรม
คอมพวเตอรทกทานทมสวนในการสนบสนนและสงเสรมจนเอกสารนสาเรจลลวงดวยด โดยเฉพาะ ดร.วรนทร
สวรรณวสตร ภาควชาวศวกรรมคอมพวเตอร มหาวทยาลยขอนแกน สาหรบเอกสารอางองตางๆสาหรบวชานท
ทานไดสะสมมา พรอมทง ดร.สรวชญ เตชะเจษฎารงษ สาหรบขอเสนอแนะตางๆ คณธเนศ อไรเรองพนธ สาหรบ
การจดทาปก
ทายทสดน ผเขยนหวงเปนอยางยงวา เอกสารเลมนจะชวยใหผเรยนไดเขาใจเนอหาไดเปนอยางด เปน
พนฐานทดและเปนประโยชนในการศกษาคนควา เพอเพมพนเทคนคในการออกแบบและพฒนาระบบไมโคร
โพรเซสเซอรทด
ดร.ดารณ หอมด
พฤษภาคม 2548
2
สารบาญ
คานา ..................................................................................................................................1
คาอธบายรายวชา...................................................................................................................3
บทท 1 บทนา .....................................................................................................................3
1.1 ระบบคอมพวเตอร .......................................................................................................................................................... 3
1.2 ภาษาคอมพวเตอร ........................................................................................................................................................... 3
1.3 ระบบเลขฐานทใชในคอมพวเตอร ................................................................................................................................... 3
บทท 2 ระบบไมโครคอมพวเตอร........................................................................................3
2.1 ระบบไมโครคอมพวเตอรพนฐาน.................................................................................................................................... 3
2.2 หนวยประมวลผลกลาง ................................................................................................................................................... 3
2.3 สถาปตยกรรมของไมโครโพรเซสเซอร ........................................................................................................................... 3
บทท 3 สถาปตยกรรมของไมโครโพรเซสเซอร Z80 ............................................................3
3.1 ขาสญญาณบน Z80 ......................................................................................................................................................... 3
3.2 รจสเตอรบนไมโครโพรเซสเซอร Z80 ............................................................................................................................. 3
3.3 รปแบบของคาสงในไมโครโพรเซสเซอร Z80 ................................................................................................................. 3
3.4 Z80 ADDRESSING MODES ................................................................................................................................................ 3
บทท 4 ชดคาสง (INSTRUCTION SET) ของ Z80 ...............................................................3
4.1 DATA TRANSFER INSTRUCTIONS ...................................................................................................................................... 3
4.2 ARITHMETIC INSTRUCTIONS............................................................................................................................................. 3
4.3 LOGICAL INSTRUCTIONS .................................................................................................................................................. 3
4.4 BIT MANIPULATION INSTRUCTIONS .................................................................................................................................. 3
4.5 BRANCH INSTRUCTIONS .................................................................................................................................................. 3
4.6 MACHINE CONTROL OPERATIONS INSTRUCTIONS.............................................................................................................. 3
4.7 ASSEMBLER DIRECTIVES.................................................................................................................................................. 3
บทท 5 Z80 MACHINE CYCLES AND BUS TIMING..........................................................3
5.1 OPCODE FETCH MACHINE CYCLE..................................................................................................................................... 3
5.2 MEMORY READ MACHINE CYCLE .................................................................................................................................... 3
5.3 MEMORY WRITE MACHINE CYCLE................................................................................................................................... 3
5.4 ทบทวนสาระสาคญ......................................................................................................................................................... 3
5.5 การสรางสญญาณควบคม................................................................................................................................................ 3
3
บทท 6 การตอประสานกบหนวยความจา ........................................................................... 3
6.1 แนวคดพนฐานเกยวกบหนวยความจา ..............................................................................................................................3
6.2 การถอดรหสตาแหนง ......................................................................................................................................................3
6.3 PARTIAL ADDRESS DECODING และ FOLD BACK MEMORY..................................................................................................3
บทท 7 การตอประสานกบอปกรณ I/O............................................................................... 3
7.1 การตอประสานกบอปกรณเอาทพต..................................................................................................................................3
7.2 การตอประสานกบอปกรณอนพต ....................................................................................................................................3
7.3 MEMORY – MAPPED I/O ...................................................................................................................................................3
บทท 8 INTERRUPT........................................................................................................... 3
8.1 ความรเบองตนสาหรบ INTERRUPT I/O ใน Z80 .................................................................................................................3
8.2 การ ENABLE และ DISABLE INTERRUPT...............................................................................................................................3
8.3 INTERRUPT FLIP-FOPS .......................................................................................................................................................3
8.4 คาสง RETURNS ตางๆ .......................................................................................................................................................3
8.5 NON-MASKABLE INTERRUPT (NMI) ..................................................................................................................................3
8.6 MASKABLE INTERRUPT (INT) ...........................................................................................................................................3
8.7 TIMING DIAGRAM สาหรบการตอบสนองตอการ INTERRUPT ของ CPU...............................................................................3
8.8 MULTIPLE INTERRUPTS และ PRIORITIES ...........................................................................................................................3
บทท 9 อปกรณตอประสานทสามารถโปรแกรมได ............................................................. 3
9.1 แนวคดพนฐานของอปกรณตอประสานทสามารถโปรแกรมได .......................................................................................3
9.2 การสรางตวรบสงทสามารถโปรแกรมไดอยางงาย (PROGRAMMABLE TRANSCEIVER).........................................................3
9.3 อปกรณ I/O แบบขนานสาหรบ Z80..................................................................................................................................3
9.4 ชป 8255A........................................................................................................................................................................3
บทท 10 การแปลงสญญาณแอนะลอก-ดจตอลเบองตน .................................................... 3
10.1 DIGITAL-TO-ANALOG CONVERSION (DAC).....................................................................................................................3
10.2 ANALOG-TO-DIGITAL CONVERSION (ADC).....................................................................................................................3
บทท 11 การสงขอมลผาน PARALLEL PRINTER PORT ของ PC...................................... 3
11.1 8-BIT DATA PORT (0X378) ..............................................................................................................................................3
11.2 5-BIT STATUS PORT (0X379) ...........................................................................................................................................3
11.3 4-BIT CONTROL PORT (0X37A) .......................................................................................................................................3
11.4 GROUND SIGNALS ..........................................................................................................................................................3
11.5 การเขยนโปรแกรมภาษา C รบสงขอมลกบ I/O PORTS ....................................................................................................3
11.6 ความเรวของการรบ/สงขอมลผาน PARALLEL PRINTER PORT ..........................................................................................3
4
บทท 12 การสงขอมลผาน SERIAL PORT ของ PC............................................................3
12.1 SERIAL INTERFACING..................................................................................................................................................... 3
12.2 HANDSHAKING .............................................................................................................................................................. 3
12.3 ASYNCHRONOUS TECHNIQUES ....................................................................................................................................... 3
12.4 DECODING SERIAL BIT STREAMS AND ERROR DETECTION............................................................................................... 3
เอกสารอางอง.....................................................................................................................3
5
คาอธบายรายวชา
178 320 Microprocessors and Interfacing
ไมโครโพรเซสเซอรและการตอประสาน
Review of number systems and basic arithmetic operations used in processors. Processor architecture,
instruction sets and addressing mode. Types of electronic memory and their circuit diagram. Input and
output device interfacing, parallel and serial interfacing, synchronous and asynchronous interfacing, as
well as D/A and A/D device interfacing.
ทบทวนระบบตวเลขและการดาเนนงานเลขคณตพนฐานในไมโครโพรเซสเซอร สถาปตยกรรมของไมโคร
โพรเซสเซอรและแบบจาลองการเขยนโปรแกรม เซตคาสงและแบบ วธการกาหนดเลขทอย ชนด
หนวยความจาอเลกทรอนกสและวงจร การจดเรองขดจงหวะ การตอประสานอปกรณรบเขาและสงออก
การตอประสานแบบขนานและอนกรม การตอประสานอปกรณแปลงสญญาณแอนะลอกกบสญญาณ
ดจตอล
6
บทท 1 บทนา
1.1 ระบบคอมพวเตอร
ความหมายและความเปนมา
เมอพจารณาศพทคาวา คอมพวเตอร ถาแปลกนตรงตวตามคาภาษาองกฤษ จะหมายถงเครองคานวณ
ดงนนถากลาวอยางกวาง ๆ เครองคานวณทมสวนประกอบเปนเครองกลไกหรอเครองไฟฟา ตางกจดเปน
คอมพวเตอรไดทงสน ลกคดทเคยใชกนในรานคา ไมบรรทดคานวณ (slide rule) ซงถอเปนเครองมอ
ประจาตววศวกรในยคยสบปกอน หรอเครองคดเลข ลวนเปนคอมพวเตอรไดทงหมด
ในปจจบนความหมายของคอมพวเตอรจะระบเฉพาะเจาะจง หมายถงเครองคานวณ
อเลกทรอนกสทสามารถทางานคานวณผลและเปรยบเทยบคาตามชดคาสงดวยความเรวสงอยางตอเนองและ
อตโนมต
พจนานกรมฉบบราชบณฑตยสถาน พ.ศ. 2525 ไดใหคาจากดความของคอมพวเตอรไวคอนขาง
กะทดรดวา “เครองอเลกทรอนกสแบบอตโนมต ทาหนาทเสมอนสมองกล ใชสาหรบแกปญหาตาง ๆ ทงท
งายและซบซอน โดยวธทางคณตศาสตร”
เครองคานวณในยคประวตศาสตร
เครองคานวณเครองแรกของโลก ไดแก ลกคด มการใชลกคดในหมชาวจน และใชในอยปตโบราณ
มากวา 2500 ป ลกคดของชาวจนประกอบดวยลกปดรอยอยในราวเปนแถวตามแนวตง โดยแตละแถว
แบงเปนครงบนและลาง ครงบนมลกปด 2 ลก ครงลางมลกปด 5 ลก แตละแถวแทนหลกของตวเลข
เครองคานวณกลไกทรจกกนด ไดแก เครองคานวณของปาสคาลเปนเครองทบวกลบดวยกลไกเฟอง
ทขบตอกน Blaise Pascal นกคณตศาสตรชาวฝรงเศส ไดประดษฐขนในป พ.ศ. 2185
สรปเหตการณทสาคญเกยวกบคอมพวเตอร
ป ค.ศ. เหตการณทสาคญ หมายเหต
2600 BC ลกคด (Abacus) เปนเครองมอประมวลผลขอมลทใชงานมานานหลายพนป ยคแอนะลอก
1500 Leonardo da Vinci คด แตไมไดสราง
1642 Blaise Pascal สรางเครองบวกเลข ทเรยกวา (Pascalline) ทางานเหมอน
เครองนบรอบ
ยคระบบ
จกรกล
1694 Gottfried Wilhelm Leibniz สราง Leibniz calculator ซงถอวาเปนเครองคด
เลขระบบจกรกล (mechanical calculator) เครองแรกของโลกทสามารถ +,
– , * , / และ 2√ ได
1801 Joseph Marie Jacquard ไดประดษฐ Pasteboard card Jacquard-loom ทม
การควบคมลวดลายการทอผาจากการอานตาแหนงเสนดายบนบตรโลหะ
ยคของการม
หนวยความจา
7
เจาะร ถอวาเปนตนแบบของคอมพวเตอรแบบอตโนมตในยคตอมา
1821 Charles Babbage สราง difference engine ทสามารถคานวณ polynomial ท
ซบซอน และ differential equation ได, ตพมพบทความทางวทยาศาสตร
เกยวกบแนวความคดทใกลเคยงกบคอมพวเตอรในสมยปจจบน
1864 George Boole ไดสรางระบบพชคณตแบบใหม เรยกวา Boolean Algebra
ซงตอมาไดกลายเปนพนฐานทางตรรกศาสตรทใชหาขอเทจจรงและเหตผล
ทเปนเงอนไข ซงสงผลถงแนวคดเกยวกบเลขฐานสอง (Binary Number)
ซงเปนสญลกษณแทนสถานะทางไฟฟาอนเปนพนฐานของระบบดจตอล
คอมพวเตอรดวย
1879 Herman Hollerith ไดสรางเครองนบประชามต (Electrical Census
Counting Machine) โดยใชเครองตรวจจบทางไฟฟาเพออานขอมลจาก
บตร ใชในการเกบขอมลสามะโนครวประชากรของชาวอเมรกาเปนครง
แรก และเปนผกอตงบรษท IBM
ยค
อเลกทรอนกส
และดจตอล
1939 John Atanasoff และ Chifford Berry ไดทดลองสราง electronic digital
computer ขนเปนเครองแรก เรยกวา Atanasoff-Berry Computer: ABC
1944 John W. Mauchly, J. Presper Eckert Jr. และ Dr. John Von Neumann จาก
มหาวทยาลยฮารวารด ไดนาแนวคดของ Babbage มาประยกตสราง
คอมพวเตอรททางานโดยใชระบบไฟฟารวมกบระบบจกรกล (Electro-
mechanical) ทมชอวา Mark I สามารถคณตวเลขขนาด 10 หลกไดภายใน
เวลาไมกวนาท
1945 John von Neumann ไดเขยนบทความเกยวกบ binary coding, การคานวณ
แบบเรยงลาดบ, โปรแกรมทเกบไวในหนวยความจา ซงยงคงเปนรากฐาน
ของคอมพวเตอรในปจจบน
1946 Mauchly และ Eckert จากมหาวทยาลยเพนซลวาเนย ไดสรางคอมพวเตอร
ทใชระบบไฟฟาลวน ทชอวา ENIAC (Electronics Numerical Integrator
And Calculator) ซงใช vacuum tubes
ดจตอล
คอมพวเตอร
เครองแรกของ
โลก
1947 Transistor ถกคนพบโดยทมนกวทยาศาสตรประจา BELL Laboratory ซง
ประกอบดวย John Bardeen, Walter Brattain, และ William Schockley
1950 บรษท Eckert-Mauchly Computer Corporation ไดผลตและจาหนาย
คอมพวเตอรชอ UNIVAC (UNIVersal Automatic Computer) เปนครงแรก
1955 IBM วางตลาดคอมพวเตอรทใช transistor ยค transistors
8
1957 Robert Noyce กบเพอนอก 7 คน ลาออกจาก Schockley Lab มาอยกบ
Fairchild
1959 Jack Kilby ของ TI จดลขสทธ IC (Integrated Circuit) ตอมาอก 5 เดอน
Robert Noyce กจดดวย (ฟองรองกน วธของ Noyce ดกวา)
1968 Noyce ตง Intel
1969 Marcian Ted Hoff สรางไมโครโพรเซสเซอร (µP)
1971 µP 4004 เรมวางตลาด
1972 µP 8008 เรมวางตลาด
1974 8080, บรษท RCA และ Motorola ออกมารวมดวย
1976
µC (=µP + Mem + IO)
Intel 8048 NS
COP400
µP
Zilog Z80
Intel 8085
Texas TMS9900
1978 Intel 8051
Motorola MC6801
Zilog Z8
Intel 8086
Zilog Z8000
1980 Motorola 68000
ยคของคอมพวเตอร
การพฒนาทงขนาดและประสทธภาพในการประมวลผลของดจตอลคอมพวเตอร สามารถสรปไดเปน 5 ยค
ดงน
• คอมพวเตอรยคท 1 (First Generation Computer: พ.ศ. 2497-2501): ยคของหลอดสญญากาศ
คอมพวเตอรในยคนใชหลอดสญญากาศ (Vacuum tube) เปนวงจรอเลกทรอนกส เครองยงมขนาดใหญมาก
ใชกระแสไฟฟาจานวนมาก ทาใหเครองมความรอนสงจงมกเกดขอผดพลาดงาย คอมพวเตอรในยคนไดแก
UNIVAC I, IBM 600
• คอมพวเตอรยคท 2 (Second Generation Computer: พ.ศ. 2502-2507): ยคของ Transistors
คอมพวเตอรยคนใชทรานซสเตอร (Transistor) เปนวงจรอเลกทรอนกส และใชวงแหวนแมเหลกเปน
หนวยความจา คอมพวเตอรมขนาดเลกกวายคแรก ตนทนตากวา ใชกระแสไฟฟาและมความแมนยามากกวา
• คอมพวเตอรยคท 3 (Third Generation Computer: พ.ศ. 2508-2513): ยคของ IC
คอมพวเตอรยคนใชวงจรไอซ (IC: Integrated Circuit) เปนสารกงตวนาทสามารถบรรจวงจรทางตรรกะไว
แลวพมพบนแผนซลกอน(Silicon) เรยกวา "ชป"
• คอมพวเตอรยคท 4 (Fourth Generation Computer: พ.ศ. 2514-2523): ยคของ LSI
9
คอมพวเตอรยคนใชวงจร LSI (Large-Scale Integrated Circuit) เปนการรวมวงจรไอซจานวนมากลงในแผน
ซลกอนชป 1 แผน สามารถบรรจไดมากกวา 1 ลานวงจร ดวยเทคโนโลยใหมนทาใหเกดแนวคดในการบรรจ
วงจรทสาคญสาหรบการทางานพนฐานของคอมพวเตอรนนคอ CPU ลงชปตวเดยว เรยกวา "ไมโคร
โพรเซสเซอร"
• คอมพวเตอรยคท 5 (Fifth Generation Computer: พ.ศ. 2524-ปจจบน): ยคของ VLSI และ
portable/pocket computers
คอมพวเตอรยคนใชวงจร VLSI (Very Large-Scale Integrated Circuit) เปนการพฒนาไมโครโพรเซสเซอร
ใหมประสทธภาพมากขน
ประเภทของคอมพวเตอร
การจดแบงประเภทของ เครองคอมพวเตอร จะอาศย
คณสมบตตางๆ เชน ความเรวของการประมวลผล และขนาด
ความจา ของหนวยบนทกขอมล ซงสามารถแบงได เปน 4
ประเภท ไดแก
• Super Computer
• Mainframe Computer
• Mini Computer
• Micro Computer
ทมา: NECTEC’s Web Based Learing
ไมโครโพรเซสเซอร
Computer = CPU (ALU + CU) + Memory + I/O
Microcomputer = MPU + Memory + I/O
MPU = µP = CPU ทมลกษณะเปน single chip (IC เพยงตวเดยว) → วงจรรวม (IC) ททาหนาท
เปนหนวยประมวลผลกลางทสามารถโปรแกรมได
โดยท µP จะถกออกแบบขนมาเฉพาะตามลกษณะของงานทตองการให µP ทางาน ซง µP
สามารถทจะทางานตามคาสงตางๆ ทไดรบการโปรแกรมเขามา
กอกาเนดไมโครโพรเซสเซอร
เมอกอนนน Intel เปนบรษทผลตชปไอซ แหงหนงทไมใหญโตมากนกเทาในปจจบน เมอป ค.ศ.
1969 ไดสรางความสะเทอน ใหกบวงการอเลคทรอนคส โดยการออกชปหนวยความจา (Memory) ขนาด 1
Kbyte มาเปนรายแรก
บรษทบสซคอมพ (Busicomp) ซงเปนผผลตเครองคดเลขของญปนไดทาการวาจางให Intel ทาการ
ผลตชปไอซ ทบสซคอมพเปนคนออกแบบเองทมจานวน 12 ตว โครงการนถกมอบหมายใหนาย M.E. Hoff,
10
Jr. ซงเขาตดสนใจทจะใชวธการออกแบบชปแบบใหม โดยสรางชปทใหถกโปรแกรมได หมายถงวา
สามารถนาเอาชดคาสงของการคานวณไปเกบไวใน หนวยความจากอนแลวใหไอซตวนอานเขามาแปล
ความหมาย และทางานภายหลง
ในป 1971 Intel ไดนาผลตภณฑออกสตลาด โดยใชชอทางการคาวา Intel 4004 ในราคา 200 เหรยญ
สหรฐ และเรยกชปนวาเปน ไมโครโพรเซสเซอร(Microprocessor) กเพราะวา 4004 นเปน CPU (Central
Processing Unit) ตวหนง ซงมขนาด 4.2 X 3.2 มลลเมตร ภายในประกอบดวยทรานซสเตอรจานวน 2,250
ตว และเปนไมโครโพรเซสเซอรขนาด 4 บต
หลงจาก 1 ปตอมา Intel ไดออก ไมโครโพรเซสเซอร ขนาด 8 บตออกมาโดยใชชอวา 8008 ม
ชดคาสง 48 คาสง และอางหนวยความจาได 16 Kbyte ซงทาง Intel หวงวาจะเปนตวกระตนตลาดทางดานชป
หนวยความจาไดอกทางหนง
เมอป 1973 ทาง Intel ไดออก ไมโครโพรเซสเซอร 8080 ทมชดคาสงพนฐาน 74 คาสงและสามารถ
อางหนวยความจาได 64 Kbyte
ไมโครคอมพวเตอร เครองแรกของโลก
เมอป 1975 มนตยสารตางประเทศฉบบหนง ชอวา Popular Electronics ฉบบเดอนมกราคมไดลง
บทความเกยวกบเครองไมโครโพรเซสเซอรเครองแรกของโลกทมชอวา อลแตร 8800 (Altair) ซงทาออกมา
เปนชดคท โดยบรษท MITS (Micro Insumentation And Telemetry Systems)
ทมา: NECTEC’s Web BasedLlearing
บรษท MITS ถกกอตงเมอป 1969 โดยมจดมงหมายเพอทาตลาดในดานเครองคดเลข แตการคา
ชะลอตวลง ประธานบรษท ชอ H. Edword Roberts เหนการไกลคดเปดตลาดใหมซงจะขายชดคด
คอมพวเตอร ประมาณเอาไววาอาจขายไดในจานวนปละประมาณ 200-300 ชด จงใหทมงานออกแบบและ
พฒนาแลวเสรจกอนถงครสตมาส ในป 1974 แตเพงมา ประกาศตวในปถดไป สาหรบ CPU ทใชคอ 8080
และคาวา ไมโครคอมพวเตอร จงถกเรยกใชเปนครงแรกเพอชดคทคอมพวเตอรชดน
11
ชดคทของอลแตรนประกอบดวยไมโครโพรเซสเซอร 8080 ของบรษท Intel ม เพาเวอรซพพลาย ม
แผงหนาปดทตดหลอดไฟ เปนแถวมาใหเพอแสดงผล รวมถงหนวยความจา 256 Bytes นอกนนยงม Slot ให
เสยบอปกรณอน ๆ เพมได แตกทาให
MITS ตองผดคาด คอภายในเดอนเดยวมจดหมายสงเขามาขอสงซอเปนจานวนถง 4,000 ชดเลย
ทเดยวดวยชป 8080 นเองไดเปนแรงดลใจใหบรษท Digital Research กาเนดระบบปฏบตการ (Operating
System) ทชอวา CP/M หรอ Control Program for Microcomputer ขนมา ในขณะท Microsoft ยงเพงออก
Microsoft Basic รนแรก
ยค Z80
เมอเดอนพฤศจกายนป 1974 ไดม วศวกรของ Intel บางคนไดออกมาตงบรษทผลตชปเอง โดยมชอ
วา Zilog เนองจาก วศวกรเหลาน ไดมสวนรวมในการผลตชป 8080 ดวยจงไดนาเอาเทคโนโลยการผลตนมา
สรางตวใหมทดกวา มชอวา Z80 ยงคงเปน ชปขนาด 8 บต เมอไดออกสตลาดไดรบความนยมเปนอยางมาก
เนองจากไดปรบปรงขอบกพรองตาง ๆ ทมอยใน 8080 จงทาใหเครองคอมพวเตอร หลายตอหลายยหอ หน
มาใชชป Z80 กน แมแต CP/M กยงถกปรบปรงใหมาใชกบ Z80 นดวย
1.2 ภาษาคอมพวเตอร
มนษยทกวนนสอสารกนดวยภาษาทแตกตางกน ขนอยกบความเปนมาและสภาพแวดลอใของแตละ
ชาต ภาษาทนยมใชสอสารกนในปจจบนน เชน ภาษาองกฤษ ภาษาฝรงเศส ภาษาญปน ภาษาจน และอน ๆ
การสอสารของคอมพวเตอรกมลกษณะเชนเดยวกบการสอสารของมนษย กลาวคอมภาษาทแตกตางกน
จานวนมากทสามารถสงใหคอมพวเตอร ทางานได เชน ภาษาเบสก (BASIC) ภาษาปาสคาล (PASCAL)
ภาษาโคบอล (COBOL) ถงแมวาคอมพวเตอรจะรบคาสงจากภาษาคอมพวเตอรทมโครงสรางแตกตาง
กนไดแตเนองจากคอมพวเตอรเปนอปกรณอเลกทรอนกส ดงนนการรบคาสงในการทางานคอมพวเตอรจะ
รบเปนสญญาณไฟฟาทเรยกวา "ภาษาเครอง" หรอ 1 machine language นนเอง
ประเภทของภาษาคอมพวเตอร
ภาษาทใชในการโปรแกรมคอมพวเตอรมจานวนหลายรอยภาษา แตละภาษากมคณลกษณะโครงสราง
และกฎเกณฑของตนเอง บางภาษาถกพฒนาขนใหทางานกบเครองคอมพวเตอรบางประเภท ในขณะทบาง
ภาษาถกพฒนาใหสามารถทางานเฉพาะอยาง เชน ทางวทยาศาสตรหรอธรกจ
1. ภาษาเครอง (Machine Language)
ภาษาเครองเปนภาษาคอมพวเตอรเพยงภาษาเดยวทสามารถสอสารไดกบคอมพวเตอรโดยตรง ซงใน
บางครงกเรยกกนวาภาษาในยคทหนง
คาสงในภาษาเครองจะเปนชดคาสงทประกอบดวยตวเลขของเลขฐานสอง (binary digits หรอ bits) ทใช
เลข 0 และ 1 เปนสญลกษณแทนสญญาณไฟฟาปดและเปดตามลาดบ และเนองจากคอมพวเตอรสามารถ
สอสารเขาใจกบภาษาเครองไดโดยตรง ดงนนโปรแกรมภาษาเครองจงไมจาเปนตองมตวแปลภาษา ขอเสย
ของโปรแกรมทเขยนดวยภาษาเครองคอ โปรแกรมจะสามารถทางานเฉพาะกบเครองคอมพวเตอรทใช
12
พฒนาโปรแกรมนนเทานน (machine - dependent) และขอเสยอกประการหนงกคอผเขยนโปรแกรมจะรสก
ยงยากและเบอหนาย ตลอดจนตองใชเวลามากในการพฒนาโปรแกรมดวยภาษาเครอง
2. ภาษาระดบตา (Low-level Language): Assembly
เนองมาจากภาษาเครองยากแกการเขยนโปรแกรม ภาษาในยคทสอง (second-generation language) ท
เรยกวา ภาษาแอสแซมบล จงไดถกพฒนาขน ภาษาแอสแซมบลหรอภาษาสญลกษณ (symbolic
programming language) จะใชรหสและสญลกษณแทน 0 และ 1 ในการเขยนโปรแกรมภาษาแอสแซมบล ม
ขอดหลายประการเมอเทยบกบภาษาทเขยนดวยภาษาเครรอง ตวอยางเชน ภาษาแอสแซมบลจะใชตวยอทม
ความหมาย หรอในบางครงเรยกวานมอนก (mnemonics) ในคาสงเพอเขยนโปแกรม เชน ใช A แทนการ
บวก ใช C แทนการเปรยบเทยบ ใช M แทนการคณ เปนตน ขอดอกประการหนงกคอ ภาษาแอสแซมบล
สามารถเรยนรไดงายและเรวกวาการเขยนโปรแกรมดวยภาษาเครอง (เลข 0 และ 1) นอกจากนผเขยน
โปรแกรมดวยภาษาแอสแซมบลยงสามารถกาหนดชอทเกบขอมลในหนวยความจาเปนคาในภาษาองกฤษ
(แทนทจะเปนเลขทตาแหนงในหนวยความจา) ตวอยางเชน โปรแกรมเมอรสามารถใช PRICE แทนตาแหนง
ทอยของ unit price ซงเดมจะเกบเปนตวเลข เชน 11001011 เปนตน
โปรแกรมทเขยนดวยภาษาแอสแซมบล จาเปนจะตองทาการแปลดวยโปรแกรมแปลภาษาทเรยกวา
แอสแซมบล (assembler) โดยแอสแซมเบลอจะทาหนาทแปลโปรแกรมตนฉบบ (source program) ทเขยน
ดวยภาษาแอสแซมบลให เปนภาษาเครองซงคอมพวเตอรสามารถเขาใจได
ขอด: เหมาะสาหรบงานทตองการความแนนอน และความละเอยด
ประหยดเนอทของหนวยความจา
3. ภาษาระดบสง (High-level Language)
เนองมาจากภาษาเครองและภาษาแอสแซมบล ยงมขอจากดในการนาไปพฒนาโปรแกรม ดงนนจงไดม
การพฒนาภาษาระดบสง (high-level languages) ขน ภาษาระดบสงเปนภาษาทงายตอการเรยนรและการ
นาไปประยกตใชงาน นอกจากนโปรแกรมภาษาทเขยนดวยภาษาระดบสงยงสามารถทางานบนเครอง
คอมพวเตอรตางชนดกนไดดวย (ไมผกตดกบฮารดแวร) ภาษาในยคทสาม(third- generation languages หรอ
3GL) หรอภาษาโพรซเยอร(procedural languages) เปนชดคาสงทมลกษณะเหมอนคาในภาษาองกฤษ เชน
ใชคาสง add เพอสงใหคอมพวเตอรบวก และใชคาสง print เพอสงใหพมพ นอกจากนคาสงในภาษายคทสาม
ยงใชสญลกษณทางคณตศาสตร เชน * แทนการคณ + แทนการบวก เปนตน
เชนเดยวกบภาษาแอสแซมบล โปรแกรมภาษาในยคทสามทถกเขยนขนหรอทเรยกวา โปรแกรม
ตนฉบบ (source code) จงจาเปนจะตองมตวแปลภาษาเพอใหเปนภาษาเครองซงเปนภาษาทคอมพวเตอร
เขาใจได โดยโปรแกรมแปลภาษาระดบสงจะจาแนกเปน 2 ประเภทคอ คอมไพเลอร (compiler) และ
อนเตอรพรเตอร (interpreter) ตวแปลภาษาระดบสงขนอยกบภาษาทใชในการเขยนโปรแกรม
ตวแปลภาษา (Language translator) แบงออกเปน 3 ประเภท
• Assembler เปนตวแปลภาษาแอสแซมบลใหเปนภาษาเครอง
13
• Compiler คอ ซอฟตแวรทใชในการแปลภาษาระดบสงใหเปนภาษาเครอง (Machine language)
คาสงทใชเขยนในโปรแกรมภาษาระดบสงเราเรยกวา Source code คอมไพเลอรจะทาการแปล
Source code ใหเปนภาษาเครอง เราเรยกวา Object code เพอทาการจดเกบไวเพอนามาใชงาน (Run)
ภายหลง
• Interpreter คอ ซอฟตแวรททาการเปลยนภาษาระดบสงใหเปนภาษาเครองในแตละครงเมอตองการ
ทางาน แตกตางจากคอมไพเลอรททาการแปลครงเดยวสามารถทางานไดตลอด
1.3 ระบบเลขฐานทใชในคอมพวเตอร
เปนททราบกนดวาคอมพวเตอรทางานดวยกระแสไฟฟา ดงนนจงมการแทนทสภาวะของกระแสไฟฟา
ได 2 สภาวะ คอ สภาวะทมกระแสไฟฟา และสภาวะทไมมกระแสไฟฟา และเพอใหโปรแกรมเมอรสามารถ
สงการคอมพวเตอรได จงไดมการสรางระบบตวเลขทนามาแทนสภาวะของกระแสไฟฟา โดยตวเลข 0 จะ
แทนสภาวะไมมกระแสไฟฟา และเลข 1 แทนสภาวะมกระแสไฟฟา
ระบบตวเลขทมจานวน 2 จานวน (2 คา) เรยกวาระบบเลขฐานสอง (Binary Number System) ซงเปน
ระบบตวเลขทสามารถนามาใชในการสงงานคอมพวเตอร โดยการแทนทสภาวะตางๆ ของกระแสไฟฟา แต
ในชวตประจาวนของคนเราจะคนเคยกบตวเลขทมจานวน 10 จานวน คอ เลข 0 - 9 ซงเรยกวาระบบ
เลขฐานสบ (Decimal Number System) ดงนนจงมความจาเปนตองศกษาระบบเลขฐาน ประกอบการ
การศกษาวชาดานคอมพวเตอร
ระบบจานวนทใชในทางคอมพวเตอร ประกอบดวย
• ระบบเลขฐานสอง (Binary Number System) ประกอบดวยตวเลข 0 และ 1
• ระบบเลขฐานแปด (Octal Number System) ประกอบดวยตวเลข 0 - 7
• ระบบเลขฐานสบ (Decimal Number System) ประกอบดวยตวเลข 0 - 9
• ระบบเลขฐานสบหก (Hexadecimal Number System) ประกอบดวยตว เลข 0 - 9 และ A - F
ระบบเลขฐานสบ (Decimal Number System)
ระบบเลขฐานสบ เปนระบบเลขทใชกนในชวตประจาวน ไมวาจะนาไปใชคานวณประเภทใด โดยจะม
สญลกษณทใชแทนตวเลขตางๆ ของเลขฐานสบ (Symbol) จานวน 10 ตว ตวเลขหรอทเรยกวา Digit ทใช
แทนระบบเลขฐานสบ ไดแก 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
ตวเลขแตละตวจะมคาประจาตว โดยกาหนดใหคาทนอยทสด คอ 0 (ศนย) และเพมคาทละหนง จนครบ
จานวน 10 ตว ดงนนคามากทสด คอ 9 การนาตวเลขเหลาน มารวมกลมกน ทาใหเกดความหมายเปน "คา"
นน อาศยวธการกาหนด "หลก" ของตวเลข (Position Notation) กลาวคอ คาของตวเลขจานวนหนง พจารณา
ไดจากสองสงคอ
• คาประจาตวของตวเลขแตละตว
• คาหลกในตาแหนงทตวเลขนนปรากฏอย
14
ในระบบทวาดวยตาแหนงของตวเลข ตาแหนงทอยทางขวาสด จะเปนหลกทมคานอยทสด เรยกวา Least
Significant Digit (LSD) และตวเลขทอยในหลกซายสดจะมคามากทสด เรยกวา Most Significant Digit
(MSD)
นยาม คาหลกของตวเลขใดๆ คอ คาของฐานยกกาลงดวยคาประจาตาแหนง ของแตละหลก โดย
กาหนดใหคาประจาตาแหนงของหลกของ LSD มคาเปน 0
ในระบบเลขฐานสบ จะมสญลกษณอย 10 อยาง คอ 0 - 9 จานวนขนาดของเลขฐานสบ สามารถอธบาย
ได โดยใชตาแหนงนาหนกของแตละหลก (Positional Weight) โดยพจารณาจากเลข ดงตอไปน
3472 สามารถขยายไดดงน
= 3000 + 400 + 70 + 2 3472
= (3 x 103) + (4 x 102) + (7 x 101) + (2 x 100)
จะเหนวานาหนกตามตาแหนง ของตวเลขตางๆ สามารถขยายตามระบบจานวนได และถกแทนทดวย
สมการ ดงตอไปน
N = dnRn + ... + d3R
3 + d2R2 + D1R
1 + D0R0
เมอ
เลขทเปนเศษสวน หรอจานวนผสมนน กสามารถจะเขยนในรป Positional Notation ไดเชนกน โดย
ตวเลขแตละหลก จะอยในตาแหนงหลงจดทศนยม กาลงของหลก จะมคาเปนลบ เรมจากลบ 1 เปนตนไป
นบจากนอยไปหามาก ดงนนในระบบเลขฐานสบ หลกแรกหลงจดทศนยม จะมคาเทากบ เลขจานวนนนคณ
ดวย 10-1 ตวทสองจะเปน 10-2 ไปเรอยๆ
456.395 = 4 x 102 + 5 x 101 + 6 x 100 + 3 x 10-1 + 9 x 10-2 + 5 x 10-3
กฎการแทนตวเลขนน สามารถนาไปใชกบระบบตวเลขทวๆ ไปได โดยไมคานงวา เลขนนจะเปนฐาน
อะไร
ระบบเลขฐานสอง
ระบบเลขฐานสอง มสญลกษณทใชเพยงสองตว คอ 0 และ 1 ถาเปรยบเทยบเลขฐานสอง กบเลขฐานสบ
แลว คาของหลกทถดจากหลกทนอยทสด (LSD) ขนไป จะมคาเทากบ ฐานสองยกกาลงหมายเลขหลก
แทนทจะเปน 10 ยกกาลง ดงน
เลขฐานสบ เลขฐานสอง
100 = 1 หนวย
20 = 1 หนง
N คอ คาของจานวนฐานสบทตองการ
dn คอ ตวเลขทอยในตาแหนงตางๆ
R คอ ฐานของจานวนตวเลขนนๆ
n คอ คายกกาลงของฐานตามตาแหนงตางๆ
15
101 = 10 สบ 21 = 2 สอง
102 = 100 รอย 22 = 4 ส
103 = 1000 พน 23 = 8 แปด
ระบบเลขฐานสองเกดจากการใชตวเลขเพยง 2 ตว คอ 0 และ 1 ดงนน สมการคอ
N = ... + (d3 x 23) + (d2 x 22) + (d1 x 21) + (d0 x 20)
เมอ d คอคา 0 หรอ 1 เชน 1101 = (1 x 23) + (1 x 22) + (0 x 21) + (1 x 20)
เพอตดปญหายงยาก ในการแทนคาของเลขระบบตางๆ เรานยมเขยน ตวเลขอยในวงเลบ และเขยนคา
ของฐานนน อยนอกวงเลบ เชน (101101)2 = (45)10
สาหรบเศษสวน จะเขยนคาของเศษสวนอยหลงจด (Binary Point) ยกกาลงเปนลบ เพมขนตามลาดบ ดง
ตวอยาง (0.1011)2 = (1 x 2-1) + (0 x 2-2) + (1 x 2-3) + (1 x 2-4)
การแปลงเลขฐานสองเปนเลขฐานสบ
การแปลงเลขฐานสองเปนเลขฐานสบ มหลายวธ แตทจะแนะนาคอ การกระจายคาประจาหลก จากนน
นามาบวกรวมกนอกครง ผลลพธทไดจะเทากบคาในเลขฐานสบ
ตวอยาง 10111 มคาเทากบเทาไรในระบบเลขฐานสบ
วธทา
(10111)2 = 1 x 24 + 0 x 23 + 1 x 22 + 1 x 21 + 1 x 20
= 16 + 0 + 4 + 2 + 1
= 23
การแปลงเลขฐานสบเปนฐานสอง
การแปลงเลขฐานสบเปนเลขฐานสองกมหลายวธ แตทจะแนะนาคอ การหารดวย 2 แลวจดคาเศษจาก
การหารไว จนกระทงหารไมไดอกแลว จากนนนาเศษ จากการหารแตละครง มาไลลาดบจากลางขนไปหาคา
บนสด ผลลพธทไดจะเทากบคาในเลขฐานสอง
ตวอยาง 2610 มคาเทากบเทาไรในระบบเลขฐานสอง
วธทา หาไดจากวธหารสนดงน
เมอหารไมได ใหนาคาเศษมาเรยงตอกน โดยเรยงจากคาลางสด ไปหาคาบนสด เพราะฉะนนจะได
คาเทากบ 11010
16
ดงนน 26 (ในฐานสบ) จงมคาเทากบ 110102
การแปลงเลขเศษสวนฐานสอง (Fractional Binary Numbers) ใหเปนฐานสบ
เนอหาทกลาวไปแลว ไดกลาวถงระบบเลขฐาน และการแปลงเลขฐานสองเปนเลขฐานสบ การ
แปลงเลขฐานสบเปนเลขฐานสอง ในสวนของเลขจานวนเตม ในสวนนจะแนะนาการแปลงเลขฐานทเปน
เลขเศษสวน
สมการการแปลงเลขเศษสวนฐานสองเปนฐานสบ คอ
nRn
d....3R3
d2R2
d1R1
dN −++−+−+−=
ตวอยาง ตองการแปลงเลขเศษสวนฐานสอง 0.1011 เปนเลขฐานสบ
พจารณาทละจด
• ตาแหนงแรกของจานวนทระบ (d1) คอ 1 ซงมคายกกาลงฐานสองคอ -1 ดงนนคาประจา
ตาแหนงนคอ 1 x 2-1
• ตาแหนงทสอง (d2) คอ 0 มคายกกาลงฐานสองคอ -2 ดงนนคาประจาตาแหนงคอ 0 x 2-2
• ตาแหนงทสาม (d3) คอ 1 มคายกกาลงฐานสองคอ -3 ดงนนคาประจาตาแหนงคอ 1 x 2-3
• ตาแหนงทส (d4) คอ 1 มคายกกาลงฐานสองคอ -4 ดงนนคาประจาตาแหนงคอ 1 x 2-4
สามารถเขยนสมการไดคอ
102
43
6875.0 0.1011
0625.0 125.0 0 5.0 2
1
2
1 0
2
1
421 321 220 121 N
=+++=
+++=
−×+−×+−×+−×=
การแปลงเลขหลงทศนยม (เศษสวน) ฐานสบ (Fractional Decimal Numbers) ใหเปนฐานสอง
การเปลยนเลขหลงทศนยมฐานสบ ใหเปนฐานสอง จะใชวธการนาคาเลขหลงทศนยมตง แลวคณ
ดวยสอง จากนนนาผลลพธทไดเปนตวตงในการคณครงตอไป จนกวาคาผลลพธสวนทเปน เลขหลงทศนยม
เทากบ .00 กรณทคณแลวไมลงตวเทากบ .00 กใหคณจนไดคาทตองการ สดทายนาคาตวเลขกอนทศนยม
จากผลลพธแตละครง มาเขยนเรยงตอกน กจะไดคาฐานสองทตองการ ดงตวอยาง
ตวอยาง ตองการแปลงเลข (0.65625)10 เปนเลขฐานสอง
พจารณาทละจด
นา 0.65625 คณดวย 2 ไดคาเทากบ 1.31250
• คา 1 (เลขกอนทศนยม) จะเปนคาหลกแรกของคาเลขฐานสอง
• นา .31250 (เลขหลงทศนยม) ไปเปนตวตงในการคณครงถดไป
นา 0.31250 คณดวย 2 ไดคาเทากบ 0.62500
• คา 0 (เลขกอนทศนยม) จะเปนคาหลกทสองของคาเลขฐานสอง
17
• นา .62500 (เลขหลงทศนยม) ไปเปนตวตงในการคณครงถดไป
นา 0.62500 คณดวย 2 ไดคาเทากบ 1.25000
• คา 1 (เลขกอนทศนยม) จะเปนคาหลกทสามของคาเลขฐานสอง
• นา .25000 (เลขหลงทศนยม) ไปเปนตวตงในการคณครงถดไป
นา 0.25000 คณดวย 2 ไดคาเทากบ 0.50000
• คา 0 (เลขกอนทศนยม) จะเปนคาหลกทสของคาเลขฐานสอง
• นา .50000 (เลขหลงทศนยม) ไปเปนตวตงในการคณครงถดไป
นา 0.5000 คณดวย 2 ไดคาเทากบ 1.00000
• คา 1 (เลขกอนทศนยม) จะเปนคาหลกทหาของคาเลขฐานสอง
• เนองจากเลขหลงทศนยมเทากบ .00000 จงไมตองคณตอ
นาเลขกอนทศนยมของการคณแตละครง มาเขยนเรยงกน จะไดคาเทากบ 10101 ดงนนเลขทศนยม
ฐานสบ 0.65625 จะเทากบ 0.10101 ในฐานสอง
การแปลงเลขฐาน 10 เปนฐาน 8 และฐาน 16
การแปลงเลขฐาน 10 เปนเลขฐาน 8 และเลขฐาน 16 มลกษณะเดยวกบการแปลงเปนเลข
ฐาน 2 โดยใชคาฐานไปหารเพอหาเศษ ตวอยาง
ตองการแปลง 169 เปนเลขฐาน 8 กระทาไดโดย
8 หาร 169 เทากบ 21 เศษ 1
8 หาร 21 เทากบ 2 เศษ 5
8 หาร 2 ไมสามารถหารได เศษ 2
ดงนน 169 เทากบ 2518
ตองการแปลง 169 เปนฐาน 16 กระทาไดโดย
16 หาร 169 เทากบ 10 เศษ 9
16 หาร 10 ไมสามารถหารได เศษ 10
แตเนองจาก 10 เปนคาทแสดงดวย A
ดงนน 169 เทากบ A916
การแปลงเลขฐาน 8 หรอ 16 เปนฐาน 10 กใชวธเดยวกบการแปลงเลขฐาน 2 เปนฐาน 10 ดง
ตวอยางทแนะนาไปกอนแลว
ระบบตวเลขกบรหสขอมล
18
รหสขอมล (Data Representation) หมายถง รหสทใชแทนตวเลข ตวอกษร สญลกษณตางๆ ท
ประกอบอยในคาสง และขอมล เพอใชในการประมวลผล สามารถแบงได 2 ประเภทคอ
• รหสภายในระบบคอมพวเตอร (Internal Code) เปนรหสทใชแทนขอมลในหนวยความจาของ
คอมพวเตอร เชน
o รหส BCD - Binary Code Decimal
o รหส EBCDIC - Extended Binary Coded Decimal Interchange Code
o รหส ASCII - American Standard Code for Information Interchange
o รหส Unicode
• รหสภายนอกระบบคอมพวเตอร (External Code) เปนรหสทพฒนาสาหรบบนทกขอมลนอกเครอง
คอมพวเตอร เชนรหสทใชกบบตรเจาะร
บต (Bit)
สภาวะไฟฟา 1 เสน หรอคา 0 หรอ 1 แตละคาเรยกวา บต (Bit) ซงเปนคายอของ "BInary digiT"
ไบต (Byte)
กลมของบตทมความหมายเฉพาะเรยกวา ไบต (Byte) ดงนนถามสายสญญาณ 8 เสน แสดงวามสญญาณ
ทสามารถผสมผสานกนได 8 บต เมอนาคาสญญาณตางๆ มาผสมผสานกน กสามารถสรางรหสแทนขอมล
ได จานวน 28 = 256 คา เปนตน ดงตวอยางในตารางทแสดงอกขระ, การเรยงกนของบต และคาเลขฐาน 10
ทแทนอกขระ
ดงนนถาตองการปอนคาวา Hello จะมคาเทากบขอมลจานวน 6 ไบต ซงมกจะไดยนวา 1 ไบต เทยบ
กบ 1 ตวอกษรนนเอง
Binary Code Decimal (BCD)
BCD เปนรหสขอมลทประกอบดวยเลขฐานสอง 6 บต แทนขอมล 1 อกขระ (1 Character) จง
สามารถสรางรหสขอมลไดจานวน 26 = 64 รหส
รหสทง 6 บต แบงไดเปน 2 กลม โดย 2 บตแรกเรยกวา Zone Bit และ 4 บตถดไปเรยกวา Numeric
Bit
Extended Binary Coded Decimal Interchange Code (EBCDIC)
EBCDIC เปนรหสแบบ 8 บต โดยใชเลขฐานสอง 8 ตวแทนขอมล 1 อกขระ ทาใหสามารถสราง
รหสได 256 รหส (28) และยงสามารถใชเลขฐาน 16 มาใชแสดงรหสขอมลไดเชนกน เปนระบบการลงรหสท
พฒนาโดย IBM เนองจากพฒนาจาก IBM ทาใหเปนรหสทเดนกวา ASCII เมอนาไปใชกบบตรเจาะร
(Punched cards) ตงแตป 1960 อกทงยงมอกขระ "cent sign" ซงไมมใน ASCII
American Standard Code for Information Interchange (ASCII)
19
ASCII เปนรหสทนยมใชกนอยางแพรหลายในปจจบน พฒนาโดยสถาบนมาตรฐานแหงชาต
สหรฐอเมรกา (American National Standard Institute: ANSI) ประกอบดวยเลขฐานสอง 7 บต (ปจจบนใช 8
บต) เรยกวา 1 ไบต (Byte) แทนอกขระ 1 ตว ซงเปนรหสทนยมใชกนบนคอมพวเตอรระบบ PC ทงนได
แบงเปน 3 ชดคอ
• 32 ชดแรก (ตาแหนงท 0 - 31) แทนรหสควบคมตางๆ
• ตาแหนงท 32 - 127 แทนอกขระภาษาองกฤษ ตวเลขและสญลกษณตางๆ เรยกวา Lower ASCII
• 128 ชดหลง (ตาแหนงท 128 - 255) แทนอกขระในภาษาตางๆ เชน อกขระภาษาไทย เปนตน ทาให
คอมพวเตอรสามารถรบ/สงขอมลภาษาอนๆ ได เรยกวา Higher ASCII
20
บทท 2 ระบบไมโครคอมพวเตอร
2.1 ระบบไมโครคอมพวเตอรพนฐาน
ระบบไมโครคอมพวเตอรโดยพนฐานประกอบไปดวยองคประกอบ 3 สวนดวยกนคอ
• หนวยประมวลผลกลาง หรอ CPU (Central Processing Unit)
• หนวยความจา
• สวนทตดตอกบอปกรณ input/output
นอกจากองคประกอบหลกทง 3 สวนนแลว ยงตองมสวนสาคญทเปนตวเชอมโยงทกสวนใหทางาน
รวมกนนนกคอ ระบบเสนทางในการตดตอสอสารขอมล ดงแสดงในรปท 2.1
รปท 2.1 ระบบไมโครคอมพวเตอรพนฐาน
หนวยความจา (Memory) ทาหนาทเกบคาสงและขอมลในรปของเลขฐานสอง หนวยความจานสามารถ
แบงออกไดเปน 2 ประเภทใหญ คอ
1. หนวยความจาหลก (Main Memory) เชน ROM (Read-Only Memory) และ RWM (Read/Write
Memory)
2. หนวยความจาเกบขอมล (Storage Memory) เชน แผนดสก และ ฮารดดสก
โดยท
ROM เปนหนวยความจาทสามารถอานไดอยางเดยว ไมสามารถเปลยนแปลงขอมลภายในได จง
ใชสาหรบเกบขอมลทไมตองการการเปลยนแปลง โดยทวไปขอมลทอยภายใน ROM จะไดรบการเขยน
บนทกจากโรงงาน ซงมกจะเปนโปรแกรมทสาคญเพอใหระบบเรมตนทางานเฉพาะอยาง
แบงออกเปนหลายตาแหนง 64K → >4G
CPU ทาตามคาสงเสมอ
แสดงทศทางของขอมล
แบงออกเปนหลาย ๆ ตาแหนง (256 → 1024)
I/O Space อาจใชพนทบางสวนของ Memory
space กได ซงเรยกวา memory-mapped I/O
ROM
RWM
Memory
ALU
Control
Unit
Registers
I/O
CPU
data
data
data
21
RWM หรอทนยมเรยกกนวา RAM (Random Access Memory) เปนหนวยความจาทสามารถทง
อานและเขยนได ใชสาหรบเกบโปรแกรมและขอมลทวๆไปของผใช โดยทหนวยความจาประเภทนม
ลกษณะเปนแบบ volatile คอขอมลจะสญหายไปจากหนวยความจาเมอไมมไฟเลยงระบบ
อปกรณ input: ทาหนาทถายโอนขอมลทอยในรปของเลขฐานสอง จากภายนอก เขามายง CPU
อปกรณ output: ทาหนาทถายโอนขอมลทอยในรปของเลขฐานสอง จาก CPU ออกสภายนอก
อปกรณอนพตอยางเดยว - แปนพมพ, เมาส, สวทช, …
อปกรณเอาทพตอยางเดยว - เครองพมพ, จอภาพ, หลอดไฟ LED, …
อปกรณทเปนทงอนพตและเอาทพต - secondary storage, communication devices
(harddisk drives, floppy disk drives, tapes)
ระบบสายสญญาณ (Bus System)
สายสญญาณในการตดตอสอสารขอมลระหวางวงจรและอปกรณตางๆ ททางานรวมในระบบไม
โครโพรเซสเซอรม 3 ประเภท คอ
• Address Bus: ทางานไดทศทางเดยว ใชในการกาหนดตาแหนงทใชในการตดตอระหวางวงจร
และอปกรณตางๆ ทตอและทางานรวมกบ CPU ตามปกต address bus นจะถกกาหนดเปน A0 ถง
An โดย n เปน MSB (Most Significant Bit) ของ address bus นน
• Control Bus: ใชควบคมการตดตอกบวงจรและอปกรณตางๆ ทตอรวมกบ CPU โดย CPU จะ
สงสญญาณควบคมออกไปเพอกาหนดการตดตอใหอปกรณทตอรวมทราบ
• Data Bus: ใชในการรบและสงขอมล ทางานไดสองทศทาง โดยจะทางานหลงจาก address bus
และ control bus ไดกาหนดตาแหนงและการตดตอสอสารแลว เพอเปนการสงขอมลถงกน
เชนกนตามปกต data bus นจะถกกาหนดเปน D0 ถง Dn โดย n เปน MSB (Most Significant
Bit) ของ data bus นน โดยทเราจะเรยกประเภทของไมโครโพรเซสเซอรตามขนาดของ data bus
ดงน ไมโครโพรเซสเซอร 8 บต เชน ไมโครโพรเซสเซอร Z80 เนองจากม data bus ขนาด 8 บต
เปนตน
2.2 หนวยประมวลผลกลาง
หนวยประมวลผลกลาง (Central Process Unit: CPU) เปนสวนสาคญทสดของระบบไมโคร
โพรเซสเซอร โดยมวงจรควบคมใหการทางานเปนไปตามคาสง สวนประกอบหลกภายในวงจร CPU คอ
• หนวยคานวณทางตรรกะและคณตศาสตร (Arithmetic and Logic Unit: ALU) ทสามารถคานวณ
ไดทงตวเลขและตวอกษร โดยการประมวลผลในสวนของ ALU ทสาคญจะประกอบดวย การ
บวก (add), การลบ (subtract), ลอจก AND, ลอจก OR, ลอจก EX-OR, เปรยบเทยบ (compare),
22
การเลอนบตทางซายหรอขวา, การเพมคา (increment), การลดคา (decrement), การเซทบต (set
bit), การรเซทบต (reset bit), การทดสอบบต (test bit)
• หนวยควบคม (Control Unit) ททาหนาทควบคมการทางานภายในใหปฏบตตามคาสงทกาหนด
• วงจรหนวยความจาภายในหรอ register ททาหนาทเกบคาตวแปรตางๆ ทใชในการคานวณและ
ผลลพธทไดจากการคานวณ ดงแสดงในรปท 2.2
รปท 2.2 ระบบไมโครโพรเซสเซอรพนฐาน
การทางานของ CPU มอยดวยกน 3 ลกษณะหลกๆ คอ
อานคาสง (fetch an instruction)
แปลคาสง (decode the instruction)
ทางานตามคาสง (execute the instruction)
รปท 2.3การทางานพนฐานของ CPU
• Fetch: CPU ทาการอานคาสงทเปนเลขฐานสองจากหนวยความจา
• Decode: CPU ทาการแปลหรอถอดรหสของคาสงทอานมา เพอหาวาเปนคาสงประเภท
ไหน มการทางานอยางไร รวมทงตองมการตดตอกบสวนอนๆ เชน หนวยความจาหรอ I/O บาง
หรอไมอยางไร
• Execute: CPU นาคาสงนนไปปฏบต โดยการทางานตางๆ ในขนตอนน จะขนอยกบวา
คาสงทไดจากการถอดรหสเปนอะไร และมการตดตอกบสวนใดบาง ซงแตละคาสงจะมจานวน
รหสเทาไรนนกขนอยกบชนดของ CPU เชน Z80 จะมขนาดตงแต 1-4 bytes สวน MCS-51 จะม
ขนาดตงแต 1-3 bytes เปนตน
23
การทางานของ CPU อาจเลอมกนไดแบบ pipelining
Pipeline คอการทางานแบบคาบเกยวกน (overlap) โดยการแบง CPU ออกเปนสวนยอย ๆ แลวแบงงาน
กนรบผดชอบ โดยเดมท pipeline เปนเทคนคของสถาปตยกรรมแบบ RISC (Reduced Instruction Set
Computer) ตอมานามาใชกบสถาปตยกรรมแบบ CISC (Complex Instruction Set Computer) ซงการ
ทางานของระบบทม pipeline นนกคอ จะสามารถรบงานใหมไดในขณะทยงคงทางานเกาตอไปไดดวย
จากรปจะเหนวา ขนตอนการทางานของแตละคาสงแบงการทางานออกเปน 5 ขนตอน ซง
สามารถแยกการทางานออกจากกนเปนขนตอนได เมอคาสงแรกทา task#1 เสรจจะเขาสขนตอน task#2
ซงใน cycle น ในสวนททา task#1 จะวาง คาสงตอไปสามารถทา task#1 ไดเลย โดยไมตองรอใหคาสง
แรกทางานจนเสรจถงขนตอน task#5 ซงจะทาใหการทางานเรวขนถงประมาณ 5 เทาจากปกต ดงรปท 2.4
รปท 2.4 Pipelining
Z80 ทางานแบบธรรมดา ไมม pipeline
2.3 สถาปตยกรรมของไมโครโพรเซสเซอร
หมายถง โครงสรางและการทางานของไมโครโพรเซสเซอรอยางกวางๆ ความหมายไมไดจากด
อยเฉพาะภายในไมโครโพรเซสเซอรแคนน แตอาจรวมถงฮารดแวรและซอฟตแวรภายนอกทใชงานกบ
ไมโครโพรเซสเซอรกได
ไมโครโพรเซสเซอรแตละเบอรจะมสถาปตยกรรมทตางกน โดยทวไปเราจะเปรยบเทยบไมโคร
โพรเซสเซอรใน องคประกอบหลกตอไปน
1. ขนาด data word → ยงใหญ ยงเรว
2. ขนาด address bus → ยงใหญ ยงมหนวยความจามาก
3. ความเรว
องคประกอบรองทใชในการเปรยบเทยบ เชน
1. ม register กตว มชนดอะไรบาง
2. จานวนคาสง และชนดของคาสง
3. วธการทคาสงอางถงขอมล (addressing modes) มกวธ อะไรบาง
4. วงจรหรออปกรณประกอบมอะไรบาง
24
2000H 07
2001H 11
2002H 30
LD A, (3011H)
2003H 1A ← NEG
2004H B1
2005H 10
2006H 30
LD (3010H), A
แปลงมาเปน machine code
โดย computer
3010H ← Ch1
PC →
(Program Counter)
3011H ← Ch2
25
บทท 3 สถาปตยกรรมของไมโครโพรเซสเซอร Z80
ทาไมตองเปน Z80: Z80 เปนไมโครโพรเซสเซอรทมโครงสรางงายตอการเรยนรและการจดวงจรแตละขา
ของตวไมโครโพรเซสเซอรมหนาทเดยว ไมซบซอน ผทเรมตนศกษา Z80 จะเกดความรสกวา การเรยนรไมโคร
โพรเซสเซอรไมใชเรองยาก
โครงสรางของไมโครโพรเซสเซอร Z80 มโครงสรางทพฒนามาจาก 8080 ดงนนในแงโครงสรางพนฐาน
จะ เหมอนกบ CPU 8080 แตเนองจาก Z80 มการพฒนามากขนทางซอฟตแวรและฮารดแวรจงทาใหมรายละเอยด
แตกตางเพมเตมอกหลายประการดวยกน
3.1 ขาสญญาณบน Z80
Z80 เปน IC ขนาด 40 ขา แบบ DIP (Dual Inline package) ดงแสดงในรปท 3.1 โดยมโครงสรางภายใน
และตาแหนงของขาตางๆ ดงตอไปน
รปท 3.1 Z80 Microprocessor Pin layout
หนาทของขาสญญาณบน Z80
จากรปท 3.1 ขาและสญญาณตางๆของ Z80 สามารถแบงออกไดเปน 6 กลมดงในรปท 3.2 คอ
1. Address bus
2. Data bus
3. Control signals
4. External requests
5. Request acknowledge และ Special signals
6. Power และ Frequency signals
A10 A9 A8 A7
A6 A5
A4 A3 A2 A1 A0 GND RFSH
1M
RESET BUSRQ
WAIT BUSAK WR RD
A11 A12 A13 A14
A15 φ
D4 D3 D5 D6
+5 V D2 D7 D0 D1
INT NMI
HALT MREQ
IORQ
Z80
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
26
รปท 3.2 Z80 Microprocessor Logic Signals
โดยรายละเอยดของขาและสญญาณตางๆ มดงน
Address Bus:
สายสญญาณ tri-state ซงเปนสายสญญาณทมทศทางเดยว (unidirectional) 16 สญญาณ (A15- A0) ใชใน
การสงตาแหนงของ memory registers หรอ อปกรณ I/O ตางๆ ซงจะสามารถอางไดถง 64k (216) ตาแหนง
Data Bus:
สายสญญาณ tri-state ซงเปนสายสญญาณทม 2 ทศทาง (bidirectional) 8 สญญาณ (D7- D0) ใชในการ
โอนยายขอมล โดยในขอมลสามารถเคลอนทในทศทางใดกไดในแตละสายสญญาณคออาจจะเปนจากไมโคร
โพรเซสเซอรไปยง memory หรออปกรณ I/O ตางๆ หรอในทางกลบกนคอจาก memory หรออปกรณ I/O ตางๆ
ไปยงไมโครโพรเซสเซอร
Control และ status signals:
• 1M - Machine cycle one: ขาสญญาณท active low โดยจะ active เมอ opcode ถก fetch จาก memory
• MREQ - Memory request: ขาสญญาณ tri-state ท active low โดยจะ active เมอมการ read/write กบ memory
โดยเปนการบอกวา คาตาแหนงของขอมลใน memory ทตองการ read/write ไดอยท address bus แลว
• IORQ - I/O request: ขาสญญาณ tri-state ท active low โดยจะ active เมอมการ read/write กบ I/O โดยเปน
การบอกวา คาตาแหนงของขอมลของ I/O ทตองการ read/write ไดอยท low-order address bus (A7 - A0) แลว
• RD - Read: ขาสญญาณ tri-state ท active low โดยจะ active เมอมการ read จาก memory หรอ I/O
• WR - Write: ขาสญญาณ tri-state ท active low โดยจะ active เมอมการ write จาก memory หรอ I/O
External Requests :
• RESET - Reset: ขาสญญาณท active low โดยเปนการ reset CPU ซงจะตอง active อยางนอย 3 clock
periods เพอ clear คา PC, R, I โดยทระหวาง reset สายสญญาณตางๆ จะไม active
Address Bus
A15
A0
D7
D0
1M
MREQ
IORQ
WR RD
+5 V GND φ INT NMI WAITRESET BUSRQ
BUSAK RFSH HALT
Data Bus
Control Signals
Request cknowledge
และ Special Signals
External Requests
Power Clock
Ground
27
• INT - Interrupt request: (level-sensitive) ขาสญญาณท active low เพอขอขดจงหวะการทางานของ CPU
รบการขดจงหวะ (interrupt acknowledge) จะมสญญาณ IORQ ในชวง M1 ดวย
• NMI - Nonmaskable interrupt: (edge-sensitive) ขาสญญาณท active low ถาสญญาณน active จะขดจงหวะ
การทางานของ CPU ไมสามารถจะ disable ได ใชสาหรบการทางานฉกเฉน
• BUSAK - Bus acknowledge: ขาสญญาณท active low โดยจะ active เพอแสดงวา CPU ตอบรบ BUSRQ
• WAIT - Wait: ขาสญญาณท active low โดยเปนสญญาณทขอให CPU คอยกอน
Request Acknowledge และ Special Signals:
• HALT - Halt: ขาสญญาณท active low โดยเปนสญญาณแสดงวา CPU อยในสถานะ halt
• RFSH - Refresh: ขาสญญาณท active low โดยจะ active เมอ CPU จะทาการ refresh DRAM
• BUSRQ - Bus request: ขาสญญาณท active low โดยอปกรณภายนอกจะสงสญญาณนเพอขอควบคม bus เอง
Clock และ Power Supply:
• φ - Clock: ตอกบแหลงความถภายนอก เนองจาก Z80 ไมมวงจรนาฬกาภายในตว chip
• +5V - Power supply: แหลงจายไฟเลยงระบบ (ควรม Capacitor ชนด tantalum ตอครอม power supply)
• GND - Ground: ขาสายดน
3.2 รจสเตอรบนไมโครโพรเซสเซอร Z80
สวนของไมโครโพรเซสเซอรทเกยวของกบการเขยนโปรแกรม ซงไดแก รจสเตอร (register) ทผเขยน
โปรแกรมสามารถใชงานได โครงสรางภายในของไมโครโพรเซสเซอร Z80 ประกอบดวย รจสเตอรภายในท
สามารถเขยนและอานไดถง 208 บต โดยแบงไดเปนกลมของรจสเตอรขนาด 8 บต 18 รจสเตอรและรจสเตอร
ขนาด 16 บต อก 4 รจสเตอร
รจสเตอรใน Z80 เมอแบงตามหนาทสามารถแบงไดเปนดงน
กลมรจสเตอรหลก (Main Registers)
รจสเตอรในกลมแรก คอ A, B, C, D, E, H, L และ F เปนรจสเตอรขนาด 8 บต ทใชงานทวไปโดย
รจสเตอร เหลานสามารถประกอบรวมกนเปนครจสเตอรได คอ AF, BC, DE และ HL โดยครจสเตอรเหลานไดรบ
การใชงานในลกษณะของรจสเตอร ขนาด 16 บต การกระทาภายใน CPU อาจจะอาศยเพยงรจสเตอรเดยวหรอ
กระทาเปนครจสเตอรได รปท 3.3 แสดงใหเหนถงทงรจสเตอรหลกและรจสเตอรรอง (ซงจะกลาวตอไป) ทมอยใน
Z80 โดยท A คอ Accumulator และ F คอ flag ซงมลกษณะพเศษเฉพาะ จงขออธบายรายละเอยดของรจสเตอรทง
สองตวนเพมเตมดงน
Accumulator และ Flag register
CPU จะมรจสเตอรทใชเปนหลกในการ เปนตว operand สาหรบกระทาทางคณตศาสตรและลอจก โดย
รจสเตอรหลกนจะมเพยง 8 บต เรยกวา accumulator การกระทาในสวนของหนวยคณตศาสตร และทาง
ตรรกศาสตรยอมเกดเงอนไขไดหลายอยางทจะตองแสดงสถานะภาพของเงอนไขเหลานน เชน เงอนไขผลลพธ
28
เปนศนยผลลพธเปนบวกหรอลบมตวทดหรอตวขอยมในการกระทา ทางคณตศาสตร แสดงเงอนไข parity คหรอค
สงเหลานจะใหผลลพธแสดงสถานะ ไดดวย flag
Main Register Alternate Register การเรยกใช register pairs
A F A′ F′
B C B′ C′
D E D′ E′
H L H′ L′
8 บต
8 บต
AF, BC, DE, HL
16 บต
A - Accumulator เปน register ทใชบอย โดยเฉพาะคาสงทเกยวของกบการคานวณ
F - Flag register บอกสถานะของผลลพธจากการทาคาสงทเกยวของกบการคานวณ
สวนทเหลอ - General purposed register
รปท 3.3 กลมรจสเตอรหลกและสารองขนาด 8-bit ของไมโครโพรเซสเซอร Z80
Flag ของ Z80 จะมดวยกนทงหมด 6 ตว จงใชเพยง 6 บต แต Z80 อาศยการเพมบตขนอก 2 บต และกลาย
เปน register F ซงมขนาด 8 บต รปท 3.4 แสดงถงโครงสรางภายในของแตละบตใน flag register โดยทรายละเอยด
ของแตละบตจะมแสดงอยในตารางท 3.1
รจสเตอร F นสามารถไดรบการ set, reset, การกระทาตามคาสงทางคณตศาสตร หรอ ทางตรรกศาสตรได
และเราสามารถใช F เหมอนรจสเตอรหนง ซงเมอรวมกบ accumulator (A) แลว จะกลายเปนรจสเตอรขนาด 16บต
ได โดยทคนเขยนโปรแกรมยงสามารถใชคาสงในการเคลอนยายขอมลจาก accumulator (A) และ flag register (F)
ไปเกบไวใน A' และ F' ได เพอทาใหการใชงาน ของ A และ F มประสทธภาพดยงขน
7 6 5 4 3 2 1 0
Flag register S Z X H X P/V N C
รปท 3.4 Flag Register ของไมโครโพรเซสเซอร Z80
0 - ถา bit ท 7 ของผลลพธเปน 0 S sign flag
1 - ถา bit ท 7 ของผลลพธเปน 1 ใชกบ signed number
0 – ถาผลลพธ ≠ 0 Z zero flag
1 – ถาทก bit ของผลลพธ เปน 0
29
0 – ถาไมมการทด/ยมระหวาง bit บน-ลาง H half carry flag
1 - ถามการทด/ยมระหวาง bit บน-ลาง
0 – ถาไมเกด overflow
1 - ถาเกด overflow
กรณ overflow
(สาหรบ signed number)
0 – ถาจานวน bit ทเปน 1 เปนเลขค P/V parity/overflow
1 - ถาจานวน bit ทเปน 1 เปนเลขค กรณ parity
0 – ถาเปนคาสงประเภท add N add/subtract
1 - ถาเปนคาสงประเภท subtract
0 - ถาไมมการทด/ยม ท bitท 7 หรอ bit ท 15 C Carry flag
1 – ถามการทด/ยม ท bit ท 7 หรอ bit ท 15 เสมอนเปน bit ท 8 หรอ 16
ตารางท 3.1 รายละเอยดของแตละบตใน Flag Register
บางคาสงมผลตอ carry flag โดยตรง เชน
SCF - set carry flag
CCF - complement carry flag Note: ไมมคาสงท reset carry flag
คาสงประเภท rotate และ shift กมผลตอ carry flag ไดดวย
กลมรจสเตอรสารอง (Alternate Register)
รจสเตอรชดนเปนรจสเตอรทใชในการเกบขอมลชวคราว โดยเปนตวเกบขอมลทมาจากรจสเตอรหลก ใน
การทตองการใชรจสเตอรหลกทางานอยางอนกอน ดงนนรจสเตอรกลมนจงไมสามารถกระทาทางคณตศาสตร
และทางตรรกศาสตรได รจสเตอรเหลานมดวยกน 8 ตว คอ A', B', C', D', E', H', L' และ F’
กลมรจสเตอรทใชงานเฉพาะอยางขนาด 16 บต
นอกเหนอจาก Accumulator และ Flag register ทมหนาทเฉพาะอยางแลว Z80 ยงปบระกอบไปดวย
register ทมหนาทเฉพาะอยางอนๆ อก ซงมขนาด 16 บต (ในขณะท A และ F ตางกมขนาดเพยง 8 บต) คอ
Program counter (PC) เปนรจสเตอรขนาด 16 บต ทเปนตวกาหนดตาแหนงของโปรแกรมในขณะสภาวะ
การกระทาการ fetch โดยขณะทา การ fetch คาทอยใน PC จะไปปรากฏอยท address bus เพอชไปยงตาแหนงใน
หนวยความจา ให CPU อานคาสงมาตความหมายคาทอยใน PC จะเพมคาขนไดอยางอตโนมต หลงการกระทาการ
fetch แตถาหาก CPU กระทาคาสงใหขามไปยงตาแหนงอน (Jump) คา address ทจะกระโดดขามนนจะโหลดเขา
มายง PC ไดอยางอตโนมต
Stack pointer (SP) เปนรจสเตอรทมขนาด 16 บตทใชสาหรบชไปยง address ชนบนสดของ stack ทอยใน
RAM โดยสวนของ stack มลกษณะโครงสราง เปนหนวยความจา เปนแบบเกบทหลงเรยกออกกอน (last-in-first-
out) ขอมลใน stack อาจไดรบการ push หรอ pop มาจาก รจสเตอรภายใน CPU ลกษณะของ stack ในทนยงเปน
สวนชวยในการกระทา interrupt และการเรยก โปรแกรมยอย กลาวคอ ในการ interrupt คาของโปรแกรม
30
เคานเตอรจะไดรบการรกษาไวในชน stack ครนเมอโปรแกรมกลบจาก interrupt ไปกระทายงโปรแกรมหลกกจะ
นาคาจาก stack กลบเขามายง PC ใหม ในทานองเดยวกน การกระโดดไปกระทายงโปรแกรมยอยกเชนเดยวกน
ดงนน การกระทาในรปของ interrupt ของ โปรแกรมยอยสามารถ ซอนกนไดไมมสนสด
Index Register (IX, IY) Z80 ม index register ขนาด 16 บตอย 2 ตว แตละตวใชประโยชนหลกในการทา
หนาทเปนตวเกบ base address เพอ ทาหนาทอาง address แบบ index addressing ซงใน mode นซงมขอมลทอยใน
index register นจะใชรวมกบขอมลทตดมากบคาสง (operand) อก 8 บต เพอเปนตวกาหนด address ใหกบคาสง
ขอมลทตดมากบคาสงนเราเรยกวา displacement ซงจะเกบในรปของตวเลข 2's complement
Interrupt page address register (I) การ interrupt ของ Z80 มดวยกนอยหลาย modes และ mode หนงททา
ใหการ interrupt ของ Z80 มประสทธภาพสง กลาวคอ เมอเกดการ interrupt ใน mode นขน มนสามารถอางถง
address โดยทางออม ไปทางานในทใดกไดในหนวยความจา โดยอาศยคาในรจสเตอร I นซงมขนาดเพยง 8 บต
รวมกบคาทสงมาจากอปกรณ peripheral อก 8 บต ชไปยงคาในหนวยความจาเพอนาคานนมา load เขาใน PC เพอ
ทางานตอไป ดวยวธการนเราจงสามารถกระโดดเขาไปทาทสวนใดกไดในหนวยความจา
Memory refresh register (R) การตอไมโครโพรเซสเซอรกบหนวยความจานน โดย ปกตจะตอกบ
หนวยความจาชนด static ไดโดยงาย แตชนด dynamic ทตองการการ refresh มราคาถกกวามความหนาแนนสงกวา
Z80 ใหขอดกวาประการหนงคอมนสามารถใหการ refresh หนวยความจาได อยางอตโนมต โดยคาใน R รจสเตอร
จะเพมคาขนอก 1 ทกครงทมการกระทาการ fetch คาสง และ ขอมลในรจสเตอร R นซงมขนาด 8 บต จะถกสงออก
ไปยง address bus ในสวนบตทมนยสาคญตากวาจงหวะของการสงนจะเปนจงหวะเดยวกนกบท CPU สงสญญาณ
refresh ออกมา ผโปรแกรมสามารถกาหนดคาใหกบ รจสเตอร R นไดแตคาในรจสเตอร นจะเรยกใชโดยผ
โปรแกรมทางคาสงโดยตรงไมได
16 บต
IX index register ตวท 1
IY index register ตวท 2 ชไปยงขอมลใน memory space
SP stack pointer
PC program counter
I R
รปท 3.5 16-bit Registers ของไมโครโพรเซสเซอร Z80
3.3 รปแบบของคาสงในไมโครโพรเซสเซอร Z80
ในทกคาสงจะมรปแบบทเปนมาตรฐาน โดยจะประกอบไปดวย สวนรหสคาสง (mnemonic – อานวา น
โมนก หรอ operation code– opcode) และสวนตวแปรดาเนนการ (operand) โดยในสวนของรหสคาสงนนมกเปน
Interrupt vector
Refresh register (ใชจรงแค 7 bits)
31
คายอของการกระทา เชน LD ซงมาจากคาวา load หมายถง การโอนขอมล หรอ INC ซงมาจากคาวา increment
หมายถง การเพมขน สาหรบในสวนของ operand จะแสดงดวย register และตวเลข โดยจานวนของ operand นน
ขนอยกบชนดของคาสง
คาสงแตละคาสงของ Z80 จะมขนาดไมเทากน โดยทบางคาสงมความยาวเพยง 1 byte และบางคาสงอาจม
มากกวานน ในการทางานตามคาสงหนงๆ Z80 อาจจะตองมการตดตอกบสวนอนเชน memory หรอ I/O เพอ
read/write ขอมลทจาเปนในการทางานของคาสงนนๆ
อยางไรกตามความยาวของคาสงไมไดบงบอกถงจานวนชนงานท CPU ตองทาเพอใหทางานคาสงหนงๆ
นน เสมอไป ตวอยางเชน คาสง OUT(10H),A ซงมความยาว 2 bytes โดยจะเปนการสงขอมลใน accumulator ไป
ยง output port หมายเลข 10H
Byte ท 1 เกบ OUT → opcode บอกวาเปนการสงขอมลออกพอรต
Byte ท 2 เกบ (10H), A → operand บอกวาขอมลขนาด 1 byte จาก accumulator จะถกสงไปยงพอรต
หมายเลข 10H
โดยคาสงน Z80 จะมการทางาน 3 อยางดงน
1. อาน byte แรก จากหนวยความจา
2. อาน byte ทสอง จากหนวยความจา
3. สงขอมลไปยงพอรตหมายเลข 10H
รปแบบของคาสงของ Z80 มดวยกน 4 ประเภทดงตอไปน
1-byte instructions
เชน LD A, B 01 111 000 (78H)
2-byte instructions
เชน LD B, 32H 0000 0110 (06 H) Byte ท 1
0011 0010 (32H) Byte ท 2
3-byte instructions
เชน LD BC, 2080H 0000 0001 (01H) Byte ท 1
1000 0000 (80H) Byte ท 2
0010 0000 (20H) byte ท 3
4-byte instructions
เชน LD IX, 2000H 1101 1101 (DDH) Byte ท 1
0010 0001 (21H) Byte ท 2
0000 0000 (00H) Byte ท 3
0010 0000 (20H) Byte ท 4
32
3.4 Z80 Addressing Modes
Addressing mode คอวธการไดมาซงขอมลทไดอางถงใน operand ของแตละคาสง โดยท Z80 ม
addressing modes ทงหมด 10 ประเภท ดงแสดงในตารางท 3.2
Addressing Modes คาอธบาย ตวอยาง
Immediate operand ตวทสองเปนขอมลขนาด 8 บตเพอ load ใส register
เดยว LD B,97H
Immediate Extended operand ตวทสองเปนขอมลหรอตาแหนงขนาด 16 บตเพอ load
ใส register ค LD BC,8045H
Register operand ตวทสองเปน register LD B,A
Implied เปนคาสงทมการอางถง register ตวอนทไมไดปรากฏอยใน
operand โดยสวนใหญจะเปนการอางถง register A AND B
Register Indirect คาทอยใน register ค จะเปนตาแหนงในหนวยความจา (memory
pointer) ของขอมลทตองการอางถง LD B,(HL)
Extended ขอมลขนาด 16 บต คอ ตาแหนงของคาสงตอมาทตองการขาม
กระโดดไป JP 2080H
Relative operand จะเปนเพยงคา displacement ในรปของ 2’s
complement JR 14H
Indexed ตาแหนงของขอมลทตองการหาไดจากการหาผลบวกของ index
register และ คา displacement ขนาด 1 byte INC (IX+10H)
Bit mode นใชสาหรบการทางานแบบบต (bit operation) โดยมการ
กาหนดบตทตองการจะกระทาการจาก register หรอตาแหนงใน
หนวยความจาหนงๆ โดยวธใดวธหนงจาก 3 โหมดน (register,
register indirect หรอ indexed)
SET 7,B
Page Zero ประกอบไปดวย 8 คาสง restart ซงเปน one-byte call โดย
ตาแหนงทจะเรยกใชจะม byte บนเปน 00H จงสามารถกาหนด
เฉพาะ byte ลางในคาสงได
RST 28H
ตารางท 3.2 รายละเอยดของ Addressing Mode ของไมโครโพรเซสเซอร Z80
33
บทท 4 ชดคาสงของ Z80
ชดคาสง (Instruction Set) ของ Z80 แบงออกเปน 6 ประเภท ดงน
1. data transfer ⇒ การโอนยายขอมล
2. arithmetic operations ⇒ การคานวณผลทางคณตศาสตร
3. logic operations ⇒ การคานวณผลทางตรรกศาสตร
4. bit manipulation ⇒ การจดการขอมลระดบบต
5. branch operations ⇒ การประมวลผลแบบขามกระโดด
6. machine control operations ⇒ การจดการควบคมระบบ
4.1 Data Transfer Instructions
• กลม 8-bit load
• กลม 16-bit load
• กลม exchange
• กลม block transfer
• กลม IO
รปท 4.1ชดคาสงกลม load และ exchange
หมายเหต: คาสง data transfer ไมมผลตอ flags ตางๆ ยกเวนบางคาสงในกลม I/O
34
กลม 8-bit load
LD rd, rs การทางาน: rd ← rs
n r ← n
(HL) r ← (HL)
(IX + d) r ← (IX + d)
(IY + d) r ← (IY + d)
หรอ
LD (HL) , r การทางาน: (HL) ← r
(IX + d) (IX + d) ← r
(IY + d) (IX + d) ← r
โดยท r, rd, rs = A, B, C, D, E, H,หรอ L (7 ตวเทานน ไมม F)
n = ขอมลขนาด 8 บต
d = คา displacement ขนาด 1 byte
ตวอยาง
ถาขณะน registers A B C D HL IX และ IY เกบคา 10H 20H 30H 40H 4F4FH 8080H และ 8120H ตามลาดบ
LD A, B เปนคาสงททาให accumulator มคาเทากบ 20H (คาของ register B)
LD D, 90H เปนคาสงททาให register D มคาเทากบ 90H
LD E, (IX + 20H) เปนคาสงททาให register E มคาเทากบคาทเกบในตาแหนง 80A0H (8080H+20H)
LD (HL), B เปนคาสงททาใหตาแหนง 4F4FH ท HL ชอยมคาเทากบ 20H (คาของ register B)
LD (IY+40H), C เปนคาสงททาใหตาแหนง 8160H (8120H+40H) มคาเทากบ 30H (คาของ register C)
LD r , n การทางาน: r ← n
(HL) (HL) ← n
(IX + d) (IX+d) ← n
(IY + d) (IY+d) ← n
โดยท r = A, B, C, D, E, H,หรอ L (7 ตวเทานน ไมม F)
n = ขอมลขนาด 8 บต และ d = คา displacement ขนาด 1 byte
ตวอยาง
ถาขณะน registers HL IX และ IY เกบคา 4F4FH 8080H และ 8120H ตามลาดบ
LD (HL), 50H เปนคาสงททาใหตาแหนง 4F4FH ท HL ชอยมคาเทากบคาคงท 50H
LD (IX + 20H), 60H เปนคาสงททาใหตาแหนง 80A0H (8080H + 20H) มคาเทากบคาคงท 60H
LD (IY+40H), 70H เปนคาสงททาใหตาแหนง 8160H (8120H + 40H) มคาเทากบคาคงท 70H
35
LD A, (BC) การทางาน: A ← (BC)
(DE) A ← (DE)
(HL) A ←(HL)
(nn) A ← (nn)
หรอกลบกน
โดยท nn = ขอมลขนาด 16 บต
ตวอยาง
ถาขณะน registers BC DE และ HL เกบคา 8000H 8001H และ 8002H ตามลาดบ โดยทคาขอมล ณ ตาแหนงเหลานน
คอ 10H 20H และ 30H ตามลาดบ
LD A, (BC) เปนคาสงททาให accumulator มคาเทากบ 10H ซงอย ณ ตาแหนง 8000H ท BC ชอย
LD A, (DE) เปนคาสงททาให accumulator มคาเทากบ 20H ซงอย ณ ตาแหนง 8001H ท DE ชอย
LD A, (HL) เปนคาสงททาให accumulator มคาเทากบ 30H ซงอย ณ ตาแหนง 8002H ท HL ชอย
LD A, I การทางาน: A ← I
R A ← R
หรอกลบกน
ตวอยาง
ถาขณะน registers A, I และ R เกบคา 10H, 20H และ 30H ตามลาดบ
LD R, A เปนคาสงททาให memory refresh register มคาเทากบ 30H (คาของ accumulator)
LD A, I เปนคาสงททาให accumulator มคาเทากบ 20H (คาของ interrupt vector register)
กลม 16-bit load
LD rr , nn การทางาน: rr ← nn
IX IX ← nn
IY IY ← nn
โดยท rr = BC, DE, HL, SP
nn = ขอมลขนาด 16 บต
ตวอยาง
ไมวาขณะน registers BC IX และ IY จะเกบคาอะไร
LD BC, 8050H เปนคาสงททาให register ค BC มคาเทากบคาคงท 8050H
LD IX, 8060H เปนคาสงททาให indexed register ค IX มคาเทากบคาคงท 8060H
LD IY, 8070H เปนคาสงททาให indexed register ค IY มคาเทากบคาคงท 8070H
36
LD rr , (nn) การทางาน: rr ← (nn)
IX IX ← (nn)
IY IY ← (nn)
หรอกลบกน โดยท rr = BC, DE, HL, SP (ถาใช HL จะใช 3 bytes, ตวอนๆ ใช 4 bytes)
nn = ขอมลขนาด 16 บต
ตวอยาง
ถาขณะนทตาแหนง 8010H 8020H และ 8030H เกบคา 10H 20H และ 30H และไมวา registers DE, IX และ IY จะเกบ
คาอะไร
LD DE, (8010H) เปนคาสงททาให register ค DE มคาเทากบ 10H ซงอย ณ ตาแหนง 8010H
LD IX, 8020H เปนคาสงททาให indexed register ค IX มคาเทากบ 20H ซงอย ณ ตาแหนง 8020H
LD IY, 8030H เปนคาสงททาให indexed register ค IY มคาเทากบ 30H ซงอย ณ ตาแหนง 8030H
LD SP, HL
IX
IY
ตวอยาง
ถาขณะน registers HL IX และ IY เกบคา 4F4FH 8080H และ 8120H ตามลาดบ และไมวา stack pointer (SP) จะเกบ
คาอะไร
LD SP, HL เปนคาสงททาให SP มคาเทากบ 4F4FH (คาของ register ค HL)
LD SP, IX เปนคาสงททาให SP มคาเทากบ 8080H (คาของ register ค IX)
LD SP, IY เปนคาสงททาให SP มคาเทากบ 812oH (คาของ register ค IY)
PUSH rr การทางาน: SP ← SP - 1
IX (SP) ← (oprH)
IY SP ← SP - 1
(SP) ← (oprL)
POP rr การทางาน: (oprL) ← (SP)
IX SP ← SP + 1
IY (oprH) ← (SP)
SP ← SP + 1
โดยท rr = AF, BC, DE หรอ HL
oprH / oprL =byte บน/ลางของ operand ของคาสง PUSH และ POP
37
ตวอยาง
ถาขณะน registers AF และ IY เกบคา 4F00H และ 8160H ตามลาดบ และ stack pointer (SP) มคา 2040H หลงจากทา
คาสง
PUSH AF เปนคาสงททาใหตาแหนง 203F H เกบคา 4F H และตาแหนง 203E H เกบคา 00 H
PUSH IY เปนคาสงททาใหตาแหนง 203D H เกบคา 81 H และตาแหนง 203C H เกบคา 60 H หลงจากนน SP
จะมคาเทากบ 203C H หลงจากนนเมอพบคาสง
POP IX เปนคาสงททาให indexed register IX มคาเทากบ 8160 H
POP BC เปนคาสงททาให register BC มคาเทากบ 4F00 H หลงจากนน SP จะกลบมามคาเทากบ 2040 H
กลม exchange
EX DE, HL การทางาน: DE ↔ HL
เปนคาสงทใชในการสลบคา register ค ทง 2 ตว โดยท register ค DE จะมคาเทากบคาของ register ค HL โดย HL
จะมคาเทากบคาท HL เคยเกบไว
ตวอยาง
ถาขณะน registers ค DE และ HL เกบคา 4F00H และ 8160H ตามลาดบ
EX DE, HL จะทาให DE มคาเทากบ 8160H (คาของ HL) และ HLมคาเทากบ 4F00H (คาของ DE เดม)
EX AF, AF′ การทางาน: AF ↔ AF′ คาสง EX นยงเปนคาสงเดยวทใชในการเขาถง alternative registers A′, B′, C′, D′, E′, F′, H′ และ L′ อกดวย
EXX การทางาน: BC ↔ BC′ DE ↔ DE′ HL ↔ HL′ คาสง EXX เปนคาสงทใชในการสลบขอมลระหวาง main registers และ alternative registers ทเดยว 3 ค
กลม block transfer
LDI การทางาน: (DE) ← (HL)
DE ← DE + 1
HL ← HL + 1
BC ← BC - 1 increment
คาสง LDI เปนคาสงทใชในการโอนยายขอมลจากหนวยความจาตนฉบบทชโดย register HL ไปยงหนวยความจา
ปลายทางทชโดย register DE แลวเพมคาตวชหนวยความจาทงสอง และลดคาตวนบ BC
38
ตวอยาง
LDIR การทางาน: ทา LDI จนกระทง BC = 0 repeat
LDD การทางาน: (DE) ← (HL)
DE ← DE - 1
HL ← HL - 1
BC ← BC – 1 decrement
คาสง LDD เปนคาสงทใชในการโอนยายขอมลจากหนวยความจาตนฉบบทชโดย register HL ไปยงหนวยความจา
ปลายทางทชโดย register DE แลวลดคาตวชหนวยความจาทงสอง และลดคาตวนบ BC
ตวอยาง
LDDR การทางาน: ทา LDD จนกระทง BC = 0 repeat
กลม I/O
IN A, (n)
OUT (n), A โดยท n เปน 8-bit port number
คาสง IN เปนคาสงทใชในการรบคาขอมลจากพอรตหมายเลขท n ไปเกบไวท accumulator
คาสง OUT เปนคาสงทใชในการสงคาขอมลใน accumulator ออกไปยงพอรตหมายเลขท n
IN r, (C)
OUT (C), r โดยท r = A, B, C, D, E, H, L
คาสง IN เปนคาสงทใชในการรบคาขอมลจากพอรตหมายเลขทอยใน register C ไปเกบไวท register r
คาสง OUT เปนคาสงทใชในการสงคาขอมลใน register r ออกไปยงพอรตหมายเลขทอยใน register C
39
INI การทางาน: (HL) ← (C)
HL ← HL + 1
B ← B - 1 increment
คาสง INI เปนคาสงทใชในการรบคาขอมลจากพอรตหมายเลขทอยใน register C ไปเกบไวทหนวยความจา
ตาแหนงทโดย register HL แลวเพมคา HL และลดคาตวนบ B
INIR การทางาน: ทา INI จนกระทง B = 0 repeat
OUTI การทางาน: (C) ← (HL)
HL ← HL + 1
B ← B - 1 increment
คาสง OUT เปนคาสงทใชในการสงคาขอมลในหนวยความจาตาแหนงทโดย register HL ออกไปยงพอรตหมายเลข
ทอยใน register C แลวเพมคา HL และลดคาตวนบ B
OTIR การทางาน: ทา OUTI จนกระทง B = 0 repeat
IND การทางาน: (HL) ← (C)
HL ← HL - 1
B ← B - 1 decrement
คาสง INI เปนคาสงทใชในการรบคาขอมลจากพอรตหมายเลขทอยใน register C ไปเกบไวทหนวยความจา
ตาแหนงทโดย register HL แลวลดคา HL และลดคาตวนบ B
INDR การทางาน: ทา IND จนกระทง B = 0 repeat
OUTD การทางาน: (C) ← (HL)
HL ← HL - 1
B ← B - 1 decrement
คาสง OUT เปนคาสงทใชในการสงคาขอมลในหนวยความจาตาแหนงทโดย register HL ออกไปยงพอรตหมายเลข
ทอยใน register C แลวลดคา HL และลดคาตวนบ B
OTDR การทางาน: ทา OUTD จนกระทง B = 0 repeat
4.2 Arithmetic Instructions
• กลม 8-bit addition
• กลม 8-bit subtraction
• กลม compare
40
• กลม increment และ decrement แบบ 8-bit
• กลมทม operand เพยงตวเดยว (คอ accumulator)
• กลม 16-bit addition
• กลม 16-bit subtraction
• กลม increment และ decrement แบบ 16-bit
กลม 8-bit addition
ADD A, r การทางาน: A ← A + r
n n
(HL) (HL)
(IX + d) (IX + d)
(IY + d) (IY + d)
คาสง ADD เปนคาสงทใชในการบวกขอมลขนาด 8 บตจากแหลงตางๆ กบ accumulator แลวเกบผลลพธท
accumulator โดยแหลงสาหรบขอมล 8 บต นนไดแก
r หมายถง Register ตางๆ
n หมายถง ขอมลขนาด 8 บตจรงๆ
(HL) หมายถง คาในหนวยความจาทชโดย register HL
(IX+d) หรอ (IY+d) หมายถง คาในหนวยความจาทชโดย index register IX หรอ IY บวกกบ
คาระยะหาง d bytes
ADC A, r การทางาน: A ← A + r + CY
n n
(HL) (HL)
(IX + d) (IX + d)
(IY + d) (IY + d)
คาสง ADC เปนคาสงทใชในการบวกขอมลขนาด 8 บตจากแหลงตางๆ กบคาตวทดใน carry flag และ accumulator
แลวเกบผลลพธท accumulator
กลม 8-bit subtraction
SUB A, r การทางาน: A ← A - r
n n
(HL) (HL)
(IX + d) (IX + d)
(IY + d) (IY + d)
41
คาสง SUB เปนคาสงทใชในการลบคา accumulator ดวยขอมลขนาด 8 บตจากแหลงตางๆ แลวเกบผลลพธท
accumulator โดยแหลงสาหรบขอมล 8 บตนนไดแก r n (HL) (IX+d) หรอ (IY+d)
SBC A, r การทางาน: A ← A - r - CY
n n
(HL) (HL)
(IX + d) (IX + d)
(IY + d) (IY + d)
คาสง SBC เปนคาสงทใชในการลบคา accumulator ดวยขอมลขนาด 8 บตจากแหลงตางๆ แลวเกบผลลพธท
accumulator
กลม compare
CP r การทางาน: A - r
n n
(HL) (HL)
(IX + d) (IX + d)
(IY + d) (IY + d)
คาสง CP เปนคาสงทใชในการเปรยบเทยบคาใน accumulator กบคาตางๆ โดยไมมการเปลยนแปลงคาเหลาน แตจะ
มการเปลยนแปลง flags ตางๆ ดงน
CPI การทางาน: A - (HL)
HL ← HL + 1
BC ← BC - 1 increment
คาสง CPI เปนคาสงทใชในการเปรยบเทยบคาใน accumulator กบคาในหนวยความจาทชโดย register HL แลวเพม
คา HL และลดคาตวนบ BC
CPIR การทางาน: ทา CPI จนกระทง A = (HL) หรอ BC = 0 repeat
CPD การทางาน: A - (HL)
HL ← HL - 1
BC ← BC - 1 decrement
คาสง CPI เปนคาสงทใชในการเปรยบเทยบคาใน accumulator กบคาในหนวยความจาทชโดย register HL แลวลด
คา HL และลดคาตวนบ BC
42
CPDR การทางาน: ทา CPD จนกระทง A = (HL) หรอ BC = 0 repeat
กลม increment และ decrement แบบ 8-bit
INC r หรอ DEC r
(HL) (HL)
(IX + d) (IX + d)
(IY + d) (IY + d) มผลตอทก flags ยกเวน CY
คาสง INC/DEC เปนคาสงทใชในการเพม/ลดคาตางๆ 1 คา
กลมทม operand เพยงตวเดยว (คอ accumulator)
DAA - decimal-adjust accumulator
CPL - 1’s complement
NEG - 2’s complement
SCF - set carry flag
CCF - Complement carry flag
กลม 16-bit addition ADD HL, BC หรอ ADD IX, BC หรอ ADD IX, BC
DE DE DE
HL IX IX
SP SP SP
มผลเฉพาะ N และ CY flags นน, Flag H จะ undefined
ADC HL, BC
DE
HL
SP มผลตอทก flags, Flag H จะ undefined
คาสงในกลมนจะตางจากคาสงสาหรบการบวกกอนหนาน คอเปนการบวกคาขนาด 16 บต
กลม 16-bit subtraction
SBC HL, BC การทางาน: HL ← HL - BC - CY
DE DE
HL HL
SP
SPมผลตอทก flags, Flag H จะ undefined
43
คาสงในกลมนจะตางจากคาสงสาหรบการลบกอนหนาน คอเปนการลบคาขนาด 16 บตซงมเฉพาะ SBC ซงเปนการ
ลบเพมเตมดวยคา carry flag ดวย
กลม increment และ decrement แบบ 16-bit
INC BC หรอ DEC BC
DE DE
HL HL
SP SP
IX IX
IY IY
ไมมผลตอ flags ใดๆเลย
คาสงในกลมนจะตางจากคาสงสาหรบการเพมและลดคากอนหนาน คอเปนการเพมและลดคาขนาด 16 บต
4.3 Logical Instructions
AND A, r การทางาน: A ← A & r
n n
(HL) (HL)
(IX + d) (IX + d)
(IY + d) (IY + d)
OR A, r การทางาน: A ← A | r
n n
(HL) (HL)
(IX + d) (IX + d)
(IY + d) (IY + d)
XOR A, r การทางาน: A ← A XOR r
n n
(HL) (HL)
(IX + d) (IX + d)
(IY + d) (IY + d)
44
4.4 Bit Manipulation Instructions
• กลม rotate
• กลม shift
• กลม bit, set, reset และ test
กลม rotate
RLC r
(HL)
(IX + d)
(IY + d) rotate left circular
RLC A คนละคาสง แตทางานเหมอนกน โดยจะมผลกระทบ
RLCA กบ flags ไมเหมอนกน และจานวน byte ของคาสงไมกน
RL r
(HL)
(IX + d)
(IY + d) rotate left
RL A คนละคาสง แตทางานเหมอนกน โดยจะมผลกระทบ
RLA กบ flags ไมเหมอนกน และจานวน byte ของคาสงไมกน
RRC r
(HL)
(IX + d)
(IY + d) rotate right circular
RRC A คนละคาสง แตทางานเหมอนกน โดยจะมผลกระทบ
RRCA กบ flags ไมเหมอนกน และจานวน byte ของคาสงไมกน
RR r
(HL)
(IX + d)
(IY + d) rotate right
RR A คนละคาสง แตทางานเหมอนกน โดยจะมผลกระทบ
RRA กบ flags ไมเหมอนกน และจานวน byte ของคาสงไมกน
CY 7 ← 0
CY 7 ← 0
CY7 → 0
CY7 → 0
45
RLD ใชกบตวเลข BCD
A (HL)
RRD ใชกบตวเลข BCD
A (HL)
กลม shift
SLA r
(HL)
(IX + d)
(IY + d) shift left arithmetic
SRA r
(HL)
(IX + d)
(IY + d) shift right arithmetic
SRL r
(HL)
(IX + d)
(IY + d) shift right logical
กลม bit, set, reset และ test
BIT b, r หรอ SET b, r หรอ RES b, r
(HL) (HL) (HL)
(IX + d) (IX + d) (IX + d)
(IY + d) (IY + d) (IY + d)
r = A, B, C, D, E, H และ L โดยท b คอตาแหนง bit 0 → 7
7 - 4 3 - 0 7 - 4 3 - 0
7 - 4 3 - 0 7 - 4 3 - 0
CY 7 ← 0 0
CY7 ← 0
CY 7 → 00
46
4.5 Branch Instructions
• กลม unconditional jump
• กลม conditional jump
• กลม call และ return
กลม unconditional jump
JP nn การทางาน: PC ← nn absolute jump
nn = ตาแหนง 16 บต
JR e การทางาน: PC ← PC + e relative jump
e = เลข 8 บต (-128 → +127)
JP (HL) การทางาน: PC ← HL
(IX) IX
(IY) IY
กลม conditional jump
JP cc, nn conditional absolute jump
cc = NZ, Z, NC, C, PO, PE, P, M
JR cc, nn conditional relative jump
cc = NZ, Z, C
DJNZ e การทางาน: B ← B -1 decrease and jump if not zero
If B = 0 continue
Else (B ≠ 0) PC ← PC + e
กลม call และ return
CALL nn การทางาน: (SP - 1) ← PCH
(SP - 2) ← PCL
SP ← SP - 2
PC ← nn
CALL cc, nn conditional call
47
RET การทางาน: PCL ← (SP)
PCH ← (SP+1)
SP ← SP + 2
RET cc conditional return
RETI return from interrupt
เหมอนกบ RET แต peripheral chip บางตวจะถกสรางใหรจก RETI
RETN return from non-maskable interrupt
RST p การทางาน: (SP - 1) ← PCH restart
(SP - 2) ← PCL
PCH ← 0
PCL ← p
เหมอนกบ CALL เพยงแต high address เปน 00H และ low address ม 8 ตาแหนง
4.6 Machine Control Operations Instructions
HALT การทางาน: พกการทางานชวคราว
NOP การทางาน: ไมมการปฏบตงาน (No Operation) โดยไมมผลตอ flags ใดๆ
4.7 Assembler Directives
นอกเหนอจากคาสงทง 6 ประเภททไดอธบายผานมานน ในการเขยนโปรแกรมภาษาแอสแซมบลเพอ
กาหนดการทางานไมโครโพรเซสเซอร Z80 ยงม Assembler Directives ทเกยวของดงน
1. คาตอทายคงท (Constant Suffix)
เปนตวอกษร (D B Q หรอ H) ทใชกาหนดเลขฐานตาง ๆ ของขอมล โดยท
D แสดงวาขอมลเปนเลขฐานสบ (โดยอาจละไวในฐานทเขาใจได)
B แสดงวาขอมลเปนเลขฐานสอง
Q แสดงวาขอมลเปนเลขฐานแปด
H แสดงวาขอมลเปนเลขฐานสบหก โดยทตวเลขทเรมตนดวย A ถง F ตองม 0
นาหนาเสมอ
ตวอยาง
97, 0A1H, 1011B หมายถง 97 A1H 10112 ตามลาดบ
2. คาสง ORG (Origin)
48
เปนคาสงทใชกาหนดตาแหนงเรมตนในหนวยความจาของโปรแกรม
ตวอยาง
ORG 2000H เปนคาสงทแสดงวากลมคาวงตอจากนจะเรมเกบทตาแหนง 2000H
ในหนวยความจา
3. คาสง END
เปนคาสงของ assembler ทแสดงจดสนสดของโปรแกรม โดยทคาสง HALT ของไมโคร
โพรเซสเซอร แสดงการสนสดการทางานของโปรแกรม แตไมไดหมายถงการสนสดการ
ทางานของแอสแซมบล
4. คาสง EQU (Equate)
เปนคาสงทใชกาหนดคาคงทใหแกตวแปรตางๆ
ตวอยาง
PORTA EQU 0B3H ตวแปรทชอ PORTA มคาเทากบ B3H
5. คาสง DB (Define Byte)
เปนคาสงทใชกาหนดคาตาง ๆ ลงในหนวยความจาครงละ 1 byte
ตวอยาง
DATA: DB 00H,01H,10H ทตาแหนง DATA เกบขอมล 00H ตามดวย 01H และ 10H
6. คาสง DW (Define Word)
เปนคาสงทใชกาหนดคาขนาด 1 word หรอ 2 bytes ลงในหนวยความจา
ตวอยาง
ADDR: DW 2050H ทตาแหนง ADDR เกบขอมล 2050H
7. คาสง DFS (Define Storage)
เปนคาสงทใชจองจานวนตาแหนงหนวยความจาทกาหนด โดยตวเลขทตามมานนมหนวยเปน byte
ตวอยาง
DAT: DFS 4 ทตาแหนง DAT ไดจองหนวยความจาขนาด 4 bytes
49
บทท 5 Z80 Machine Cycles and Bus Timing
การทางานของ CPU ในแตละคาสง (instruction) จะประกอบไปดวยกจกรรม 3 อยาง คอ
1. Fetch อานคาสง
2. Decode แปลคาสง
3. Execute ทางานตามคาสง ซงอาจจะเปน
- CPU ไมมการตดตอกบภายนอก
- CPU ↔ Memory (memory read/write)
- CPU ↔ I/O (I/O read/write)
- CPU ตอบรบการขอจากภายนอก (external request acknowledge)
เมอทางานครบทง 3 อยางน จะเรยกวา 1 instruction cycle ในแตละคาสงจะแบงการทางานยอย ๆ ลงไปอก
เรยกวา machine cycle ไดแก การตดตอกบ memory หรอ I/O หรอ การตอบรบ (acknowledge) หรอ การขอรองจาก
ภายนอก (external request)
1M หมายถง machine cycle แรก ซงตองเปนการ fetch opcode เสมอ ในชวงปลายของ 1M จะมการ refresh
DRAM, decode สญญาณ และอาจมการ execute ถา CPU ไมตองตดตอกบภายนอกอก
รปท 5.1 Z80 Machine Cycles และ Timings
T-states หมายถง คาบเวลาของนาฬกา หรอ clock periods นนเอง
“1 instruction cycle” ประกอบดวย 1 – 6 machine cycles
“1 machine cycle” ประกอบดวย 3 – 6 T–states ขนอยกบชนดของ machine cycle
ดงนน instruction ทสนทสดจะใช 1 machine cycle คอ M1 ซงจะม 4 T-states
ในบทนเราจะมงความสนใจไปทการทางาน 3 อยางแรกจากตารางท 5.1 คอ opcode fetch, memory read
และ memory write
T4 T2 T3 T1 T2 T3 T1T1 T2 T3 T4
M1 M2
1 instruction cycle Instruction ถดไป
Refresh DRAM, Decode instruction และอาจจะ
execute ถา CPU ไมตองตดตอภายนอกอก
50
Machine Cycle 1M MREQ IORQ RD WR
Opcode Fetch ( 1M ) 0 0 1 0 1
Memory Read 1 0 1 0 1
Memory Write 1 0 1 1 0
I/O Read 1 1 0 0 1
I/O Write 1 1 0 1 0
Interrupt Acknowledge 0 1 0 1 1
Nonmaskable Interrupt 0 0 1 0 1
Bus Acknowledge ( BUSAK = 0) 1 Z Z Z Z
หมายเหต: Logic 0 = Active, Logic 1 = Inactive, Z = High Impedance
ตารางท 5.1 ชนดของ Machine Cycles และ Control Signals ในไมโครโพรเซสเซอร Z80
5.1 Opcode Fetch Machine Cycle
การทางานลาดบแรกในคาสงใดๆคอ การทไมโครโพรเซสเซอรอาน (fetch) คาสงเครอง (machine code) ซง
ในทนกคอคา opcode จาก memory ตวอยางท 5.1 อธบายใหเหนถงการทางานของ opcode fetch รวมไปถง timing
signals ทใชใน machine cycle นดวย
ตวอยางท 5.1 Accumulator ของไมโครโพรเซสเซอร Z80 มขอมล 9FH อย และ opcode 0100 0111 (47H)
ของคาสง LD B, A ถกเกบไวใน memory ตาแหนง 2002H คาสงนเปนคาสงขนาด 1 byte เมอถก execute ขอมลท
อยใน accumulator จะถก copy ไปไวท register B ดวย จงหาลาดบของเหตการณตางๆ ทจะเกดขนเพอทจะ
execute คาสงเครองคาสงน พรอมทงแสดงรายละเอยดของสญญาณบน bus ตาง ๆ ทขนอยกบ system clock
คาตอบ
สมมตวา Z80 ไดเสรจสนการ execute คาสงใน memory ตาแหนงท 2001H และขณะน PC มคาเทากบ
2002H หลงจากนนขนตอนของกจกรรมตาง ๆ ท Z80 ตองทา คอ
1. Z80 นาขอมลจาก PC (2002H) ไปไวท address bus แลวทาการเพมคาของ PC ไปเปนตาแหนงถดไป ซงใน
ทนคอ 2003H เนองจาก PC จะชไปยงคาสงถดไปทจะถก execute เสมอ
2. Z80 สงสญญาณควบคม MREQ และ RD ไปเพอ enable memory output buffer (เพอบอกวานเปนการ
ขอรองใช memory เพอการอาน)
3. ขอมล (opcode 47H) จาก memory ตาแหนง 2002H จะไปอยท data bus และจะถกนาเขามาท instruction
decoder ของไมโครโพรเซสเซอร
51
4. Z80 จะ decode คา opcode และทาการ execute คาสงนน ซงจะหมายถงการ copy ขอมลจาก
accumulator ไปยง register B
CE
OEWR
CE
OEMEMRDMEMWR
MEMRDWR
รปท 5.2 Z80 Machine Cycles และ Timings
รปท 5.2 แสดงใหเหนถงการทางานของ Z80 เมอทาการ fetch คา opcode โดยอาศย address bus และ data
bus รวมดวยสญญาณควบคม
รปท 5.3 แสดง timings ของ Opcode fetch machine cycle โดยเปนสดสวนกบ system clock สงเกตวา
address bus จะถกแสดงโดยใชเสนคขนานซงเปนวธทใชบอยในการแสดงระดบของ logic ของกลมของขอมล
(บางก ‘0’ หรอ low บางก ‘1’ หรอ high) และการตดกนของเสนทง 2 หมายถงการเปลยนแปลงของขอมล ซงกคอ
เมอ address ใหมเขามาท address bus สวนสถานะทเปน high impedance จะแสดงในลกษณะของเสนตรงท
กงกลาง (ไมเปน ‘0’ หรอ ‘1’) ดงเชนในบางสวนของ data bus รายละเอยดตาง ๆ เกยวกบ timings ใน Opcode
fetch machine cycle มดงน
1. จากรปท 5.3 แสดงใหเหนวา Opcode fetch cycle เสรจสมบรณใน 4 clock periods หรอ T-states โดยท
Machine cycle น ถกนยามวา M1 cycle
2. ในชวงเรมตนของ clock period แรก (T1) สญญาณควบคม 1M จะเปน ’0’ (active low) และ คาของ PC
(2002H) จะไปปรากฏท address bus
3. หลงจากขาลง (falling-edge) ของ T1 Z80 จะสงใหสญญาณควบคมทเหมาะสม ( MREQ และ RD ) ทาจน
(ทงค active low)
52
รปท 5.3 Z80 Opcode Fetch Machine Cycle (M1) และ Bus Timings
4. ในสวนของ memory ซงไมไดถกแสดงในรปท 5.3 น จะทาการ decode ตาแหนงจาก address bus เพอใหได
คา 2002H ซงจะเปนตาแหนงใน memory สวนสญญาณควบคมทงสอง ( MREQ และ RD ) จะไป enable
memory output buffer เพอไปสงให data bus ซงเคยมสถานะเปน high impedance ทางานเปน input bus
ในชวงตนของ T2 เพอสงคาเขาไปยงไมโครโพรเซสเซอรหลงจากขาลงของ T2 memory จะนาคา 47H ท
อานไดจากตาแหนง 2002H ไปไวท data bus
5. หลงจากขาขนของ T3 แลวไมโครโพรเซสเซอรจะอานขอมลจาก data bus และทาการ inactive สญญาณ
ควบคมตางๆ ( 1M , MREQ และ RD )
6. ในชวงของ T3 และ T4 instruction decoder ในไมโครโพรเซสเซอรจะ decode และ execute ตามคา
opcode ทอานมาได สงเหลานคอการทางานภายใน ไมโครโพรเซสเซอร
สวนอก 2 ขนตอนขางลางน ถงแมจะไมมสวนเกยวของกบปญหาในตวอยางน อยางไรกตามขนตอน
เหลานกถกรวมอยทนดวยในฐานะทเปนสวนหนงของ M1 cycle
1. ในชวง T3 และ T4 ในขณะท Z80 ปฏบตงานภายใน low-order ของ address bus จะถกใชในการจาย
address ขนาด 7 บต เพอทจะ refresh ตว dynamic memory ซงถาระบบม memory ประเภทนอย ขนตอน
นจะทาใหการการตอประสานกบฮารดแวรเปนไปไดงายขน
2. ในรปท 5.3 นมการแสดงสญญาณ WAIT ซงจะถก sample โดย Z80 ในชวง T2 ถาสญญาณ WAIT น
active คอถกทาใหเปน low โดยอปกรณภายนอกหนง ๆ (เชน memory หรอ I/O) Z80 จะเพม wait states
53
(clock cycles) เพอทจะขยาย machine cycle ออกไป จนกระทง สญญาณ WAIT กลบมาเปน high อกครง
เทคนคนจะใชเมออปกรณภายนอกมการตอบสนองทชามาก ๆ
5.2 Memory Read Machine Cycle
Machine cycle ตอมาทจะกลาวถง คอ Memory read machine cycle ซงจะมความคลายกบ Opcode fetch
machine cycle ทไดกลาวมาขางตนแลว โดยท Opcode fetch cycle นนถอวาเปน Memory read machine cycle ทม
1M active ดวย
ตวอยางท 5.2 คาสงเครอง (machine codes) 2 คาสง 0011 1110 (3EH) และ 1001 1110 (9EH) ถกเกบไวท
memory ตาแหนง 2000H และ 2001H ตามลาดบ โดยคาสงเครองคาสงแรก (3EH) เปนคาสงทจะ load ขอมล
ขนาด 1 byte ไปไวท accumulator โดยคาสงเครองคาสงทสอง (9FH) จะเปนขอมลทจะถก load ไปท
accumulator จงหา bus timings เมอคาสงเครอง 2 คาสงนถก execute และจงหาระยะเวลาทใชในการ execute ใน
สวนของ Opcode fetch machine cycle. Memory read cycle และ ในการ execute ทง instruction เมอ clock frequency
มคาเทากบ 4 MHz.
Address Machine code Instruction Comment
2000H 0 0 1 1 1 1 1 0 → 3E LD A, 9FH ;Load 9FH in the accumulator
2001H 1 0 0 1 1 1 1 1 → 9F
คาตอบ
คาสงนประกอบดวย 2 bytes - byte แรก คอ opcode และ byte ทสอง คอ ขอมลขนาด 1 byte เรมตนดวย
การท Z80 จะตองทาการอานขอมลทง 2 bytes นจาก memory ซงจะตองใชอยางนอย 2 machine cycles:
opcode fetch และ memory read
รปท 5.4 แสดง timings ของ Memory read machine cycle โดยมรายละเอยดตางๆ ดงน
1. Machine cycle แรก (opcode fetch) จะเหมอนกนในเชง bus timings กบ machine cycle ใน ตวอยางท
5.1 ยกเวนคาทอยใน bus ตาง ๆ address bus เกบ 2000H data bus เกบคา opcode 3EH หลงจากท Z80 ได
decode คา opcode ในชวง T3 ไมโครโพรเซสเซอรจะรวาตองมการอาน byte ท 2 ดวย
2. หลงจากเสรจสน Opcode fetch cycle แลว Z80 จะวางคาตาแหนง 2001H ไวท address bus แลว ทาการ
เพมคาของ PC ไปเปนตาแหนงถดไป (2002H) สงททาให Machine cycle น (Memory read cycle) แตกตาง
จาก Opcode fetch cycle คอ 1
M ยงคงเปน high อย คอไม active
54
รปท 5.4 Z80 Memory Read Machine Cycle และ Bus Timings
3. หลงจากขาลงของ T1 ใน Memory read cycle, สญญาณควบคม MREQ และ RD จะ active โดยสญญาณ
เหลานพรอมกบตาแหนงของ memory จะเปนการไป enable ตว memory chip
4. หลงจากขาขนของ T3 ใน Memory read cycle, Z80 จะ active สวนของ data bus ใหทาหนาทเปน input
bus เพอรองรบคา 9FH ท memory สงมาให หลงจากนน Z80 จะอานขอมลดงกลาวแลวเกบไวใน
accumulator ในชวง T3 น
5. หลงจากขาลงของ T3 ใน Memory read cycle, สญญาณควบคมทงสองจะกลบไปเปน high คอไม active
หลงจากนน Machine cycle ถดมา (ของ instruction ตอไป) กสามารถเรมทางานได
และเมอความถของ system clock (f) = 4MHz เวลาตาง ๆ สามารถคานวณไดดงน
T-state = clock period (1/f) = 0.25 µs
Execution time ของ Opcode fetch: (4T) x 0.25 = 1.0 µs
Execution time ของ Memory Read: (3T) x 0.25 = 0.75 µs
∴ Execution time ของ Instruction ทงหมด: (7T) x 0.25 = 1.75 µs
5.3 Memory Write Machine Cycle
Machine cycle ลาดบทสามทจะกลาวตอไป คอ Memory write machine cycle โดยท Machine cycle นจะทาการ
store ขอมลใน memory register ทกาหนดในคาสง ดงจะแสดงใหเหนจากตวอยางตอไปน
T1 T2 T3 T4 T1 T2 T3
M1 opcode fetch Memory Read
CLK
A15-A0
1M
MREQ
D15-D0
RD
WR
2001H2000HRefresh Address
3EH
high
55
ตวอยางท 5.3 Register HL เกบตาแหนง 2350H และ accumulator เกบคา 9FH โดยท instruction code 0111 0111
(77H) ถกเกบไวท memory ตาแหนง 2003H เมอคาสงนถก execute ขอมลใน accumulator จะถกนาไปเกบทตาแหนง
ใน memory ทชโดย register HL จงหาคาทจะถกเกบไวใน bus และ timings เมอคาสงนกาลงถก execute
คาสง:
LD (HL),A ;Copy contents of the accumulator into memory
;location, the address of which is stored in HL
;register.
คาตอบ
คาสงในตวอยางนเปนคาสงขนาด 1 byte ทม 2 Machine cycles คอ Opcode fetch และ Memory write
โดยทใน Machine cycle แรก Z80 จะ fetch คา code 77H และใน Machine cycle ทสอง Z80 จะคดลอก byte 9FH จาก
accumulator ไปไวท memory ตาแหนง 77H
รปท 5.4 Z80 Memory Write Machine Cycle และ Bus Timings
รปท 5.4 แสดงถง timings ของ Machine cycles ทงสอง โดยทมรายละเอยดดงน
1. ในสวนของ Opcode fetch cycle นน Z80 จะวางตาแหนง 2003H ไวท address bus และอานคาขอมล
77H จาก data bus โดยใชสญญาณควบคม MREQ และ RD เหมอนในตวอยางกอน ๆ โดยทในตวอยางน
คา PC จะถกเพมขนเปน 2004H
CLK
A15-A0
1M
MREQ
D15-D0
M1 opcode fetch Memory Write
RD
WR
2350H2003H Refresh Address
77H9FH
56
2. ในชวง T3 และ T4 Z80 จะ decode คาสงเครอง 77H และเตรยมตวเพอทาการเขยนขอมลลง memory
3. ในชวงแรกของ Machine cycle ตอมาซงกคอ Memory write cycle นน Z80 จะวางขอมล (2350H) จาก
register HL ไวท address bus สวนในตอนขาลงของ T1 ใน Memory write cycle นน MREQ จะเปน low และ
ขอมล 9FH จาก accumulator จะถกวางไวท data bus
4. หลงจากนน รอให 1 T-state ผานไป (หลง MREQ active) เพอใหตาแหนงทจะเขยนขอมล มความเสถยร
แลว Z80 จะทาใหสญญาณควบคมการเขยน WR active เพอแสดงวาจะเขยนขอมลไปยงตาแหนงทเกบอย
ใน address bus
5. หลงจากขาลงของ T3 ใน Memory write cycle สญญาณควบคมทงสองจะไม active และ data bus จะถก
เปลยนเปน high impedance
5.4 ทบทวนสาระสาคญ
1. คาสงทกคาสงตองมอยางนอย 1 Machine cycle นนคอ M1 หรอ Opcode fetch machine cycle เสมอ ซงจะม 4
T-states
2. Memory read cycle คลายกบ Opcode fetch cycle จะตางกนตรงท ใน Opcode fetch cycle จะม 1M active
ดวย
3. Memory write cycle ม MREQ และ WR active ในขณะท Memory read cycle ม MREQ และ RD active
4. WR และ RD จะไม active พรอมกน เนองจากไมโครโพรเซสเซอร Z80 ไมสามารถจะอานและ เขยนพรอม
กนได
ใน Memory read cycle ⇒ MREQ และ RD จะ active เพอ enable memory output buffer โดยทตาแหนง
ของ memory ทตองการอานขอมลควรทจะอยท address bus แลว เพอทจะอานคาขอมลใน memory ท ตาแหนงนน
ผานทาง data bus
ในขณะทใน Memory write cycle ⇒ MREQ จะ active และขอมลทจะเขยนจะตองอยบน data bus แลว
WR คอย active เพอทจะเขยนขอมลจาก data bus ลงไปยงตาแหนงทอานไดจาก address bus
5.5 การสรางสญญาณควบคม
Z80 มสญญาณควบคมอย 4 สญญาณ คอ MREQ IORQ RD และ WR
การทางาน MREQ IORQ RD WR
การอาน memory 0 1 0 1
การเขยน memory 0 1 1 0
การอานอปกรณ I/O 1 0 0 1
การเขยนบนอปกรณ I/O 1 0 1 0
57
ในกรณทตองการสญญาณ MEMRD MEMWR IORD และ IOWR สามารถสรางสญญาณไดดงน
RD
MREQ
MEMWR
MEMRD
WR
RD
IORQ
IOWR
IORD
WR
58
บทท 6 การตอประสานกบหนวยความจา
ในการทางานของ Z80 ไมโครโพรเซสเซอรเพอ execute โปรแกรมหนงๆ มความจาเปนทจะตอง
access หนวยความจาบอยครง วงเดตไดจากในชวงแรกของการทางานของทกคาสง จะเปน opcode fetch
machine cycle ซงจาเปนตอง fetch คาสงจากหนวยความจา
บทนจะวาดวยการตอประสาน Z80 ไมโครโพรเซสเซอรกบชบหนวยความจา โดยเรมจากศกษา
โครงสรางของชบหนวยความจา เพอใหไดมาซงรายละเอยดทจาเปนในการอานและเขยนขอมลใน
หนวยความจา รวมไปถงขนตอนทสาคญตางๆ สาหรบการตอประสานกบหนวยความจา
6.1 แนวคดพนฐานเกยวกบหนวยความจา
An-A0 = address signals ม n+1 เสน
D7-D0 = Data Bus
CE (Chip Enable) หรอ CS (Chip Select) เปนสญญาณเลอก chip
OE (Output Enable) เปนสญญาณสาหรบ enable output buffer ของ memory
ถาเปน static RWM จะมขา WR ดวย
Memory บางเบอรอาจมขา Chip Enable มากกวา 1 ขา เชน 1CS (active low) และ 2CS (active
high)
เบอรทใชอย
ในจานวนนมรนท flash memory ดวย
ขนาดของ memory จานวนสายสญญาณ
1K (0000-03FF) 10 (A9-A0)
2K (0000-07FF) 11 (A10-A0)
4K (0000-0FFF) 12 (A11-A0)
8K (0000-1FFF) 13 (A12-A0)
16K (0000-3FFF) 14 (A13-A0)
32K (0000-7FFF) 15 (A14-A0)
64K (0000-FFFF) 16 (A15-A0)
EPROM RWM
2716 6264
2732 62256
2764 …
27120
27256
…
An - Ao
CE
OE
D7 - D0
ROM
59
การจดวางเรยงขาของ dynamic RAM จะตางจาก static RAM การตอ dynamic RAMโดยทวไป
ตองใช dynamic RAM controller ดวย
ขาของ memory ตางขนาดกนจะถกสรางใหมตาแหนงและหนาทของขาใกลเคยงกนใหมากทสด
ทาใหเราสามารถออกแบบวงจรใหใชกบ memory ไดหลายขนาดโดยการใช DIP switch เลอก
6.2 การถอดรหสตาแหนง
การเลอกตาแหนงจะประกอบไปดวยสญญาณ 2 สวน คอ สญญาณ high address
(A15 - An+1) และ low address (An - Ao)
สวนของ low address สามารถตอเขากบขา address ของ memory ไดโดยตรง แตสวนของ high
address ซงม 3 วธดวยกน คอ
1. ใช logic gates
2. ใช decoder เชน 2-line-to-4-line decoder 1-of-4 74LD139,155,156, 539
3-line-to-8-line decoder 1-of-8 74LD138, 538, 137 (ม latch)
4-line-to-16-line decoder 1-of-16 74LD154, 159
3. ใช magnitude comparator IC (เปลยน address ได)
ตวอยาง ตองการตอ
ขนาด ตาแหนง จานวนสญญาณ
ROM 4K 0000 – 0FFF 12 เสน (A11 – A0)
RWM 4K 1000 – 1FFF 12 เสน (A11 – A0)
ROM RWM
Begin address 0000 0000 0000 0000 0001 0000 0000 0000
End address 0000 1111 1111 1111 0001 1111 1111 1111
An - Ao
CE
OE
D7- D0
Memory
High
Address
Decoder
MEMRD
A15 - An+1
An – A0
60
15 14 13 12 11 - 0
ROM 0 0 0 0 X – X
RWM 0 0 0 1 X – X
Address ท CPU ใช
3000 1000
3FFF 1FFF
4000 0000
4FFF 0FFF
Address ภายใน memory chip
การใช magnitude comparator เปนอกวธหนงทเราสามารถใชในการ decode high address ได
เชน 10k x 3 : comparator สามารถใชกบการเลอก address ของ I/O ไดดวย
6.3 Partial Address Decoding และ Fold back Memory
ในกรณทระบบใช memory chips นอย เราอาจไมตองใช decoder สาหรบ high address เลยกได
แตโปรแกรมจะตอง access code หรอ data ในขอบเขตของ memory ทมอยเทานนเชน
CE
A11 - Ao
RWM
OE
WR
Data Bus
MEMWR
A11 – A0
A15A14A13A12
Address Bus
MEMRD
CE
A11 - Ao
ROM
OE
D7 - Do
Data Bus
MEMRD
A11 – A0
A15 A14 A13 A12 Address Bus
61
CE
OEWR
CE
OEMEMRDMEMWR
MEMRDWR
วงจรขางบนจะทาใหสามารถ access ROM & RWM ตวเดยวกน จากหลาย ๆ ตาแหนง
62
บทท 7 การตอประสานกบอปกรณ I/O
ไมโครโพรเซสเซอร Z80 ตดตอกบอปกรณภายนอกดวยขาสญญาณตาง ๆ ดงในรปท 7.1 และม
รายละเอยดตามตารางท 7.1
รปท 7.1 ขาสญญาณของ Z80 ทใชตดตอกบอปกรณภายนอก
D0-D7 เปน data bus ขนาด 8 บต ใชรบสงขอมลระหวาง Z80 กบอปกรณภายนอก
A0-A7
เปน address bus ขนาด 8 บตใชกาหนดหมายเลขชองสญญาณ I/O ในการตดตอกบ
อปกรณภายนอก Z80 ใชเฉพาะ A0-A7 กาหนดตาแหนง ทาใหตดตออปกรณภายนอก
ไดดวย address 00H-FF H
IORQ
RD (ReaD)
WR (WRite)
ทงสามสญญาณน active ดวย logic "0"
เมอ Z80 ทาคาสง IN หรอ OUT ตามขนตอนดงทจะกลาวตอไป
ตารางท 7.1 รายละเอยดของขาสญญาณของ Z80 ทใชตดตอกบอปกรณภายนอก
ในการถอดรหสเพอเรยกหมายเลขพอรตผใชจะตองเลอกใชสญญาณ ( IORQ กบ RD ) หรอ
( IORQ กบ WR ) หรอ เฉพาะ IORQ แลวแตกรณ
การตอพอรต I/O ใหกบ Z80 อาจใชไอซดจตอล หรอใชชพสนบสนน เชน 8255 หรอ Z80 PIO ก
ได
Z80 Address bus
Data bus
Control
D7 D6 D5 D4 D3 D2 D1 D0
A7
A6 A5
A4 A3 A2 A1 A0
WR
RDIORQ
63
7.1 การตอประสานกบอปกรณเอาทพต
คาสง OUT (8-bit), A 2050 : D307 OUT (07H), A
2052 :
รปท 7.2 แสดงถงการทางานของคาสง OUT
Z80 จะเพม Tw 1 state สาหรบ I/O โดยอตโนมต
D3H
T2 T3 T4T1 T2 T3T1 T2 T3TwT1
คาใน accumulator
20H 20H
50H 51H Port Address 07H
07H
M1 (Opcode Fetch) M2 (Memory Read) M3 (I/O Write)คาสง OUT
A15-A8
A7-A0
D7-D0
1M
IORQ
MREQ
WR
RD
IOWR
รปท 7.2 Timing diagram แสดงการทางานของคาสง OUT
สงทจะตองออกแบบมดงน
1. decode low address (A7- A0) เพอเลอกตาแหนง output device ทตองการ เพอสราง
IOADDR pulse
2. รวมสญญาณเลอกตาแหนงจากขอ 1 IORQ , และ WR เพอสรางสญญาณเลอกอปกรณ
เอาทพต ทตองการ
อปกรณเอาทพตจะเปนอปกรณประเภท latch หรอ D flip-flop (74LS373, 74LS374 หรอ 7475)
ดงในรปท 7.3
ถา LE = 1 จะไดวา Q มคาเทากบ D
LE = 0 จะไดวา Q จะคงสถานะไว
output address
ขนาด 8 bits
64
IORQ
LE
IOWRWR
รปท 7.3 การตอประสานกบอปกรณเอาทพต
7.2 การตอประสานกบอปกรณอนพต
คาสง IN A, (8–bit) 2065 : DB84 IN A, (84H)
รปท 7.3 แสดงถงการทางานของคาสง IN
Z80 จะใส Tw 1 state โดยอตโนมต
T2 T3TwT1
Input
Data
Input Port Address 84H
M3 (I/O Read)
A7-A0
D7-D0
IORQ
RD
IOSEL
รปท 7.4 Timing diagram แสดงการทางานของคาสง IN
สงทจะตองออกแบบมดงน
1. decode low address เพอเลอกตาแหนงของ input device ทตองการ
2. รวมสญญาณเลอกตาแหนง IORQ และ RD เพอสรางสญญาณเลอกอปกรณอนพตทตองการ
อปกรณอนพตจะเปนอปกรณประเภท buffer (74LS244, 74LS245) ดงในรปท 7.5
ถา OE ไม active จะไดวา เอาทพตของ buffer จะเปน high impedance
IORQ
OE
IORDRD รปท 7.5 การตอประสานกบอปกรณอนพต
input address
ขนาด 8 bits
65
เราอาจสรางอปกรณอนพตและเอาทพตไวทตาแหนงเดยวกนได โดยไมมปญหาในการทางาน
7.3 Memory – Mapped I/O
2050H: 32 00 80 LD (8000H), A
0000
8000
FFFF
Timing diagram ของการตอประสานกบอปกรณอาทพตดวย memory-mapped I/O เปนดงแสดง
รปท 7.6
32H
T2 T3 T4T1 T2 T3T1
2050H 2051HRefresh address
00H
M1 (Opcode Fetch) M2 (Memory Read)
A15-A0
D7-D0
1M
MEMRD
MREQ
WR
RD
MEMWR
T2 T3T1
2052H
80H
M3 (Memory Read)T2 T3T1
8000H
Accumulator contents
M4 (Memory Read)
รปท 7.6 Timing diagram แสดงการตอประสานอปกรณเอาทพตดวย memory-mapped I/O
ตาแหนงของอปกรณเอาทพต
66
A10
A11
A12
A13
A14
A15
ABC
74LS138
1E 2E 3E
1O0O
A9A8
A15ABC
74LS138
1E 2E 3E
1O0O
MSB
A7A6A5A4A3A2A1A0
RDWR
MREQ
ตอเขากบขา output enable
(active Low) ของ buffer
ตอเขากบขา latch enable
(active High) ของ latch
รปท 7.7 ตวอยางการตอประสานดวย memory-mapped I/O
จากรปท 7.7 ซงแสดงตวอยางการตอประสานอปกรณอนพตและเอาทพตดวย memory-mapped
I/O ซงจะไดวาตาแหนงของอปกรณอนพตและเอาทพตเปนดงน
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ตาแหนงเอาทพต 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 = 82FF
ตาแหนงอนพต 1 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 = 86FF
คาสงทใชกบ memory-mapped I/O คอคาสง LD ไมใช IN หรอ OUT
LD A, (86FFH) → input
LD (82FFH), A → output
67
บทท 8 Interrupt
การรบรสญญาณภายนอกสามารถทาได 2 วธ
1. เขยนโปรแกรมตรวจสอบ
รปท 8.1 การรบรสญญาณภายนอกโดยการเขยนโปรแกรมตรวจสอบ
ถามหลายสญญาณ สญญาณทถกตรวจสอบกอนจะมลาดบความสาคญสงกวาโดย
อตโนมต
2. ใช Interrupt
รปท 8.2 การรบรสญญาณภายนอกโดยการเขยนใช interrupt
ขอดของการใช interrupt
- ไมตองเขยนโปรแกรมใหคอยตรวจสอบสญญาณภายนอก
- การตอบสนองแนนอนกวาการใชโปรแกรมตรวจสอบ
ทาอะไรบางอยาง
ม
Interrupt service
RETI
มสญญาณภายนอกเขามา
ขดจงหวะการทางาน
สญญาณภายนอก?
ทาอะไรบางอยาง
ม
ไมม
เสยเวลาในการคอยตรวจเชค
68
Interrupts ม 2 แบบ คอ
1. Maskable interrupt (INT) เปน interrupt ทจะถกละเลยหรอชะลอได หากไมโคร
โพรเซสเซอรกาลงทางานอนทสาคญ คอเลอกทจะ enable หรอ disable ได
2. Nonmaskable interrupt (NMI) เปน interrupt ทจะตองตอบสนองอยางทนถวงท
โดยทผใชไมสามารถหยดยงหรอ disable ไดดวซอฟตแวรควรใชในกรณฉกเฉน
8.1 ความรเบองตนสาหรบ Interrupt I/O ใน Z80
Z80 มขาอนพตสาหรบทใชเกยวกบการ interrupt อยดวยกน 2 ขา คอ INT สาหรบ Maskable
interrupt และ ขา NMI สาหรบ Nonmaskable interrupt
รปท 8.3 โครงสรางของ interrupts ของ Z80
ม 8 ตาแหนง (0000H, 0008 H , 0010 H, 0018 H,
0020 H, 0028 H, 0030 H และ 0038 H)
คาสงเหลานใช 1 byte 7 6 5 4 3 2 1 0
1 1 X X X 1 1 1
RST 00H → 0 0 0
RST 08H → 0 0 1
RST 10H → 0 1 0
RST 18H → 0 1 1
RST 20H → 1 0 0
RST 28H → 1 0 1
RST 30H → 1 1 0
Z80 interrupts
NMI INT
Mode 1Mode 0 Mode 2
0038 H 0000 H - FFFF H
ใช register I
รวมกบฮารดแวรใน
การเลอกตาแหนง
ใดๆ ใน memory
0066H
อปกรณทขอ
interrupt จะตอง
สงคาสงประเภท
นใหกบ Z80
CPU
69
8.2 การ enable และ disable interrupt
คาสง EI (Enable Interrupt)
- มขนาด 1 byte
- ใชในการ reset คา interrupt flip-flops เพอใหสามารถรบสญญาณ INT จากภายนอก
ได โดยทรายละเอยดเกยวกบ interrupt flip-flops ทงสอง (IFF1 และ IFF2) จะกลาวใน
หวขอถดไป
โดยท INT จะถก disable เมอ
• ใชคาสง DI (Disable Interrupt) ซงจะกลาวในหวขอยอยถดไป
• System reset
• Z80 ตอบสนองตอสญญาณ interrupt (interrupt acknowledge) วธน Z80 จะใช
ปองกนการเกด interrupt ซอน
รปท 8.4 การใชคาสง EI เพอปองกนการเกด interrupt ซอน
Z80 จะตรวจเชคสญญาณการ interrupt ใน T-state สดทายของแตละ instruction cycle ถาพบ
สญญาณ INT active กจะเขาส interrupt process ตามรปท 8.4
M1 กบ IORQ จะ active เพอเปนการรบร interrupt (interrupt acknowledge)
INTA
Z80 จะใส Tw1 + Tw2 โดยอตโนมต
อปกรณทางฮารดแวรเมอไดรบ INTA จะตองสงคาสง RST XXH ไปไวบน data bus จากนน
Z80 จะเขาสการ refresh
คาสง RST XXH จะม operation ดงตอไปน
Interrupt service routine
EI
RETI
External
interrupt
request
Interrupted
routine
Enable interrupt ใหมอกครงหนง
EI จะมผลหลงจากทาคาสงอกคาสงหนงเสรจแลว ดงนน
จะมผลหลงจากทคาสง RETI ไดถก execute แลว
70
รปท 8.5 การทางานของคาสง RST XXH
คาสง DI (Disable Interrupt)
- มขนาด 1 byte
- ใชในการ reset คา interrupt flip-flops ทงสอง (IFF1 และ IFF2) ซงจะกลาวในหวขอถดไป
- ใชเมอไมตองการให Z80 รบรสญญาณ INT
คาสง DI นไมมผลตอการ interrupt แบบ NMI
8.3 Interrupt flip-flops
CPU จะทาการตรวจสอบสถานะภาพตอการตอบสนองการ interrupt ท IFF หรอ interrupt
flip-flop ในกรณของ Z80 จะมทแสดงสถานะภาพ ในการ interrupt อย 2 บต คอ IFF1 และ IFF2
โดยทงสองบตนจะขนอยกบผลทไดดวยจากการกระทาของ CPU หรอการเขยนโปรแกรมโดยใช
คาสงในการ set หรอ reset flip-flops
หลกการทสาคญคอ IFF1 ทาหนาทเปนตวกาหนดการ enable หรอ disable ของการ interrupt
โดยท IFF2 จะมหนาทหลกในการเกบขอมลชวคราวของ IFF1 ในขณะทมการ reset CPU ทางขา
reset ทง IFF1 และ IFF2 จะไดรบการ reset ไปดวย การแสดงสถานะ "0" ของ IFF1 จะเปนการ
disable การ interrupt กลาวคอ IFF1 = "0" CPU จะไมรบรตอการ interrupt ทเขามาทาง INT การ set
IFF สามารถกระทาไดดวยคาสง EI โดยสถานะภาพของ IFF1 และ IFF2 ทจะเปลยนแปลงเนองจาก
การกระทาตาง ๆ สรปไดดงตารางในรปท 8.6
จากรปท 8.6 พอสรปไดวา การกาหนดการ enable จะตองทาการ set flip-flop IFF1 หรอ
กลาวอกนยหนง การยอมใหเกดการ interrupt ไดกตอเมอ CPU ตรวจสอบ IFF1 วาอยในสภาวะ
enable หรอไมการตรวจสอบสภาวะ enable วาไดรบการ enable หรอ disable ในบางกรณทาไดโดย
การตรวจสอบทาง parity bit นนคอ การกระทาคาสง LD A, I และ LD A, R จะมผลใหคาของ IFF2
ไปเกบยง parity flag
(SP – 1) ← PCH เกดในชวง M2 SP ← SP-1
(SP – 2) ← PCL (SP) ← PC H
SP ← SP-2 เกดในชวง M3 SP ← SP-1
PC ← 00xx H PC ← 00xx H
71
การทางาน IFF1 IFF2 หมายเหต
CPU reset 0 0 INT ถก disable
คาสง DI 0 0 INT ถก disable
คาสง EI 1 1 INT ถก enable หลงคาสงถดไป
LD A, I • • parity flag → IFF2
LD A, R • • parity flag → IFF2
NMI operation 0 • INT ถก disable
INT operation 0 0 -
คาสง RETN IFF2 • IFF2→ IFF1
คาสง RETI • • -
หมายเหต: “•” หมายถง ไมเปลยนแปลง
รปท 8.6 สถานะของ interrupt flip-flops IFF1 และ IFF2
เมอมการ interrupt แบบ NMI ขนจะเกดสภาวะ disable ทนทท IFF1 กลาวคอมนจะได รบ
การ reset นนคอระหวางการinterrupt แบบ NMI น การ interrupt แบบอนจะเขามาอกไมได CPU จะ
ไมรบรทงสนสถานะเดมกอนการ interrupt แบบ NMI (สถานะการ disable หรอ enable) จะไดรบการ
เกบรกษาไวท IFF2 ซงระหวางนจะไดรบการตรวจสอบไดเชนกนวา กอนการเขาไปสโหมด NMI
สภาวะการเปนอยางไร และเมอกลบเขาโปรแกรมหลกดวยคาสง RETN จะทาใหสถานะเดมเกบ
รกษาไวใน IFF1 ใหมการตอบสนองตอ INT กจะทาให IFF1 และ IFF2 ไดรบการ reset เชนกน
ดงนนเมอมการ interrupt แบบ INT สญญาณ INT ครงตอไปจะไมสามารถไดรบการตอบสนอง
จนกวาจะมคาสง EI INT จงจะไดรบการตอบสนองนนเอง สวนการ execute คาสง RETI จะไมมผล
ทาให IFF1 และ IFF2 เกดการเปลยนแปลง
8.4 คาสง Returns ตางๆ
คาสง RET - return จาก subroutine
RETI - return จาก interrupt service routine
RETN - return จาก non-maskable interrupt
คาสง RET ใชแทนคาสง RETI ได แตในบางกรณ อปกรณ I/O จะถกสรางใหรจกกบคาสง
RETI ซงจะทาใหเราสามารถตอพวงอปกรณทตอง interrupt Z80 ไดหลายตว สวนคาสง RETN นน
นอกจากจะทาหนาทของ RET แลว จะทาหนาทตอไปน
ตอนเกด NMI IFF1 ← 0 สวนคาของ IFF2 จะคงเดม
RETN IFF1 ← IFF2 copy
72
Interrupt จะไมเกดขนในขณะทมสญญาณ BUSRQหรอขณะทกาลงทางานใหกบ interrupt
ทม priority สงกวา (เราตองออกแบบใหทางานในลกษณะน)
มอกลกษณะหนงคอตามรปท 8.7 คอสญญาณ INT ทาใหออกจากคาสง HALT ได
รปท 8.7 การออกจากคาสง HALT เนองจากสญญาณ INT
8.5 Non-maskable Interrupt (NMI)
การ interrupt ชนดนจะปอนเขาทางขา NMI ของ CPU โดยทเมอ CPU รบสญญาณนแลว
CPU จะไมกระทาคาสงถด ไป แตจะตอบสนองตอการ interrupt โดยการเปลยนคาของ PC ใหเปน
0066H เพอใหภาวะการ fetch ครงตอไปเกดขนท address น การตอบสนองในกรณของ NMI น CPU
ถอวาเปนสวนสาคญมากทจะตองกระทาโดยทคาสงทางซอฟตแวรหรอขบวนการอนใดไมสามารถ
เขามาหยดยงการ interrupt ชนดนได โดยทจะม priority สงกวา INT แตตากวา BUSRQ การ
interrupt ดวยวธนจงมกใชในกรณวามเหตการณสาคญทสด จากหลกการทวไปของการ interrupt คา
เดมของ PC ท CPU จะกระทาตอไปในโปรแกรมหลกจะไดรบการเกบรกษาไวใน stack และการ
กลบคนสโปรแกรมหลกเดมนนกระทาไดดวยคาสง RETN (Return from non-maskable interrupt)
NMI เปนแบบ falling edge-sensitive เมอมสญญาณ NMI เขามาเมอใดสญญาณ NMI นจะ
ถก latch ไวกอนภายใน จนกระทงทาคาสงปจจบนเสรจ จงจะเกดการ interrupt
NMI มขนตอนดงตอไปน
1. เมอเกดขอบขาลง ทขาNMI Z80 จะคาง (latch) สญญาณ interrupt request ไวภายใน
2. ในชวง T-state สดทายของแตละคาสง Z80 จะตรวจสญญาณ Interrupt ทเขามาถาพบวา
มสญญาณของขาลงทถกคางไวกอนหนาน และ BUSRQ ไม active จะเกด interrupt
3. Z80 จะเกบคา PC ปจจบนไวบน stack
4. IFF1 จะถกเปลยนคาเปน 0
5. Z80 เรมตนทางานใน interrupt service routine ทตาแหนง 66 H โดยไมมสวนของ
ฮารดแวรเพมเตม (คลาย IM0 ทจะกลาวตอไป)
Interrupt service routineHALT INT
ออกจากคาสง HALT
กลบไปคาสงถดจากคาสง HALT
73
6. เมอทางานจนกระทงเจอคาสง retn Z80 จะคดลอกคาของ IFF2 ไปยง IFF1 และ
กลบไปทางานตอในสวนของโปรแกรมทถกขดจงหวะ (interrupted routine) (pop คา
return address ใน stack มาใสใน PC)
8.6 Maskable Interrupt (INT)
ในการ interrupt ชนดน ผใชตอง interrupt ผานเขามาทาง ขา INT ของ CPU เมอ CPU ไดรบ
สญญาณนแลว CPU จะตรวจสอบสถานะของตวเองวาจะตอบสนองตอการ interrupt หรอไม การท
จะตอบสนองหรอไมสามารถโปรแกรมไดดวยซอฟตแวร ดงนนผโปรแกรมจงสามารถกาหนด
สภาวะการ interrupt ใหไดรบการตอบสนองตรงเฉพาะสวนใดสวนหนงของโปรแกรมได การ
interrupt ดวยวธนมอยดวยกน 3 โหมด ซงการแยกโหมดกทาไดดวยการกาหนดในคาสงทาง
ซอฟตแวร โดยแยกเปนโหมด 0 (IM0) โหมด 1 (IM1) และ โหมด 2 (IM2)
8.6.1 การ interrupt โหมด 0
ในโหมดนผออกแบบ CPU Z80 ไดออกแบบมาเพอให Z80 ทาการตอบสนองตอสญญาณ
interrupt เหมอน 8080 ทกประการ กลาวคอเมอมการ interrupt เกดขนและโปรแกรมทางซอฟตแวร
ได set mode การรบ interrupt เปน โหมด 0 (IM0) และenable การ interrupt ไวการทางานของ
CPU จะหยดการ fetch คาสง ถดไป แตจะตอบรบการ interrupt ดวยการสงสญญาณตอบรบดวย M1
กบ IORQ อานขอมล 1 byte เขามาทาง data bus ขอมล 1 byte นไดรบการสงมาจาก อปกรณ I/O
ท interrupt มา เมอ CPU อานขอมล byte นมา CPU จะถอวาเปน opcode ทนทและจะตความหมายใน
การทางาน คาสงขนาด 1 byte ทเหมาะในการใชในการinterruptกคอคาสง RST เมอ CPU execute
คาสง RST CPU จะเกบขอมลเดมใน PC ไวท stack แลวเปลยนคา PC ใหมตามลกษณะของการ RST
นนๆ ดงนน CPU จะกระโดดขามไปทางานตามทตองการของการ interrupt ได การตอบสนองตอการ
interrupt ดวยการสงสญญาณ 1M และ IORQ ทาการ fetch ขอมลจาก I/O มา execute นอาจทาได
โดยการให I/O สงคาสงอนทไมใชคาสง RST (คาสง byte เดยว) แตเปน คาสงหลาย byte เชนคาสง
CALL ซงเปนคาสงขนาด 3 byte โดย I/O สงขอมลขณะตอบรบการ interrupt ( 1M + IORQ ) ดวย
ขอความ CDH (CALL) เมอ CPU execute คาสงนกจะทราบวาเปนคาสง CALL ซงยงตองการขอมล
เพมอก 2 byte CPU จะสราง machine cycle ตอไปในการอานหนวยความจาเหมอนกระทาคาสง
CALL จรง ๆ ในการนเราจะตองใชวงจรทางฮารดแวรประกอบเพอให I/O สงขอมลอก 2 byte ตาม
ไปใหไดซงการ interrupt ดวยวธนอาจกาหนดไดดวยเทคนคทแตกตางกนตามการออกแบบของแต
ละบคคล
โดยปกตการ set ใหอยในโหมดนกระทาไดดวยการสงทางซอฟตแวรดวยคาสง IM1และการ
กาหนดใหรบการ interrupt ไดหรอไมกระทาไดดวยคาสง EI และ DI และเพอใหการทางานเหมอน
74
อยในโหมดของ 8080 ทกประการ ดงนนหลงจากการ reset CPU CPU จะ set ตวเองใหอยในโหมด 0
นโดยอตโนมต
ขนตอนการเกด interrupt ในโหมด 0
โหมด 0 เปนวธการ interrupt ทเหมอนกบ 8080 และ 8085
1. ใชคาสง IM 0
EI
2. ในชวงขาขนของ T-state สดทายของแตละคาสง Z80 จะตรวจสอบสญญาณ INT
3. ถา INT active Z80 จะทาคาสงปจจบนจนเสรจ แลวทาการ disable IFF ทงสอง จากนน
จงสงสญญาณ INTA ( IORQ และ M1 ) โดยทไมโครโพรเซสเซอรจะไมรบ INT อก
จนกวา IFF จะถก enable ใหมอกครงหนง
4. ใชสญญาณ INTA เพอใสคาสง RST XXH ลงใน data bus ดงรปท 8.8
2 DI74 DI66 DI58 DI411 DI313 DI215 DI117 DI0
74LS244Octal Buffer18
1614129753
Z80
INT
INTA
1MIORQ
D7
D0
+5V
10k
+5V
10k
1 19
F7H
enable รปท 8.8 การใช Interruptโหมด 0 (ทมา: Gaonkar, 1992)
5. เมอ Z80 รบคาสง RST XXH น กจะเรมทาตามคาสง โดยเกบคา PC ปจจบนไวบน stack
กอนจะไปเรมทางานในตาแหนงทระบไวในคาสง RST ดงรปท 8.9
รปท 8.9 การเกบคา PC ใน interrupt service routine
Interrupt
service
routine
00XXH: PUSH …
PUSH …
…
POP …
POP …
EI
RETI
External
interrupt
request
INT
Interrupted routine
75
6. ปญหาทอาจเกดขนได
• สญญาณ INT สนเกนไป หรอมาไมถกจงหวะ
• สญญาณ INTนานเกนไป จะเกด interrupt ซา เพราะวา INT เปนแบบ level sensitive
วธแกปญหา คอการใช D Flip-Flop ดงในรปท 8.10
INT
INTA M1IORQRESET
รปท 8.10 การแกปญหาโดยใช D Flip-Flop
8.6.2 การ interrupt โหมด 1
ในโหมดนผโปรแกรมสามารถกาหนดไดดวยคาสง IM1 การ interrupt ในโหมดนจะกระทา
เหมอนกนกบ interrupt ทกประการแตจะแตกตางกนกเพยงการเรมการทางาน (restart) มาทตาแหนง
0038H (กรณ non-maskable ไปกระทาท 0066H) และจานวนคาบเวลาทใชใน โหมด 1 นมมากกวาใน
non-maskable ทงน เพราะในโหมดน CPU ตองเพม Tw ขนอก 2 states การ interrupt ในโหมดน
สามารถ disable ไดดวยซอฟตแวร
8.6.3 การ interrupt โหมด 2
ในโหมดน interrupt routine จะอยทใดกไดในหนวยความจา 0000 H – FFFF H โดยใชคาท
เกบใน register I และฮารดแวรรวมกน เปน pointer ชไปยง interrupt vector table ซงเกบ address
ของ interrupt อกทหนง ดงตวอยางในรปท 8.11
รปท 8.11 ตวอยางของ interrupt โหมด 2
76
ในโหมดนทาให Z80 มขดความสามารถเกยวกบการ interrupt สงขนมาก
การ interrupt ในโหมดนกาหนดไดดวยคาสง IM 2 และการจะให CPU ตอบสนองหรอไมกยงใช
คาสงโปรแกรมไดเชนกนโดยใชคาสง EI และ DI การกระโดดไปยงโปรแกรมอนในขณะเมอ CPU
ตอบสนองตอการ interrupt ในกรณนจะไปทใดกได โดยใช addressในการกระโดดนไดถง 16 บต
ซงทาใหการ interrupt ทาไดสะดวกและรวดเรวขนอกมาก
กรรมวธการตอบสนองตอการ interrupt ในกรณนคอ เมอมสญญาณ INT เขามาและ CPU
ตรวจสอบไดในตอนสดทายของคาสง CPU จะตอบสนองดวยการสง M1 กบ IORQ ออกไป
สญญาณ M1 กบ IORQ จะเปนตวบอกอปกรณทสง INT มาใหสงขอมลขนาด 1 byte เขาทาง data
bus สาหรบในโหมดนขอมลทสงจาก I/O ขนาด 1 byte ทเขาทาง data bus น CPU ถอวาเปน vector
ของ การ interrupt โดยขอมลในบต D0 จะตองเปน "0" สวนบตอนจะเปนอะไรกได CPU จะนา
vector นไปเปนขอมล address byte ทมนยสาคญตาและขอมลจาก register I ภายใน CPU เปนขอมล
byte ทมนยสาคญสง เรยกหาไปยงขอมลในหนวยความจาเพออานขอมลในหนวยความจา 2 bytes
ตดกนนนมา load ใส PC หรอเปนการอาง addressให PC แบบโดยทางออม (Indirect addressing
mode) นนเอง
สาหรบกรณนจะเหนวาเราสามารถ set คาใน register I ใหเปนอะไรกไดและ I/O จะสงขอมล
vector มาประกอบรวมเพอบอกถงคาตารางในหนวยความจาทตองการ ดวยวธการเชนนจะทาใหการ
กระโดดไปยงโปรแกรมยอยเกดขนทใดกได อปกรณ IC ททางานรวมโดยใช interrupt mode นม
หลายเบอรดวยกน เชน Z80PIO Z80CTC Z80SIO ฯลฯ ซงอปกรณ interface เหลานสามารถสง
vector ใหกบ CPU ไดอยางมประสทธภาพ การ interrupt ในโหมดน CPU ตองการเวลาถง 19 states
โดยใช 7 states ใน การ fetch คา vector ใช 6 states ถดไปในการเกบขอมล PC เดม และใชอก 6
states ในการอานขอมลจากหนวยความจามายง PC
ตวอยางการตอประสาน A/D converter ใน interrupt โหมด 1
เมอเกด interrupt ในโหมด 1 Z80 จะไปเรมตนทางานทตาแหนง 0038 H โดยไมตองม
ฮารดแวรเพม
การทางานของ ADC 0801
- รบอนพตทขา Vin (+) และ Vin (-)
- ม internal clock กาหนดความถโดยใช RC โดยท conversion time จะขนอยกบความถ
ของสญญาณนาฬกา
การแปลงเรมจากการใหสญญาณ CS และ WR (ใชเปน start signal)
เมอแปลงเสรจจะสงสญญาณ INTR ให Z80 Z80 จะมาเอาขอมลโดยใหสญญาณ CS และ RD แลว
อานขอมลจาก data bus การอานขอมลจะทาเปนการ reset การทางานของ A/D โดยอตโนมต (หยดสง
สญญาณ INTR ) โดยไมตองใชฮารดแวรเพม
77
ตวอยางโปรแกรม ORG 0 JP START ORG 38H JP ADC START: ORG 2000H LD SP, 3000H LD HL, BUFFER
LD B, จานวน byte
IM 1 EI
OUT (0F8H), A ;เรมตนการแปลงสญญาณ
WAIT: HALT JP NZ, WAIT … ADC: IN A, (0F8H) LD (HL), A INC HL OUT (0F8H), A DEC B EI RETI
BUFFER: DFS จานวน byte
8.7 Timing diagram สาหรบการตอบสนองตอการ interrupt ของ CPU
การสนองตอการ interrupt ของ CPU มลกษณะสาคญทเราจะตองพจารณาในแงของ
ไดอะแกรมเวลา เพอการเชอมตอกบอปกรณ I/O ในแงทางฮารดแวรจะไดเปนไปอยางถกตอง โดย
การตอบสนองจะเกดตามลาดบดงน
1. อปกรณ I/O สงสญญาณ interrupt มา โดยการทาใหขา INT อยในลอจก "0"
2. CPU จะตอบสนองตอการ interrupt ดวยการสง M1 ลอจก "0" กอนเพอใหอปกรณ I/O เตรยม
จดการเกยวกบขบวนการจดลาดบกอน แลว IORQ จาก CPU จงสงตามมา การให IORQ มาทหลง
M1 กเนองจากใหชวงเวลา delay ระหวางนเปนตวกาหนด IEI และ IEO ของการกระทา daisy chain
เมอ IORQ ออกไปท I/O และถา IEI ของอปกรณนนเปนลอจก "1" ตว I/O นนกจะสง vector เขามา
ทาง data bus และ CPU จะใช IORQ และ M1 เปน pulse สงอานเขาทาง data bus และการทา daisy
chain อปกรณทสง interrupt ได จะให IEO เปนลอจก "0" เพอปอนเขา IEI ของตวอนเปนการบลอก
การสง vector จาก I/O ตวอน
3. การเคลยร interrupt โดยปกตอปกรณ I/O จะ active ในการสง interrupt ไดตองให IEI = 1 และ
IEO = 0 ดงนนเมอเสรจสนการกระทาการinterrupt แลวสถานะของการ I/O จะตอง เคลยรตวเองได
นนคอเมอมการกระทาคาสง RETI (ED 4D) กจะมการบอกใหอปกรณ I/O ทราบวาจบสนการ
interrupt แลว เพอทาให IEO เปน "1" เพอการenable ตวI/O ทมความสาคญนอยกวา ความสมพนธ
ของ INT NMI และ BUSRQ
78
รปท 8.12 แสดงการจดลาดบการทางานภายในสาหรบการตรวจสอบการ interrupt ทงแบบ
INT และ NMI รวมทงขบวนการขอใชบส (BUSRQ) โดยมลกษณะการทางานทนาสนใจดงน
1. การตรวจสอบสญญาณ INT และ NMI CPU จะทาการตรวจสอบทกๆไซเคลสดทายของ
สญญาณนาฬกาของแตละคาสง
2. สญญาณBUSRQ จะไดรบการตรวจสอบทก ๆ ตอนสดทายของ machine cycle
3. เมอ CPU อยในสภาวะ DMA จะไมยอมรบรการขอ INT หรอ NMI
4. การจดการตอบสนองจะเปนไปตามลาดบดงน BUSRQ NMI และ INT
NMI
BUSRQ
INT
NMI
รปท 8.12 การจดลาดบการทางานภายในสาหรบการตรวจสอบการ interrupt ทงแบบ INT และ NMI
79
Interrupt request and acknowledge cycle
รปท 8.13 Timing diagram ของการตอบสนองตอการ interrupt (ทมา: Gaonkar, 1992)
จากรปท 8.13 เปนการแสดง timing diagram ของการ interrupt โดยท CPU จะทา
การตรวจสอบสญญาณ INT ทก ๆ pulse สญญาณนาฬกาลกสดทายของทกคาสงทกระทา
แตอยางไรกตามการตรวจสอบ นจะไมเกดผลหากซอฟตแวรไดสง DI ซงจะทาให interrupt
flip-flop ภาย ในไมไดรบการเซท นอกจากน สญญาณ BUSRQ active การ interrupt กไมได
รบการตอบสนอง เชนกน เมอการตอบสนองตอ INT เกดขน CPU จะสรางสถานะพเศษใน
M1 ตอมา ใน สถานะพเศษของ M1 น IORQ จะ active แทน MREQ เพอเปนการ
ตอบสนองตอการ interrupt และตอนทายของ IORQ CPU จะทาการอานขอมล 8 บตเปน
เวคเตอรสาหรบการ interrupt จาก data bus สงเกตวาในกรณน CPU จะสรางสญญาณ Tw 2
states ขน อยาง อตโนมต การสราง Tw ขนมากเพอชะลอเวลาใหอปกรณภายนอกตรวจสอบ
ตวอปกรณทสราง interrupt และ จดลาดบความ สาคญ (priority) ของสญญาณท interrupt
WAIT
* Tw1 และ Tw2 คอ wait state ซง Z80 จะใสเพมใหโดย
T1 T2 Tw1* T w2* T3 T4 T5
Interrupt acknowledge M1
A15-A0
1M
MREQ
D15-D0
IORQ
INTA
PC Refresh Address
RST Inst.
INT
Interrupt request
last M cycle
current instruction
CLK
80
เรายงสามารถเพม state การ WAIT ขนอกไดเพอให CPU รออปกรณทจะสง vector
ของการ interrupt ทาง data bus
Nonmaskable interrupt response
จากรปท 8.14 เปน diagram เวลาของการตอบสนองตอการ interrupt แบบ non-
maskable เมอถง pulse ของสญญาณนาฬกาลกสดทายกอนการกระทาการจบคาสง แตละ
คาสง CPUจะทาการตรวจสอบ ขา NMI และถา NMI มคา active (=0) CPU กจะ latch ไวแลว
ตอบสนองตอการ interrupt ทนท การ interrupt ดวยวธนถอวา CPU ใหความสาคญสงสด
และขบวนการทาง ซอฟตแวรกไมสามารถทจะปองกนไมให CPU ตอบสนองได การ
ตอบสนองจะเกดขนทนทดงนนการ interrupt ดวยวธนจงนามาใชในกรณท สาคญเปนพเศษ
การ interrupt วธน CPU จะสงขอมล เดมทอยใน program counter ไปเกบไวท stack แลวเซท
คา program counter เปนคา 0066H เพอ กระทาในสวนของโปรแกรมยอยทตาแหนง 0066H
รปท 8.14 Timing diagram ของการตอบสนอง Interrupt แบบ NMI (ทมา: Gaonkar, 1992)
8.8 Multiple Interrupts และ Priorities
เราสามารถออกแบบวงจรใหอปกรณ I/O หลายอปกรณขอขดจงหวะการทางานของ Z80 ได
วธการท Z80 จะแยกแยะวาอปกรณใดทขอ interrupt ทาได 2 วธ คอ
- polling method
- interrupt vector method
T1 T2 T3 T4 T5
Interrupt acknowledge M1
A15-A0
1M
MREQ
RD
RFSH
PC Refresh Address
NMI
last M cycle
CLK
81
8.8.1 Polling Method
INTINT0
RDIORQ
INT1
INT2
INT0
INT1
INT2
รปท 8.16 Polling Method (ทมา: Gaonkar, 1992)
กาหนดใหมพอรตหนง รบอนพตทเปนสญญาณ INTX จากอปกรณ I/O เราสามารถเขยน
โปรแกรมให interrupt service routine ตรวจทตาแหนงของ input port นวา มสญญาณ INTX จาก
อปกรณใด สญญาณ INTX ใดทตรวจกอน จะม priority สงกวาโดยอตโนมต
INT
รปท 8.17 การเขยนโปรแกรมตรวจบตตางๆของ Polling Method
ตวอยางของการพฒนา Polling Method
IORDINT
M1GS E
รปท 8.18 ตวอยางPolling Method (ทมา: Gaonkar, 1992)
82
สวนของโปรแกมเปนดงน ORG 0 JR START ORG 38H JP ADC_INTR START: LD SP, STACK LD HL, DATA1 LD DE, DATA2 IM 1 EI OUT (ADC1), A OUT (ADC2), A
MAINLOOP: : : : JP MAINLOOP ADC_INTR: PUSH AF IN A, (0FFH) AND 3 RRA CALL C, DEVICE1 RRA CALL C, DEVICE2 POP AF EI RETI DEVICE1: PUSH AF IN A, (ADC1) LD (HL), A OUT (ADC1), A POP AF RET DEVICE2: PUSH AF IN A, (ADC2) LD (DE), A OUT (ADC2), A POP AP RET DATA1: DFS 1 DATA2: DFS 1 END
8.8.2 Interrupt Vector Method
วธนใช interrupt โหมด 2 วงจรในรปท 8.19 ใช 74LS148 (8-to-3 Priority Encoder)
ถา input I7 เปน active low output A2 – A0 = 1 1 1 = 0 0 0
ถา input I4 เปน active low output A2 – A0 = 1 0 0 = 0 1 1
ถา I7 และ I4 เปน active พรอมกน A2 – A0 = 1 1 1 = 0 0 0
ในโหมด 2 น Z80 จะรบ interrupt vector address เปนเลขค ดงนนเราจงใหบตD0 เปน 0
เรมการแปลง ADC
ใช 74LS366 invert
กลบมาอกครง
83
IORDINT
M1GS E
รปท 8.19 Interrupt Vector Method (ทมา: Gaonkar, 1992)
รปท 8.20 Interrupt Vector Method
84
บทท 9 อปกรณตอประสานทสามารถโปรแกรมได
อปกรณตอประสานทสามารถโปรแกรมได (Programmable Interface Devices) เปนอปกรณทม
หนาทตอประสานอปกรณอนพตหรอเอาทพต โดยทหนาทของอปกรณตอประสานทสามารถ
โปรแกรมไดนเปลยนแปลงไดโดยการสงงานผาน Control register ทอยภายในอปกรณตอประสานท
สามารถโปรแกรมได
ในบทนจะกลาวถงอปกรณตอประสานทสามารถโปรแกรมได 2 ชนดคอ
• Z80PIO
• 8255A
9.1 แนวคดพนฐานของอปกรณตอประสานทสามารถโปรแกรมได
การตอประสานกบอปกรณอนพตหรอเอาทพตในบททผานมา เปนเพยงการตอประสานอยาง
งายโดยกระทาภายใตสมมตฐานทวา อปกรณ I/O เหลานนมความพรอมสาหรบการถายโอนขอมล
ตลอดเวลา ซงในความเปนจรงสมมตฐานนนไมไดเปนจรงเสมอไป
อปกรณ I/O บางตวจะทางานชากวา CPU มาก เชน เครองพมพแบบ dot matrix หรอ
แปนพมพ เพอปองกนการสญเสยขอมลหรออานขอมลเดมซา จาเปนตองมสญญาณ handshake
ระหวางอปกรณ I/O กบ Programmable I/O(PIO) chip
นอกจากน อปกรณ I/O บางตวไมสามารถสรางสญญาณ INT อปกรณ I/O บางตว อาจทา
หนาททงรบและสงขอมลได ดงนน programmable I/O device จะตองมสงตอไปน
1. Input และ Output registers (Latches สาหรบคงขอมลเอาไว)
2. Tri-state buffers ทมความสามารถใหขอมลผานได 2 ทศทาง
3. Handshake และ interrupt signals
4. Control logic
5. Chip select logic
6. Interrupt Control logic
9.2 การสรางตวรบสงทสามารถโปรแกรมไดอยางงาย (Programmable Transceiver)
เพอใหเขาใจถงการเขยนโปรแกรมควบคมอปกรณตอประสานทสามารถโปรแกรมได หวขอ
นอธบายถงการสรางอปกรณรบสงอยางงายซงทามาจาก buffer แบบ 2 ทศทางทสามารถโปรแกรมได
โดยใชชป 74LS245 (bidirectional tri-state octal buffer)
85
ชป 74LS245 ประกอบดวย buffer 2 ทศทางแบบ 3 สถานะจานวน 8 ตว โดยการไหลของ
ขอมลภายใน buffer จะเกดขนเมอสญญาณ G active (มคาเปน 0) และ มสญญาณ DIR (direction)
ทาหนาทกาหนดทศทางการไหลของขอมล รปท 9.1 แสดงถงลอจกของ buffer ภายในชป 74LS245
เพยง 1 ตว ซงในความจรงแลวนน ชป 74LS245 ประกอบดวย buffer ในลกษณะนทงหมด 8 ตว
G รปท 9.1 แผนภาพทางลอจกของ buffer เพยง 1 ตวภายในชป 74LS245
(ทมา: Gaonkar, 1992)
การควบคมการไหลของขอมลภายในชป 74LS245 เปนดงตารางท 9.1
G DIR การไหลของขอมล
0 0 ขอมลไหลจาก B ไป A (buffer ทาหนาทเปน input)
0 1 ขอมลไหลจาก A ไป B (buffer ทาหนาทเปน output)
1 X ไมมการไหลของขอมล (A และ B เปน high impedance-Z)
ตารางท 9.1 รายละเอยดของคาควบคมตางๆของชป 74LS245
ในการนเนองจากเปนการมงเนนไปยงการพฒนาอปกรณทสามารถโปรแกรมไดโดยการ
เขยนคาสง ผานไมโครโพรเซสเซอร Z80 จงจาเปนตองเพม control register เพอรองรบคาสงจากไม
โครโพรเซสเซอรโดยกาหนดโครงสรางการพฒนาระบบเปนดงในรปท 9.2
86
74LS2457A
DIR
D0
Controlregister
7B
1A 1B
CS
EN
G
DI7
DI0
A0
A7A6A5A4A3A2A1
CS
รปท 9.2 ระบบการสงรบขอมลอยางงายโดยใชชป 74LS245 (ทมา: Gaonkar, 1992)
จากรปท 9.2 ไดมการใช A7-A1 จาก address bus ผาน NAND gate เพอไปเลอกใช control
register และ ชป 74LS245 ผานทาง CS (chip select) และไดมการใช A0 เพอแยกระหวางตาแหนง
ของ control register และ ชป 74LS245 รายละเอยดเปนดงในตารางท 9.2
CS (เพอเลอกใช control register และ 74LS245) GEN/
A7 A6 A5 A4 A3 A2 A1 A0
เลขฐาน
16 ตาแหนงของ
1 1 1 1 1 1 1 0 FEH port
1 1 1 1 1 1 1 1 FFH control register
ตารางท 9.2 รายละเอยดของตาแหนงของ control register และชป 74LS245
Control word คอคาทอยใน control register สาหรบการกาหนดอปกรณรบสงนใหทาหนาท
เปนตวรบขอมลหรออนพตคอ 00H (D0 = 0 และ D7-D1 เปน “don’t care” หรอในทนใหเปน 0) สวน
control word สาหรบการกาหนดใหเปนตวสงขอมลหรอเอาทพตคอ 01H (D0 = 1)
ชดคาสงขางลางนเปนการเขยนโปรแกรมเพอสงงานระบบในรปท 9.2 เรมตนโดยกาหนด
buffer ใหเปน input port เพอทาหนาทรบขอมลขนาด 1 byte
LD A,00H ;set control word ⇒ input port
OUT (0FFH),A ;write the control word to control register
IN A, (0FEH) ;get data via input port
สวนชดคาสงตอไปนเปนการเขยนโปรแกรมเพอกาหนด buffer ใหเปน output port ผานการ
สง control word 01H ออกไปยง control register ทมตาแหนงอยท FFH เพอทาหนาทสงขอมล
OutData ทมขนาด 1 byte ออกไปยง output port ทมตาแหนงอยท FEH
87
LD A,01H ;set control word ⇒ output port
OUT (0FFH),A ;write the control word to control register
LD A,OutData ;load output data
OUT (0FEH),A ;send output data via output port
9.3 อปกรณ I/O แบบขนานสาหรบ Z80
Z80 PIO (Z80 Parallel I/O Device) เปนอปกรณการตอประสาน I/O ทสามารถโปรแกรม
ได ซงออกแบบมาเพอใหใชรวมกบไมโครโพรเซสเซอร Z80 โดยเฉพาะ
Z80 PIO ม port I/O จานวน 2 พอรต (พอรต A และ B) แตละ port มขนาด 8 บต
9.3.1 โหมดการทางานของ Z80 PIO
โหมดการทางานของ Z80 PIO มดงน
รปท 9.3 โหมดการทางานของ Z80 PIO
Mode 0: โหมดเอาทพตโดยทมอยดวยกน 2 ลกษณะคอ
• แบบเอาทพตอยางงาย ไมมการใชสญญาณ handshaking
• แบบมการใชรวมกบ interrupt โดยมการใชสญญาณ handshaking (สญญาณ strobe และ ready)
Mode 1: โหมดอนพตโดยทมอยดวยกน 2 ลกษณะคอ
• แบบอนพตอยางงาย ไมมการใชสญญาณ handshaking
• แบบมการใชรวมกบ interrupt โดยมการใชสญญาณ handshaking (สญญาณ strobe และ ready)
Mode 2: โหมด 2 ทศทางคอสามารถกาหนดใหเปนอนพตหรอเอาทพตกได
Mode 3: โหมดบต คอสามารถกาหนดแตละบตของทงสอง port ใหทาหนาทเปนอนพตหรอเอาทพต
ได โหมดนใชสญญาณ handshaking ไมได
88
9.3.2 กลมสญญาณของ Z80 PIO
AB/DC/
CEASTB
BSTB
ARDY
BRDY
1MIORQRD
INT
รปท 9.4 Z80 PIO Logic Signals (ทมา: Gaonkar, 1992)
จากรปท 9.4 แสดงถงกลมสญญาณทง 6 กลมของ Z80 PIO ซงมคาอธบายดงน
1. Data bus (D7 - D0): เปน data bus แบบ 2 ทศทาง 3 สถานะ ขนาด 8 บต ใชในการโอนยาย
ขอมลระหวาง Z80 MPU กบ PIO
2. สญญาณ I/O: เปนสายสญญาณ I/O แบบ 2 ทศทาง 3 สถานะ ใชในการโอนยายขอมลระหวาง
PIO กบอปกรณรอบขาง (peripheral) มอยดวยกน 2 ชดโดยแตละชดมขนาด 8 บตสาหรบพอรต
แตละพอรต
• Port A: A7 - A0
• Port B: B7 - B0
3. สญญาณ handshaking: ใน PIO มสญญาณ handshaking ทงหมด 4 สญญาณ โดยแตละพอรต
จะสญญาณ ใชไดแก
• ASTB (สญญาณ stroke ของ พอรต A) - เปนสญญาณอนพตของพอรต A โดยรบมา
จากอปกรณรอบขางเขาไปยง PIO โดยท
i. ถากาหนดใหพอรต A เปน output port อปกรณรอบขางจะสงสญญาณมายง
ASTB เพอแสดงวาไดรบขอมลเรยบรอยแลว
ii. แตถากาหนดใหพอรต A เปน input port อปกรณรอบขางจะสงสญญาณมายง
ASTB เพอแสดงวาไดสงขอมลมาเรยบรอยแลว
89
• ARDY (สญญาณ ready ของ port A) - เปนสญญาณเอาทพตของ port A สงออกจาก
PIO ไปยงอปกรณรอบขาง
i. ถากาหนดให port A เปน output port PIO จะใชสญญาณ ARDY นเพอบอก
อปกรณรอบขางวาขอมลพรอมแลวมาเอาไปได
ii. แตถากาหนดให port A เปน input port PIO จะใช สญญาณ ARDY นในการ
บอกอปกรณรอบขางวาไดรบขอมลแลวสงมาใหมได
• BSTB และ BRDY (สญญาณ stroke และ ready ของ port B) - เปนสญญาณ
handshake ของ port B โดยทวไปทาหนาทคลายกบสญญาณ ASTB และ ARDY ของ
port A ยกเวนในกรณท port A ถกใชใน mode 2 ซงเปนโหมดท port A ทาหนาท
รองรบการโอนยายขอมลแบบ 2 ทศทาง ซงในโหมดนนสญญาณ BSTB และ BRDY
จะถกใชรวมกบ port A
4. ไฟเลยงและสญญาณนาฬกา
5. Interrupt control logic: สญญาณทใชในการควบคม interrupt มอยดวยกน 3 สญญาณ ไดแก
• INT (Interrupt) - เปนสญญาณสงออกจาก PIO ใชในการ interrupt Z80
• IEI (Interrupt Enable In) – เปนสญญาณอนพตใชเมอตอ Z80 PIO พวงเขาดวยกน
แบบ daisy chain โดยจะใชรวมกบสญญาณ IEO รายละเอยดจะอธบายในภายหลง
• IEO (Interrupt Enable Out) - เปนสญญาณเอาทพตใชรวมกบสญญาณ IEI ในการตอ
interrupt แบบ daisy chain
6. สญญาณควบคม: ประกอบดวย 6 สญญาณ แตเมอแบงตามหนาทการทางานแลวมอยดวยกน
เพยง 2 ประเภทคอ
• สญญาณควบคมทใชในการกาหนดตาแหนงของ data port และ control register ของทง
port A และ B (ตารางท 9.3) สญญาณประเภทนไดแก
CE DC/ AB/ พอรตทเลอก
0 0 0 Data Port A
0 0 1 Data Port B
0 1 0 Control Register A
0 1 1 Control Register B
1 X X PIO ไมไดถกเลอก
ตารางท 9.3 สรปการเลอก port ของ Z80 PIO
90
CE (Chip enable) - ใชในการเลอกชป
DC/ - ใชในการเลอกวาเปน control register หรอ data port
AB/ - ใชในการเลอกวาเปนของ port B หรอ A
• สญญาณควบคมทใชในการกาหนดประเภทของการทางาน อนไดแกสญญาณ 1M ,
RD และ IORQ โดยสญญาณเหลานจะถกตอกบ Z80 โดยตรง (สงเกตวา Z80 PIO ไม
มสญญาณ WR ) โดยรายละเอยดในการกาหนดการทางานเปนดงน
o การอาน: Z80 จะอานขอมลจาก register ทเลอกไว เมอสญญาณ RD และ
IORQ active
o การเขยน: Z80 จะเขยนขอมลลงใน register ทเลอกไวเมอสญญาณ IORQ
active อยางเดยวโดยทสญญาณ RD ไม active (เปนเงอนไขทวาสญญาณ RD
และ WR ของ Z80 จะไม active พรอมกน นนหมายความวาในกรณทเปนการ
เขยนขอมล สญญาณ RD จะไม active)
o การตอบสนองการ interrupt (Interrupt Acknowledge): Z80 จะตอบสนองการ
interrupt จาก PIO เมอ สญญาณ 1M และ IORQ active
o การ reset: PIO จะไดรบการ reset เมอสญญาณ 1M active ในขณะทสญญาณ
RD และ IORQ ไม active
ตวอยางการ decode address ใหกบ Z80 PIO
RD
CS
WR
IORD
IOWR
รปท 9.5 วงจรการตอประสาน Z80 PIO กบไมโครโพรเซสเซอร Z80 (ทมา: Gaonkar, 1992)
จากรปท 9.5 จะไดวา
A7 A6 A5 A4 A3 A2 A1 A0
DC/ AB/
Data port A 1 0 0 0 0 0 0 0 =80H
Data port B 0 1 =81H
Control register A 1 0 =82H
Control register B 1 1 =83H
91
ในการจดเตรยมการทางานตางๆ ของ Z80 PIO จะตองเขยนคาสงการควบคมตางๆ ไปท
control register ดงน
Control Word สาหรบควบคมโหมดการทางานของ Z80 PIO ซงผผลตกาหนดมาใหแลวนนม
รปแบบตามรปท 9.6
D7 D6 D5 D4 D3 D2 D1 D0
Mode X X 1 1 1 1
Don’t care ชใหเหนวาเปน control word
ใชในการเลอก
mode การทางาน
00: mode 0
01: mode 1
10: mode 2
11: mode 3
รปท 9.6 Control word ของ Z80 PIO
Interrupt Enable Word เปนการ enable flip-flop ของพอรทใช โดยมรปแบบตามรปท 9.7
D7 D6 D5 D4 D3 D2 D1 D0
1/0 X X X 0 0 1 1
ใชสาหรบโหมด 3 ชใหเหนวาเปน interrupt enable word 1: enable port interrupt
0: disable port interrupt
รปท 9.7 Interrupt enable word ของ Z80 PIO
Interrupt vector เปนการกาหนด byte ลางของ interrupt vector ซงแสดงถงตาแหนง service routine
โดยมรปแบบตามรปท 9.8
D7 D6 D5 D4 D3 D2 D1 D0
ใชสาหรบการกาหนด บต 0
D7 - D0 เปนการกาหนด byte ลางของ interrupt vector
โดยทม D0 = 0 ชใหเหนวาเปน interrupt vector
รปท 9.8 Interrupt vector ของ Z80 PIO
92
9.3.3 โหมด 0 1 และ 2 พรอมดวยสญญาณ handshake และ Interrupt I/O
Z80 PIO สามารถ interrupt Z80 CPU ได กตอเมอเราไดเขยนคาสงให enable interrupt flip-
flop ภายใน Z80 PIO ดวย
9.3.3.1 Output Mode 0 พรอมดวยสญญาณ handshake
ลาดบเหตการณทจะเกดขนเปนดงน
1. เมอ Z80 ทาคาสง OUT ขอมลจะถกสงจาก Z80 CPU ไปปน data bus หลงจากนน Z80 PIO
สงขอมลตอไปยงอปกรณภายนอก
2. Z80 PIO สงสญญาณ RDY ไปยงอปกรณภายนอก (peipheral) วาขอมลมาแลว
3. อปกรณภายนอกรบขอมลไป
4. อปกรณภายนอกสงสญญาณไปยง STB เพอบอกวาไดรบขอมลเรยบรอยแลว
5. เมอ Z80 PIO ไดรบขอบขาขนของสญญาณ STB กจะหยดสงสญญาณ RDY ตอจากนน
Z80 PIO จะสงสญญาณ INT ไปยง Z80 CPU เพอใหสงขอมลถดไปมาให
INT
STB
RDYINT
9.3.3.2 Input Mode 1 พรอมดวยสญญาณ handshake
ลาดบเหตการณทจะเกดขนเปนดงน (RDY เรมจาก active)
1. อปกรณภายนอกสงขมลมายง Z80 PIO และใหสญญาณ STBออกมาดวย
2. ขอบขาขนของสญญาณ STBจะทาใหสญญาณ RDY ไม active เพอบอกอปกรณภายนอกวา
ไดรบขอมลแลวและสงสญญาณ INT ให CPU
3. ใน interrupt routine ตองอานขอมลนไป
4. เมอมสญญาณ RD มายง Z80 PIO เพออานขอมล สญญาณ RDY จะกลบมา ใหมหลงจาก
ขอบขาขนของสญญาณ RD
INT
STB
RDYINT
RD RD
93
9.3.3.3 Mode 2: Bidirectional Data Transfer
INT
ASTBARDY
INT
RD RD
PA
BSTBBRDY
โดยท PA – เปน bidirectional
PB – ทางานในโหมด 3
ARDY, ASTB - เปนสญญาณ handshake สาหรบ output
BRDY, BSTB - เปนสญญาณ handshake สาหรบ input
9.3.3.4 Interrupt Piority
CINTCIEO CIEI INTBINTBIEO BIEIAINTAIEO AIEI
ลาดบความสาคญ (Priority): PIO A > PIO B > PIO C (ตอพวงกนไดไมเกน 4 ตว)
เมอ PIO ตวท interrupt ไดตรวจสอบวา Z80 CPU ทาคาสง RETI แลวจะหยด disable
interrupt PIO ทมลาดบความสาคญตากวา
IEI เปน high – ไมม PIO อนทมลาดบความสาคญสงกวากาลง service จาก Z80 CPU
เปน low – ม PIO อนทมลาดบความสาคญสงกวากาลง service จาก Z80 CPU และ PIO ตวน
จะขดจงหวะมได
IEO ธรรมดาจะเปน high หรอ low ตาม IEI แตถา IEI เปน high และ IEO เปน low แสดงวา PIO
น กาลง service อย
9.3.4 Mode 3: Bit Mode
ลกษณะพเศษของโหมดนคอ
1. แตละบตของ PA และ PB ถกกาหนดเปน input หรอเอาทพตกได โดยการเขยน
คาสงไปท control register
2. ไมมการใชสญญาณ handshake (RDY เปน low และ STB ถก disable)
3. เราสามารถกาหนด bit combination สาหรบ input เพอทาใหเกด interrupt ได โดย
เราสามารถเลอก logic combination (AND/OR) กบบางบตและเลอกวาจะเปน
active high หรอ active low ไดดวย
94
โดยในโหมด 3 นอกจากจะตองเขยน control word ลง control register ของพอรตทใชแลว
นน ยงตองเขยน word อนๆทใชในการควบคมอก 3 words คอ
• I/O Register Control Word
• Interrupt Control Word
• Mask Control Word
ลง control register อกดวยตามรปแบบดงตอไปน
I/O Register Control Word เพอกาหนดวาแตละ bit ทาหนาทเปน input หรอเอาทพตโดยม
รปแบบตามรปท 9.9
D7 D6 D5 D4 D3 D2 D1 D0 0= output
1 = input
รปท 9.9 I/O register control word ของ Z80 PIO
Interrupt Control Word เพอกาหนดสภาวะตรรกะทใชในการสราง interrupt โดยมรปแบบตามรป
ท 9.10
D7 D6 D5 D4 D3 D2 D1 D0
D7 D6 D5 D4 0 1 1 1
ชใหเหนวาเปน interrupt control word
0= no mask word
1 = mask word follows
0 = active level low
1 = active level high
0 = OR function
1 = AND function
0 = interrupt disabled
1 = interrupt enabled
รปท 9.10 Interrupt control word ของ Z80 PIO
Mask Control Word เพอกาหนดวาบตใดบางทถกตรวจสอบ โดยมรปแบบตามรปท 9.11
D7 D6 D5 D4 D3 D2 D1 D0
=0 ⇒ บตนนจะถกตรวจสอบเวลารบคาเขามา
รปท 9.11 Mask control word ของ Z80 PIO
95
9.4 ชป 8255A
ชป 8255A เปนอปกรณการตอประสาน I/O แบบขนานทสามารถโปรแกรมไดอกประเภท
หนงทใชงานทวไปกบไมโครโพรเซสเซอรไดหลากหลายรน รปท 9.12 แสดงการจดวางขาของชป
8255A
รปท 9.12 8255A Pin layout (ทมา: Gaonkar, 1992)
ชป 8255A ม I/O ports ดวยกนทงหมด 3 ports (port A, B และ C) แตละ port มขนาด 8 บต
โดยท port C มคณลกษณะพเศษคอ แบงเปน port ยอยขนาด 4 บต จานวน 2 ports คอ port CU และ
CL ดงแสดงในรปท 9.12 ทางขวามอ
Port A และ B ของชป 8255A จะคลายกบ port A และ B ของ Z80 PIO สวน port C ของชป
8255A จะคลายกบบตโหมดของ Z80 PIO
สวนคาอธบายของขาสญญาณตางๆของ 8255A นนแสดงในตารางท 9.4
ขาสญญาณ คาอธบาย
D7 - D0 Data bus แบบ 2 ทศทาง
RESET Reset input
CS Chip select
RD Read input
WR Write input
A1 และ A0 Port address
PA7 - PA0 Port A (bit)
PB7 - PB0 Port B (bit)
96
PC7 - PC0 Port C (bit)
VCC + 5 Volts
GND 0 Volt
ตารางท 9.4 คาอธบายของขาสญญาณของ 8255A
ชป 8255A มโหมดการทางานอยดวยกน 2 โหมดคอ BSR mode และ I/O mode โดยท I/O
mode ยงแบงไดเปน 3 โหมดยอยไดแก โหมด 0 โหมด 1 และ โหมด 2 รายละเอยดของโหมดการ
ทางานทงหมดของ 8255A มดงน (รปท 9.13)
• BSR (Bit Set Reset) mode: ใชเพอกาหนดบต (set/reset) ใน port C
• I/O mode: แบงไดเปน 3 โหมดยอยไดแก
• Mode 0: ports ทงสาม (พอรต A B และ C) ทาหนาทเปน I/O port อยางงาย
• Mode 1: การโอนยายขอมลเปนแบบ handshake สาหรบพอรต A และ B โดยท
ใชบตจากพอรต C เปนสญญาณ handshake
• Mode 2: ใชพอรต A เพอการโอนยายขอมลแบบ 2 ทศทางโดยใชบตจากพอรต
C เปนสญญาณ handshake สวนพอรต B สามารถถกใชในโหมด 0 หรอ 1 กได
รปท 9.13 โหมดการทางานของ 8255A
รปท 9.14 แสดงแผนภาพโครงสรางภายในของ 8255A โดยประกอบดวย port ขนาด 8 บต 2
พอรต (พอรต A และ B) พอรตขนาด 4 บต 2 พอรต (พอรต CU และ CL), Data bus buffer และ control
logic ตางๆ สงเกตจดแบงกลมของพอรต ดวย วามการจดแบง 2 กลมคอ
• Group A ซงประกอบดวยพอรต A (PA7 - PA0) และ CU (PC7 – PC4)
• Group B ซงประกอบดวยพอรต B (PB7 - PB0) และ CL (PC3 – PC0)
97
RD
WR
CS
Group APort A(8 bits)
Group APort CUpper (4 bits)
Group BPort C Lower(4 bits)
Group BPort B(8 bits)
Group AControl
Group BControl
Data Bus Buffer
Read Write
Control Logic
I/OPA7 - PA0
I/OPC7 - PC4
I/OPC3 - PC0
I/OPB7 - PB0
A1
A0
RESET
D7 - D0
Data bus แบบ 2 ทศทาง
รปท 9.14 โครงสรางภายในของ 8255A (ทมา: Gaonkar, 1992)
ขนตอนทสาคญในการตดตอระหวาง MPU กบอปกรณรอบขางผานอปกรณตอประสานท
โปรแกรมไดนน มอยดวยกน 3 ขนตอนดงน
1. กาหนด address ของแตละ I/O port รวมทงของ control register ของอปกรณตอประสาน
นนๆ
2. เขยน control word ทเหมาะสมลงใน control register
3. เขยนคาสง I/O ทเหมาะสม (ขนอยกบประเภทของการตดตอ – อาน/เขยน) เพอตดตอกบ
อปกรณรอบขาง
Control logic
8255A มสญญาณควบคมอยดวยกน 6 สญญาณ ดงน
• RD : ใชในการ enable การอานขอมล คอ เมอ active MPU จะอานขอมลจาก I/O port ท
เลอก
• WR : ใชในการ enable การเขยนขอมล คอ เมอ active MPU จะเขยนขอมลลงใน I/O
port ทเลอกหรอ control register
• CS A1 และ A0: ใชในการเลอกอปกรณ (ตารางท 9.5) โดยท CSจะเปนสญญาณเลอก
ชปหลก สวน A1 และ A0 จะกาหนด I/O port หรอ control register ทตองการ โดยทวไป
98
จะตอ CS เขากบ address ทไดถอดรหสแลว สวน A1 และ A0 จะตอเขากบ 2 บตลาง (A1
และ A0) ของ address จาก MPU ตามลาดบ
CS A1 A0 พอรตทเลอก
0 0 0 พอรต A
0 0 1 พอรต B
0 1 0 พอรต C
0 1 1 Control Register
1 X X 8255A ไมไดถกเลอก
ตารางท 9.5 สรปการเลอก port ของ 8255A
ตวอยางการ decode address ใหกบ 8255
RD
CS
WR
IORD
IOWR
รปท 9.15 วงจรการตอประสาน 8255 กบไมโครโพรเซสเซอร Z80 (ทมา: Gaonkar, 1992)
จากรปท 9.15 จะไดวา
CS
A7 A6 A5 A4 A3 A2 A1 A0
Port A 1 0 0 0 0 0 0 0 =80H
Port B 0 1 =81H
Port C 1 0 =82H
Control register 1 1 =83H
Control Word
คอคาทอยใน control register ของ 8255A การควบคมการทางานของ 8255A ทาไดโดยเขยน
control word ทเหมาะสมตามโหมดการทางาน (รปท 9.16 และ 9.17) ลงใน control register (A1 และ
A0 มคาเปน 1)
99
Mode 0: โหมด I/O อยางงาย
สาหรบในโหมดนแตละพอรตจะทาหนาทเปน I/O port อยางงายๆ โดยไมมการ interrupt
หรอสญญาณ handshake เขามาเกยวของ โดยททงพอรต A และ B จะเปน I/O port ขนาด 8 บต
ในขณะทพอรต CU และ CL จะเปน I/O port ขนาด 4 บต รปท 9.16 แสดงรปแบบของ control word
สาหรบ I/O mode ทงสามโหมด (โหมด 0 1 และ 2)
รปท 9.16 Control word สาหรบ I/O mode ของ 8255A (ทมา: Gaonkar, 1992)
โหมดนมลกษณะเฉพาะดงน
• Output จะคาง
• Input จะไมคาง
• ไมม handshake
ในกรณท Cu และ CL ทางานกนคนละหนาท เชน Cu เปนอนพตสวน CL เปนเอาทพตหรอ
กลบกน การเขยนขอมลไปยงพอรต C น จะทาใหขอมลไปปรากฏในสวนทเปนเอาทพตไมม
ผลกระทบตอสวนทเปนอนพตสวนการอานขอมลจากพอรต C น จะอานขอมลสวนทเปนทง input
และเอาทพตทถกเขยนออกมา
100
BSR mode: โหมด bit set/reset
โหมดนสามารถ set หรอ reset แตละบตของพอรต C ไดดวยการเขยน control word ท
เหมาะสมลงใน control register โดยทรปแบบของ control word สาหรบ BSR mode นแสดงในรปท
9.17
รปท 9.17 Control word สาหรบ BSR mode ของ 8255A (ทมา: Gaonkar, 1992)
Mode 1: Input/Output mode และสญญาณ Handshake
ลกษณะของโหมด 1 เปนดงน พอรต A และ B ทาหนาทเปนไดทงพอรตอนพตหรอเอาทพต
ขนาด 8 บต โดยทแตละพอรตใชสายสญญาณของพอรต C จานวน 3 สายเปนสญญาณ handshake
ในขณะทสายสญญาณอก 2 สายทเหลออาจทาหนาทเปน I/O อยางงายได โดยกอนการถายโอนขอมล
จะมการแลกเปลยนสญญาณ handshake ระหวาง MPU กบอปกรณรอบขาง และขอมลทงทเปน
อนพตและเอาทพตจะคางไวได
ในชป 8255A สายของพอรต C ทใชเปนสญญาณซงกนและกนนน แปรผนสอดคลองกบ
ฟงกชน I/O ของพอรต ดงนน จงตองพจารณาฟงกชน (หนาท) อนพตและเอาทพตในโหมด 1
แยกกนดงน
Mode 1 : สญญาณควบคม input
รปท 9.18 แสดงสญญาณควบคมขณะจดพอรต A และพอรต B เปนพอรตอนพต
101
ASTB
BSTB
RD
รปท 9.18 Mode 1 ของ 8255A (input) (ทมา: Gaonkar, 1992)
พอรต A จะใชสญญาณ 3 สญญาณดานบน คอ PC3 PC4 และ PC5 ในขณะทพอรต B จะใช
สญญาณ PC2 PC1 และ PC0 หนาทของสญญาณเหลาน คอ
(a) STB (Strobe) : สญญาณน (active low) เกดจากอปกรณรอบขางเพอแสดงวาไดสงไบต
ขอมลแลว โดยท ชป 8255A จะสรางสญญาณ IBF และ INTR ในการตอบสนองตอ
STB
(b) IBF (Input Buffer Full) : เปนสญญาณตอบรบโดยทชป 8255A ใชเพอแสดงวาแลตชท
อนพตไดรบไบตขอมล สญญาณนรเซตเมอ MPU อานขอมลนน
(c) INTR (Interrupt Request) : เปนสญญาณเอาทพตซงใชเพอขดจงหวะ MPU สญญาณน
เกดขนเมอ STB IBF และ INTE (flip-flop ภายใน) อยทลอจก 1 ทงหมด สญญาณนร
เซตโดยขอบขาลงของสญญาณ RD
(d) INTE (Interrupt Enable) : เปน flip-flop ภายในซงใชเพอ Enable หรอ Disable การสราง
สญญาณ INTR flip-flop 2 ตว คอ INTEA และ INTEB ไดรบการเซต/รเซตผานโหมด
BSR flip-flop INTEA ไดรบการ Enable/Disable ผาน PC4 สวน flip-flop INTEB ไดรบ
การ Enable/Disable ผาน PC2
102
Mode 1: สญญาณควบคม input
รปท 9.18 แสดงสญญาณควบคมขณะจดพอรต A และพอรต B เปนพอรตเอาทพต
AOBF
BOBF
WR
รปท 9.19 Mode 1 ของ 8255A (output) (ทมา: Gaonkar, 1992)
(i) OBF (Output Buffer Full) : เปนสญญาณเอาทพตซงเปน low เมอ MPU เขยนขอมลลง
ในแลตชทเอาทพตของชป 8255A สญญาณนแสดงแกอปกรณรอบขางทเอาทพตวา
พรอมทจะอานขอมลใหม สญญาณนจะเปน high อกครงหลงจากชป 8255A รบ
สญญาณตอบรบ ACK จากอปกรณรอบขาง
(ii) ACK (Acknowledge) : เปนสญญาณอนพตของชป 8255A จากอปกรณรอบขาง ซงจะ
ไดเอาทพตออกมาเปนคา LOW เมออปกรณรบขอมลจากพอรตของชป 8255A
(iii) INTR (Interrupt Request) : เปนสญญาณเอาทพตซงรเซตโดยขอบขาขนของสญญาณ
ACK เราใชสญญาณนในการขดจงหวะ MPU เพอขอไบตขอมลถดไปสาหรบเอาทพต
INTR นไดรบการเซตเมอ OBF ACK และ INTE เปน 1 ทงหมด โดยขอบขาลงของ
WR จะรเซตสญญาณน
(iv) INTE (Interrupt Enable) : เปนฟลปฟลอปภายในทตอไปยงพอรตใดพอรตหนง เรา
ควบคม flip-flop 2 ตว คอ INTEA และ INTEB โดยใชบต PC6 และ PC2 (ตามลาดบ) ผาน
โหมด BSR
103
(v) PC4 และ PC5 : จดเตรยมสายเหลานเปนอนพตหรอเอาทพตกได
Mode 2: การถายโอนขอมล 2 ทศทาง
โหมดนใชงานไดมากมาย เชน การถายโอนขอมลระหวางไมโครคอมพวเตอร 2 ตว หรอ
การเชอมประสานตวควบคมแผนบนทก โหมดนเปนการจดเตรยมพอรต A เพอถายโอนขอมล 2
ทศทาง และจดเตรยมพอรต B ในโหมด 0 หรอ โหมด 1 ได พอรต A จะใชสญญาณ ของพอรต C
จานวน 5 สญญาณเปนสญญาณควบคมเพอการถายโอนขอมล สญญาณของพอรต C ทเหลออก 3
สญญาณใชเปน I/O อยางงายหรอใชเปนสญญาณซงกนและกนสาหรบพอรต B กได สาหรบรปท
9.19 แสดงโครงสรางทงสองโครงสรางของโหมด 2
PC6
PC7
PC3
PA7-PA0
I/O
AOBF
INTRA
D7 D6 D5 D4 D3 D2 D1 D0
1 1 X X X 0 1 1/0
Control word
PC2-01=input
0=output
(a) 8255 Mode 2 และ Mode 0 (input)
8
AACK
PC4
PC5
RD
ASTB
IBFA
PC2-0
PB7-PB0 8
WR
PC6
PC7
PC3
PA7-PA0
AOBF
INTRA
D7 D6 D5 D4 D3 D2 D1 D0
1 1 X X X 1 0 X
8
AACK
PC4
PC5
RD
ASTB
IBFA
PB7-PB0 8
WR
PC2 BACK
PC0
PC1 BOBFINTRB
(b) 8255 Mode 2 และ Mode 0 (output)
รปท 9.19 Mode 2 ของ 8255A (bidirectional) (ทมา: Gaonkar, 1992)
104
บทท 10 การแปลงสญญาณแอนะลอก-ดจตอลเบองตน
10.1 Digital-to-Analog Conversion (DAC)
อปกรณทางไฟฟา/อเลกทรอนกสโดยทวไปทเปนแอนะลอกสามารถควบคมการทางานโดยการให
อนพตเปนระดบแรงดนทแตกตางกน ตวอยางเชน มอเตอรกระแสตรงซงควบคมความเรวโดยเปลยนระดบ
แรงดน (หรอกระแส) ของขดลวดสนาม
เมอนาระบบดจตอล หรอไมโครคอนโทรลเลอรปมาใชควบคมอปกรณทางแอนะลอกเหลาน จงตอง
มวงจรซงสามารถแปลงสญญาณทางดจตอลเปนระดบแรงดนตอเนองแบบแอนะลอก ตงแต 0V จนถงระดบ
สงสดทกาหนดไว เรยกวาวงจร Digital-to-Analog Converter (DAC)
รปท 10.1 Transfer Curve ในอดมคตของ DAC 3 บต (ทมา: http://www.cpe.ku.ac.th/~yuen/204471/)
รปท 10.1 เปนกราฟแสดงถงความสมพนธระหวางเอาทพตทเปนแอนะลอกกบอนพตทเปนดจตอล
ขนาด 3 บตเรยกวา transfer curve สงเกตวาเมออนพตไบนารเพมขน เอาทพตแอนะลอกจะเพมในลกษณะ
ขนบนได โดยทขนาดของแตละขนจะหาไดจาก
เมอให VFS คอระดบแรงดนเอาทพตสงสด
n คอจานวนบตของอนพต
stepsize = VFS/2n
105
เนองจากเอาทพตของ DAC จะเพมเปนขนๆ รปคลนสญญาณ ทไดจาก DAC จงมลกษณะไมเรยบ ดง
ตวอยาง ในรปท 10.2 ซงแสดงถงสญญาณไซน ทสรางจาก DAC
รปท 10.2 คลนไซนทสรางจาก DAC (ทมา: http://www.cpe.ku.ac.th/~yuen/204471/)
ถาเพมจานวนบต ความละเอยดของ DAC จะเพมขน เชน เมอ ใช DAC 12 บต และ VFS = 5.0 V ความ
ละเอยดคอ 5.0 V / 4096 = 1.22 mV ซงจะ ละเอยดกวา DAC 8 บตถง 16 เทา
ความถกตองของ DAC ขนอยกบหลายสวน
1. Quantization error DAC บต VFS = 5.0 V เอาทพตจะมความละเอยด 19.53 mV ถาตองการเอาทพต
4.00 V DAC จะใหเอาทพตไดใกลเคยง ทสดคอ 4.04 V (19.53 mV x 205) ผดพลาด 4 mV โดยทวไป
คาผดพลาดจะเทากบ +/- 0.5 LSB (least significant bit) ตวอยางเชน DAC 8 บต ความผดพลาดจะ
เปน 1 ใน 512 หรอ +/- 0.195 %
2. Offset and gain errors เมออนพตไบนารเทากบ 0 แตเอาทพตของ DAC ไมเปน 0 เรยก วา offset
error และอาจเกดรวมกบ gain error ความผดพลาดเหลา นจะทาให tranfer curve ในรปท 10.1 โคง
ขนหรอลงจะขนอยกบความไมสมดลยภายใน DAC อยางไรกตาม offset error และ gain error จะแก
ไดโดยใชความตาน ทานปรบคาไดตอไวภายนอก
3. Nonlinearity คอคาความคลาดเคลอนสงสดของ transfer curve เทยบกบเสนตรงจากจดศนยและ
จดสงสด ซงจะขนอยกบความผดพลาดของสวนประกอบภายใน DAC ใน data sheet ของ DAC จะ
ระบเปนเปอรเซนตเทยบกบคาสงสด หรอ ระบเปนเศษสวนของ LSB (โดยทวไปคอ +/- 0.5 LSB)
4. Settling time คอชวงเวลานบแตใหอนพตจนกระทง DAC ใหเอาทพต วดเมอเอาทพตทไดผดพลาด
จากคาจรง นอยกวา 0.5 LSB คาเวลานอาจนอยกวา 100 ns สาหรบ DAC ความเรวสง และอาจ
มากกวา 100 µs สาหรบ DAC ราคาถก
106
Summed Source DAC
รปท10.3 Summed Source DAC (ทมา: http://www.cpe.ku.ac.th/~yuen/204471/)
รปท 10.3 แสดงถงวงจร Summed Source DAC ซงเปนวงจรอยางงายในการแปลงสญญาณดจตอล
เปนแอนะลอก โดยความตานทานมคาเปน 2R 4R และ 8R เพอทาใหกระแสทผานความตานทานแตละตวมคา
ลดลงเปน 2 เทา ความตานทานตวลางสด (2R) จะ เปน MSB สวนตวบนสดจะเปน LSB
ขอเสยของการใชวงจรลกษณะน ในทางปฏบต คาความตานทานทตางกนเปน 2 เทา คอ 2R 4R 8R …
จะ ไมสามารถหาไดงาย จงมการปรบปรงเปน วงจร R-2R
Switched Voltage R-2R DAC
รปท 10.4 Swiched Voltage R-2R DAC (ทมา: http://www.cpe.ku.ac.th/~yuen/204471/)
รปท 10.4 เปน DAC 3 บต ใชออปแอมปและความตานทาน เพยง 2 คาคอ R และ 2R สงเกตวาอนพต
ดจตอลจะมาจากสวตชทง 3 ซงอาจตอกบกราวด (ลอจก 0) หรอตอกบ VREF (ลอจก 1) ตวอยางนอนพตเปน
001
พจารณากระแส I เมอผานจด A จะถกแบงเปนสองสวนเทาๆ กน เหลอ I/2 เมอผานจด B และ C จะ
ถกแบงอกครง เหลอ I/4 และ I/8 ตามลาดบ ดงนนกระแสทปอนใหกบออปแอมปจะเหลอ I/8 เมอพจารณาท
สวตชตวอนๆ กจะมลกษณะคลายกน ดงนนกระแสทผานออปแอมปเมอปดสวตชอนนบจากซายไปขวา จะม
ขนาด I/8 I/4 และ I/2 ตามลาดบ สวตชซายสดจะเปน LSB สวนขวาสดจะเปน MSB
107
Switched Current R-2R DAC
รปท 10.5 Swiched Current R-2R DAC (ทมา: http://www.cpe.ku.ac.th/~yuen/204471/)
วงจรนเปลยนจากการใชแรงดนอางอง (VREF) มาเปนกระแสอางอง (IR) กระแสท ผานสวตชแตละตว
จากขวาไปซายจะเปน IR/2, IR/4 และ IR/8 ตามลาดบ วงจรลกษณะนจะมความเรวสงกวาวงจร Switched
Voltage เนองจากคาปาซแตนซทรอยตอ (junction capacitance) ของความตานทานแตละตวจะไมถกชารจและ
ดสชารจเหมอนวงจร Switched Voltage
Switched Pole DAC
รปท 10.6 Swiched Pole DAC (ทมา: http://www.cpe.ku.ac.th/~yuen/204471/)
108
จะมการใชความตานทานตออนกรมกนหลายตว เนองจากวงจรนตองการความตานทานคาเทาๆ กน
ดงนนจงเปนทนยมสาหรบผผลต Integrated Circuit สงเกตวาจะมความตานทานทปลายทงสองของอนกรม
เพอปรบ offset ของเอาทพต
10.2 Analog-to-Digital Conversion (ADC)
สญญาณทใชในอปกรณอเลกทรอนกส ฃม 2 ชนด คอ สญญาณแอนะลอกและสญญาณดจตอล โดยท
สญญาณแอนะลอกจะใชในอปกรณทวๆ ไปและใชในการควบคมแบบเกา
ในปจจบนมไมโครโพรเซสเซอรและไมโครคอนโทรลเลอรเขามาชวยในการควบคมอปกรณตางๆ
มากมาย ซงทาใหการควบคมนนทาไดงายและรวดเรวยงขน แตในการควบคมนนเราจาเปนตองใชสญญาณ
ดจตอลในการตดตอกบไมโครโพรเซสเซอรหรอไมโครคอนโทรลเลอร แตในความเปนจรงนนเราใช
สญญาณแอนะลอกในการควบคม ดงนนเราจงจาเปนตองมการเปลยนสญญาณแอนะลอกเปนสญญาณดจตอล
แลวจงนาสญญาณนนเขามาสไมโครโพรเซสเซอรหรอไมโครคอนโทรลเลอรเพอใชควบคมระบบตอไป
แมวาสญญาณแอนะลอกนนมความแนนอนและแมนยาสง แตสญญาณแอนะลอกนนกควบคมไดยาก
เนองจากในสภาพแวดลอมมสญญาณรบกวนอยมาก และการทจะทาใหการควบคมแบบแอนะลอก ม
ความสามารถควบคม เทากบการควบคมแบบดจตอลนนทาไดยาก เนองจากวงจรควบคมแบบแอนะลอก
จะตองมความซบซอนสง
อยางไรกตาม สญญาณดจตอลกไมสามารถทดแทนความละเอยดของสญญาณแอนะลอกไดอยาง
สมบรณ แตทาใหการควบคมนนทาใหงาย และสะดวกยงขน
อนพตจะถกแบงเปนหลายระดบ แตละระดบตางกน 1 quantum (Q) จดกงกลางของแตละระดบ
เรยกวา threshold ถาอนพตเปลยนอยในชวง ±½ LSB จาก threshold จะไมทาให digital output เปลยน ดงนน
ADC จะม inherent quantization uncertainty ขนาด ±½ LSB เสมอ (ไมวาจะเพมจานวน bit เปนเทาใดกตาม)
Digital Ramp ADC
รปท 10.7 แสดงถงลกษณะการทางานของ Digital Ramp ADC ซงเปนวธทงายทสดของการแปลง
สญญาณแอนะลอกใหเปนสญญาณดจตอล โดยใชอลกอรทม การนบคาเพมขนเรอยๆ แลวนาผลทไดจากการ
นบไปเปรยบเทยบกบคาทตองการทตงไว
จากวงจร Counter เปนอปกรณนบคาทเพมขนทละหนง แลวสงคาทไดให D/A มขา Reset รบสญญาณ
Reset เมอตองการใหเรมนบใหม
D/A เมอรบคาทนบเพมขนทละหนงจากตวนบ กแปลงคาใหเปนสญญาณ แอนะลอกทมคาความตาง
ศกยคาๆ หนง แลวสงตอเขาไปทอปกรณตวเปรยบเทยบ (Comparator)
109
รปท 10.7 Digital Ramp ADC (ทมา: http://hyperphysics.phy-astr.gsu.edu/hbase/hframe.html )
Comparator จะเปนอปกรณตวเปรยบเทยบคาความตางศกย ของอนพต และคาจากทตวนบ ถาหากทง
สองสญญาณมคาเทากนสงคาความตางศกย 0 โวลตออกมา(ลอจก 0) ถาไมเทากนกจะสงความตางศกยทไมใช
0 โวลตออกมา(ลอจก 1) ซงคาความตางศกยทออกมา จะนามาเขาลอจกเกต "และ" กบสญญาณนาฬกา จะได
คาลอจกออกมา ถาผลลพธออกมาเปนสญญาณนาฬกาแสดงวายงไมไดผลลพธเทาทตองการสญญาณนาฬกาก
จะไปทาใหตวนบนบเพมขนตอไป และเมอไดคาผลลพธดจตอลทตองการแลวคาทไดจากตวเปรยบเทยบจะ
ใหคาความตางศกยเปน 0 (ลอจก 0) ซงเมอนามาเขาลอจกเกต "AND" กบสญญาณนาฬกาแลว กจะใหลอจก 0
ซงทาใหตวนบไมนบเพมอก กจะไดคาดจตอลจากตวนบทตองการ
ขอเสยของวธนคอ การนบตองเรมนบท 0 เสมอ และนบเพมขนเรอยๆ ทาใหชา เอาทพตทไดจะม delay
จงไมคอยนยมใชเทาทควร จงไดเปลยนตวนบเปนแบบนบลงไดดวย ซงจะอางองระดบจากระดบเกา ทาใหไม
จาเปนตองนบ 0 ใหมเมอมการเปลยนอนพตใหมแตใหอางองกบผลลพธเดม ทาใหไดผลลพธเรวขน
Successive Approximation ADC
รปท 10.8 4-bit Successive ADC (SAC) with 1 volt step size
(ทมา: http://hyperphysics.phy-astr.gsu.edu/hbase/hframe.html)
110
วธ Successive approximation ADC (SAC) ใชหลกการของ "binary search" ในการหาคาตอบ โดยนา
คาผลลพธมาเปรยบเทยบกบคากงกลางของชวง เพอใหทราบวาคานนๆ มากกวาหรอนอยกวา โดยจะปรบชวง
ใหแคบลงมาเรอยๆ แลวเปรยบเทยบผลลพธกบคากงกลางของชวงไปเรอยๆ จนไดผลลพธทตองการ เชน
เลขทเปนคาตอบคอ 3 จากชวงของคาตอบท 0-7 ครงแรกเอาคา (0+7)/2 = 4 มาเปรยบเทยบ ไดผลวา คาตอบ
ทตองการอยในชวงทนอยกวา 4 ครงท 2 กเลอกคา (0+4)/2 = 2 มาเปรยบเทยบ ไดผลวาคาตอบทตองการอย
ในชวงทมากกวา 2 แตนอยกวา 4 ครงท 3 กเลอกคา (2+4)/2 = 3 มาเปรยบเทยบ ไดผลวาคาตอบทตองการ
ขนตอนของการเปรยบเทยบทใชในวธ SAC นแสดงในรปท 10.9
รปท 10.9 ขนตอนของการเปรยบเทยบของวธ SAC
(ทมา: http://hyperphysics.phy-astr.gsu.edu/hbase/hframe.html)
Converter Error
• Offset error
• Gain error
• Linearity error
• Differential linearity error
111
Converter Resolution
• หมายถง การเปลยนแปลงทาง analog ททาให ADC output เปลยนไป 1 ระดบ
• บอกเปน %FS, mV ของ input range, จานวน bit ของ converter
Converter Accuracy
• หมายถงความแตกตางระหวาง input voltage กบเอาทพตทไดมาเมอเทยบกลบมาเปนคาทาง input ซง
จะรวมผลของ error ทกอยาง
• อาจบอกเปนจานวน voltage หรอ จานวน LSB
Conversion Time และ Converter Throughput Rate
• ADC ใชเวลาในการแปลงจากสญญาณแอนะลอกเปนสญญาณดจตอลซงเรยกวา conversion time (tc)
• ADC จะมวงจร S/H (sample and hold circuit) โดยทวไปจะไมตอ analog input เขากบ ADC โดยตรง
โยไมมวงจร S/H เนองจากถาทาเชนนน สญญาณ analog input จะเปลยนเรวเกนกวา ½ LSB ไมได ถา
เปลยนเรวเกนกวานจะทาใหการแปลงสญญาณเกดความผดพลาด ดงนนการตอ input เขากบ ADC
โดยตรงไดนน input จะตองเปน input ทชามากๆ เกนกวาจะนาไปใชประโยชนได
• สวน Converter Throughput Rate มคาเทากบ 1/tc
Converter Input และ Output
สญญาณ analog input: ADCโดยทวไปจะรบแรงดนแบบ unipolar จงจาเปนทจะตองแปลงสญญาณ analog
input ทมคาเปนทง + และ – ใหเปน + อยางเดยว โดยอาจใชวงจร op-amp ชวย
Interfacing ADC to ระบบไมโครโพรเซสเซอร
มอยดวยกนหลายแบบ เชน
1. Most-recent-data scheme
• ADC ทางานไมหยด และ update ขอมลใน buffer
• ไมโครโพรเซสเซอรอาน buffer เมอตองการ
2. Start-and-wait scheme
• เมอตองการขอมลไมโครโพรเซสเซอรจะสง ADC
3. Using microprocessor interrupt
• ADC จะเรมทางานโดยคาสงจากไมโครโพรเซสเซอรหรอ clock
• เมอ ADC ทางานเสรจ จะเกด interrupt ใหไมโครโพรเซสเซอรนาขอมลไป
• วธนไมโครโพรเซสเซอรจะไมตองเสยเวลาคอย
• การจดการ interrupt มทงแบบ polling และแบบ vectored
Interface Software
วธการสงผานขอมลจาก ADC มายงไมโครโพรเซสเซอรม 3 วธ คอ
112
1. Memory-mapped transfer – ม address lines ทจะตอง decode มาก
2. I/O-mapped transfer – ม address lines ทจะตอง decode นอยกวา
3. DMA (Direct Memory Access) – ADC สงขอมลเขาเกบใน memory โดยตรง โดยม DMA controller
เปนตวควบคม ในชวงนไมโครโพรเซสเซอรจะหยดการ access ไปยง memory ในสวนท DMA ใชอย
113
บทท 11 การสงขอมลผาน Parallel Printer Port ของ PC
พอรตขนาน (Parallel Port) หรอทมกเรยกวา LPT Port สามารถรบ/สงขอมลในลกษณะ
Parallel ได ซงทาใหสงขอมลไดทละมากๆ สวนใหญแลวจะพบวาเครองพรนเตอรเกอบทกรนจะมใช
พอรตดงกลาวน นอกจากเครองพรนเตอรแลวกยงมอปกรณอกหลายประเภทดวยกนทใชพอรตขนาน
อยางเชน สแกนเนอร ฮารดดสกแบบตดตงภายนอก Zip ไดรฟ และ Tapeไดรฟ เปนตน
เมอเครองพซมการสงขอมลไปยงเครองพรนเตอร หรออปกรณชนดอน ทใชพอรตขนาน
จะสงไดครงละ 8 บต (1ไบต) โดยขอมลทง 8 บตน จะถกสงไปแบบขนานกนไป เหมอนการเดนเรยง
แถวแบบหนากระดานตรงขามกบการทางานของพอรตอนกรม (Serial Port) ทจะสงขอมล 8 บต โดย
นาแตละบตมาเรยงตอกนเปนแถวตอน แลวสงไปเปนชด มาตรฐานของพอรตขนานสามารถสงขอมล
ได 50-100 กโลไบตตอวนาท
Parallel Ports ของ PC มจดประสงคหลกในการออกแบบคอ เพอเชอมตอ printer เขากบ PC
ได ไมไดใชในการรบสงขอมลธรรมดาทวไป ดงนน ในการดดแปลงให parallel port สามารถรบสง
ขอมลธรรมดา จาเปนตองศกษารายละเอยดใหเขาใจ เพอจะไมไดเกดความเสยหายกบ parallel ports
ใน PC โดยทวไป จะม parallel ports อยแลวอยางนอย 1 พอรต คอ LPT1 ซงประกอบไปดวย
I/O ports 3 พอรต ซงจะมหนาทเปนอนพตหรอเอาทพตตางกนออกไป นอกจากน ระดบแรงดนของ
logic 1 ของพอรตหนงอาจจะมระดบแรงดนตรงกนขามกบอกพอรตหนง ซงทางานรวมใน LPT1
เดยวกนน ตารางท 11.1 แสดงตาแหนงและหนาทของพอรตใน LPT1
ตาแหนงของพอรต หนาทการทางานของพอรต
0x378 8-bit data port (output port ทเขยนขอมลออกไปได และอานขอมลทเขยนออกไปกลบมาได
แตตอวงจรใหรบอนพตอนไมได เพราะอาจทาใหพอรตเสยหาย)
0x379 5-bit status port (input port ทอานขอมลไดอยางเดยว)
0x37a 4-bit control port (เปนเอาทพตหรออนพตกได วงจรทางดานเอาทพตเปนแบบ open-
collector ดงนนถาจะใหพอรตทางานเปนอนพตจะตองเขยนขอมล เพอให output transistor
อยในสภาวะ off เสยกอน จงตอกบอนพตได อยาตอกบสญญาณอนพตถาไมแนใจวา output
transistor อยในสภาวะ off หรอไม ยกเวนถาแนใจวา สญญาณอนพตไดมาจากวงจรทม
เอาทพตเปนแบบ open collector)
ตารางท 11.1 ตาแหนงและหนาทของ ports ของ LPT1
ความยาวของสายไฟทตอออกจาก connector แบบ 25 ขา ไมควรเกน 75 ซม. เนองจากเปน
การสงสญญาณ TTL ทมความเรวคอนขางสง ถาความยาวของสายมากเกนไป อาจมปญหาการ
รบกวนในการสงสญญาณผานสายได
114
หวขอท 11.1 ถง 11.3 จะกลาวถงพอรตยอยทงสามของ LPT1 ตลอดจนแสดงถง
ความสมพนธของตาแหนงบตของขอมลสมพนธกบตาแหนงของขาของ connector แบบ 25 ขา
รวมทงคา logic สาหรบการเขยนและอาน
11.1 8-bit Data Port (0x378)
• ใชเปนเอาทพตไดอยางเดยว
• ไมไดสรางใหรบอนพต แตถกสรางใหอานขอมลทเขยนออกไปกลบมาได
• 5V = logic 1 และ 0V = logic 0
Bit ระดบแรงดนเมอเขยน logic 1 ระดบแรงดนเมออาน logic 1 ตาแหนงขา
0 High High 2
1 High High 3
2 High High 4
3 High High 5
4 High High 6
5 High High 7
6 High High 8
7 High High 9
ตารางท 11.2 ขอมลรายละเอยดของพอรต 0x378 (8-bit output)
11.2 5-bit Status Port (0x379)
• ใชเปนอนพตไดอยางเดยว
Bit ระดบแรงดนเมออาน logic 1 ตาแหนงขา
0 NOT USED
1 NOT USED
2 NOT USED
3 High 15
4 High 13
5 High 12
6 High 10
7 Low 11
ตารางท 11.3 ขอมลรายละเอยดของพอรต 0x379 (5-bit input)
115
11.3 4-bit Control Port (0x37A)
• ใชเปนอนพตหรอเอาทพตได
• ถาใชเปนอนพตตองเขยน logic ออกมาให output transistor ของ 7406 OFF เสยกอน จงจะ
รบอนพตได
Bit ระดบแรงดนเมอเขยน logic 1 ระดบแรงดนเมออาน logic 1 ตาแหนงขา
0 Low Low 1
1 Low Low 14
2 High High 16
3 Low Low 17
4 ENABLE IRQ 7 ENABLED IRQ 7 BIT
5 NOT USED
6 NOT USED
7 NOT USED
ตารางท 11.4 ขอมลรายละเอยดของพอรต 0x37a (4-bit input/output)
11.4 Ground Signals
• สาย ground มตาแหนงอยทขา 18-25
• Protective ground ไมควรตอเขากบ ground signals
11.5 การเขยนโปรแกรมภาษา C รบสงขอมลกบ I/O Ports
การรบสงขอมลกบ I/O ports ในภาษา C ทาไดหลายวธ มทงแบบ 8-bit และ 16-bit และเปน
function calls หรอ macro กได ในการทดลองนเราจะเลอกใช macro รบสงขอมลขนาด 8-bit ตาราง
ท 11.5 แสดงชอ macro ทสามารถใชในการรบสงขอมลผาน parallel port ในภาษา C (สาหรบ
โปรแกรมในภาษาอน กสามารถเขยนใหรบสงขอมลกบ ports ไดเชนกน)
การเรยกใช macro หนาท
unsigned char inportb(int portid); อานขอมลแบบ byte จากพอรตในตาแหนง portid void outportb(int portid, unsigned
char value); เขยนขอมล value ไปทพอรตในตาแหนง portid
ตารางท 11.5 Macro ทใชในการรบสงขอมลกบพอรต (ตองม #include <dos.h> ดวย)
ตวอยางเชน outportb (int port_id, unsigned char udata);
udata = inportb (int port_id);
116
ถาเราใช inportb หรอ outportb โดยไมม #include <dos.h> จะทาให Turbo C Compiler ใช
function calls แทนทจะเปน macro
Bitwise operation Operator ตวอยางการใช
OR | เชน data | 0x80
AND & เชน data &0xFE
XOR ^ เชน data^11
NOT ~ เชน ~data
11.6 ความเรวของการรบ/สงขอมลผาน Parallel Printer Port
• ไมแนนอน ขนอยกบความเรวของ CPU
• การทางานของ PC จะม timer interrupt ประมาณ 18.28 ครงใน 1 วนาท สามารถรบกวนการ
รบ/สงขอมลได
• ระยะสายไมควรเกน 70 ซม. โดยประมาณ
• ถาคอมพวเตอรเปนแบบ plugNplay ตอง set ให parallel port ทางานแบบธรรมชาต
117
บทท 12 การสงขอมลผาน Serial Port ของ PC
12.1 Serial Interfacing
การเชอมตอระบบไมโครคอมพวเตอรกบอปกรณภายนอกสวนใหญจะใชการตอประสานแบบ
ขนาน (parallel tranmisson) กบแบบอนกรม (serial transmission) สาหรบการตอประสานแบบอนกรมนยม
ใชกนมาก เชน การเคลอนยายกนระหวางไมโครคอมพวเตอร หรอ อปกรณเสรมตางๆ เชน mouse เปนตน
การตอประสานแบบอนกรมใชในการสงและรบขอมลระยะไกล โดยสงผานสายสญญาณ 1 เสน
แทนทจะเปน 8 เสนเหมอนการสงผาน parallel port
รปท 12.1 parallel vs serial interfacing
วธการถายโอนขอมล
ในการถายโอนขอมลแบบอนกรมนน ขอมลจะไดรบการสงออกมาครงละ 1 บตระหวางจดรบและ
จดสง จะเหนวามการสงขอมลแบบอนกรมนจะชากวาการสงขอมลแบบขนาน แตยงคงใชอยกเพราะ ตวก
ลางการสอสารตองการชองเดยวหรอมสายเพยงคเดยวซงจะประหยดคาใชจาย ในการใชตวกลางมากกวา
แบบขนานซงถาเปนระยะทางไกลจะดเพราะเรามระบบการสอสารทางโทรศพท อยแลว จงสามารถนามาใช
ในการสงขอมลแบบอนกรมนได
รปท 12.2 การสงขอมลแบบอนกรม
118
การสงขอมลแบบอนกรม ขอมลจะถกเปลยนใหเปนแบบอนกรมเสยกอนแลวคอยทยอยสงครงละ
1 บต ไปยงทจะรบ ณ จดรบจะตองมกลไกในการเปลยนขอมลทสงมาครงละบตใหเปนสญญาณแบบขนาน
ซงลงตวพอด นนคอ บตท 1 ลงทบสขอมลเสนท1พอดการทจะทาใหการแปลงสญญาณจากแบบอนกรม
ครงละบตใหลงพอดนน จาเปนตองมกลไกทเหมาะสมเพอปองกนการผดพลาดจากการรบกลไกทวาแบง
ออกเปน 2 แบบ คอ แบบซงโครนส (synchronous) และแบบอะซงโครนส (asynchronous)
รปแบบของการตดตอสอสารแบบอนกรม
การตดตอแบบอนกรมอาจจะแบงตามรปลกษณะการสงขอมลได 3 แบบคอ
1. แบบซมเพลก (simplex) เปนการสงขอมลไดทางเดยวเทานน บางครงเรยกวา การสงทศทางเดยว
2. แบบฮาลฟดเพลกซ (half duplex) ทง 2 สถานสามารถรบและสงไดแต ณ เวลาตางกน
3. แบบฟลดเพลกซ (full duplex) ทง 2 สถานสามารถรบและสงไดในเวลาเดยวกน
รปท 12.3 รปแบบของการตดตอสอสารแบบอนกรม
ความเรวในการสงถายโอนขอมลแบบอนกรม
ความเรวของการถายโอนขอมลแบบอนกรมมหนวยวดเปน บตตอวนาท (bit per second: bps) แต
เรายงมหนวยทนยมใชกนมากคอ อตราโบด (baud rate) ซงหมายถง การเปลยนแปลงของสญญาณใน 1
วนาท หลายคนยงเขาใจสบสนระหวางหนวยบพเอส กบอตราโบด กลาวคอ การเปลยนแปลงของสญญาณ
ของสญญาณ 1 ครงอาจจะแสดงถง การสงขอมลแบบอนกรมมากกวา 1 บต อตราการสงขอมลเปนจานวน
บตจงเทากบ อตราโบดคณกบจานวนบตใน 1 โบด
119
การสอสารแบบอะซงโครนส
การสอสารแบบนประกอบดวยบตเรมตน (start bit) และบตสนสด (stop bit)
รปท 12.4 stop และ stop bits ของการสอสารแบบอะซงโครนส
ขณะทสถานะของการสงเปนแบบวาง (idle) คอยงไมมสญญาณทสงออกมาแตจะมสญญาณ หรอม
แรงดนตลอดเวลาเพอความแนใจวาฝายรบยงตดตออยกบฝายสงฝายสงจะเรมสงขอมลบอกจดเรมตน
สญญาณของอะซงโครนสจะเปน "0" หนงชวงสญญาณนาฬกา บตนเรยกวาบตสตารต ขอมล 1 ตวอกษรท
ตามหลงบตสตารตจะมขนาดตงแต 5 บต จนถง 8 บต โดยอกขระนสวนมากจะนยมใชรหสแอสก
แรกเรมทเดยวของการสงขอมล จะสงขอมลจะสงรหสโบดอด (Baudot code) ซงใช 5 บตในการ
แทนอกขระ 1 ตว สวนทตามหลงขอมลกจะเปนบตพารต ซงจะอาจจะใชหรอไมใชกไดบตพารตจะทา
หนาทเปนตวตรวจสอบ ความถกตองของสญญาณทไดรบ บตพารตอาจจะเปนแบบค (even) หรอแบบค
(odd) กได หมายความวา ถาหากเปนพารตค จานวนบตทเปน "1" ในชวงบตขอมลกบบตพารตรวมกนแลว
ตองเปนเลขคผสงขอมล จะทาหนาทตรวจสอบขอมลแลวใสบตพารตเอง
ฝายรบเมอรบสญญาณแลวกจะตองตรวจสอบดวาเปนจรงดงสถานการณทตงไวหรอไม หาก
ผดพลาดกหมายความวาสญญาณทรบนนผดพลาดไปจากสถานทสงออกมาทงนทงนนจะตองผดเปน
จานวนคเทานนคอ ผดไป 1 บต 3 บต หรอ 5 บตพรอมกน จงจะตรวจสอบไดวาผดเปนจานวนคผลรวมของ
จานวนบตทเปน "1" กยงเปนคอยด
ทงนทงนนไมไดหมายความวาพารตจะตรวจสอบการผดพลาดเปนจานวนคไดความจรงแลว
สามารถตรวจสอบความผดพลาด ไดเหมอนพารตคแตแทนทจะตรวจสอบดวาสญญาณ ทรบเขามามจานวน
ค กตรวจสอบดวามจานวนคหรอเปลา อยางไรกตาม โอกาสทจะผดพลาดเปน 2 4 6 หรอ 8 บตพรอมกนม
นอยมาก
ยอนกลบมาดสญญาณอะซงโครนสใหม หลงจากบตพารตแลวจะตองมบตสตอปซงเปน "1" ความ
กวาง ของบตสตอปอาจจะเปน 1 1.5 หรอ 2 พลสของสญญาณนาฬกา ซงแลวแตผรบและผสงจะตกลงใช
กนเอง
การเรมใชพอรตอนกรมจงจาเปนตองตงคาตางๆสาหรบการสอสาร ซงมดงตอไปน คอ
1. ความเรวของการสง
2. ความยาวของรหส 1 อกขระ
120
3. บตตรวจสอบ
4. จานวนบตสตอป
การสอสารแบบซงโครนส
ขอแตกตางระหวางวงจรการสงขอมลอนกรมแบบซงโครนสและแบบอะซงโครนสกคอ ความ
ตอเนองของขอมลทสงในแบบซงโครนส ขอมลทสงออกมาเปนแบบตอเนอง ไมมบตสตารตหรอบตสตอป
หรอแมกระทงบตพารตรปแบบทใชในการสงขอมลแบบซงโครนสจงแตกตางไปจากการสงขอมล แบบอะ
ซงโครนส เชน รปแบบของบรษทไอบเอม ใชรปแบบไบซงก (binary synchronous transmission)
การซงโครไนซจะทาในระดบอกขระซงหมายความวาอกขระแตละตวมขอบเขตทแนนอนแตละ
อกขระ ไมมบตสตารต หรอบตสตอปเหมอนอะซงโครนส การซงโครนสจะกระทาทจดเรมตนของการสง
ขอมล สถานสงจะสงสญญาณทเรยกวา ตวอกษรนา (leading pad character)ไปยงสถานรบกอนทจะเรมสง
ขอมล ตวอกษรนาจะประกอบดวย "0" และ "1" สลบกน เพอใหสถานรบจดสญญาณนาฬกาใหตรงกนกอน
สง ขอมลกจะมการสงอกขระทเรยกวา syn ตามหลงตวอกษรนาออกมาสถานสงจาเปนจะบอกความยาว
ของขอมลมาในกลมน และตองบอกเครองหมายทเปนตวบอกจดเรมตนของขอมลดวย
ระยะเวลาและอตราการสงขอมล
รปท 12.5 การสงขอมลทมขนาด 8บตจากระบบไมโครโพรเซสเซอรสงออกทชองสอสาร แบบอนกรม
ในการสงขอมลแบบอนกรมมสงทสาคญทจะตองพจารณาคอ ความเรวของขอมลในการสงซงเรา
เรยกวา อตราบต (bit rate) ตามทกลาวมา และกรณทใหอตราการเปลยนแปลงของสญญาณ 1 ครงตอขอมล
1 บต จะไดอตราบตเทากบอตราโบด
บตสตารตและบตสตอป
การรบสงขอมลแบบอะซงโครนสจะตองมการบอกจดเรมตนและจดสนสดของเฟรม (frame)
ขอมลเสมอ โดยปกตจะใหสภาวะไอเดลเหมอนเชนบตสตอป ดงนนสวนของบตสตารตจะตรงขามกบไอ
121
เดล โดยทวไปของการสงขอมลจะใช 1 บตทเปนลอจก "0" เปนตวบอกบตสตารต สวนบตสตอปจะยาวกวา
ทกาหนดกไดกอนทจะเรมตนเฟรมใหม
รปท 12.6 การบอกบตสตารต
มาตรฐาน ระยะทางทสงได ความเรวท
สงได
แรงดนสาหรบ
logic “1”
แรงดนสาหรบ
logic “0”
RS-232 50 ฟต หรอ 17 เมตร 20 Kbps +5V ถง +15V -5V ถง -15V
RS-422 4,000 ฟต หรอ 1.3 กโลเมตร 10 Mbps +2V ถง +6V -2V ถง -6V
RS-423 40 ฟต หรอ 13 เมตร 100 Kbps +4V ถง +6V -4V ถง -6V
ตารางท 12.1 มาตรฐานของการสอสารแบบอนกรม
ระยะทางไกลขน ความเรวทสงตองชาลงเพอไมใหเกดความผดพลาดในขอมลทรบสงกน เชนถาจะ
สงขอมลผาน RS-422 เปนระยะทางถงระยะทางสงสดทสงได (1.3 กโลเมตร) จะทาใหความเรวทสงไดไม
ถงความเรวสงสดทสงไดคอ สามารถสงดวยความเรวไมถง 10 Mbps
รปท 12.7 ตวอยางการตอ remote terminal กบ computer โดยผาน modem
DTE = Data Terminal Equipment (คอ terminal หรอ computer)
DCE = Data Communication Equipment (คอ modem)
รปท 12.7 การตอระหวาง DTE และ DCE
122
12.2 Handshaking
ทาใหการตดตอสอสารทาไดอยางถกตองและมประสทธภาพ หลกเลยงปญหาขอมลสญหายได
(เนองจากอปกรณรบและอปกรณสงไมรกน)
RTS = Request To Send
CTS = Clear To Send
TxD = Transmitted Data
SG = Signal Ground
DSD = Data Set Ready
DTR = Data Terminal Ready
DCD = Received line signal detector
RI = Ring Indicator
เครองหมาย – หมายถง active low (-5V ถง -15 V ทางดานสง)
+ หมายถง active high (+5V ถง +15 V ทางดานสง)
12.3 Asynchronous Techniques
Asynchronous serial communication หมายถง การสงขอมลทละ 1 character (1 byte)
Synchronous serial communication หมายถง การสงขอมลทละ 1 block (หลายๆ 1 byte)
รปท 12.8 การสงขอมลขนาด 8 บตโดยใชเทคนคอะซงโครนส
รปท 12.8 แสดงถงการสงขอมลขนาด 8 บตโดยใชเทคนคอะซงโครนส โดยท
• T0 – start
• T1 – start bit double check
• T2 - T9 – ขอมลขนาด 8 บต
• T10 – parity bit (ในรปของ odd parity: จานวนบตของขอมลทเปน 1 รวมทง parity bit
รวมกนแลวตองเปนเลขค)
• T11 – stop bit
123
Clock เปนปจจยหลกของ serial communication เงอนไขขอเดยวของ clock ใน asynchronous
technique คอ clock ของตวรบตวสงจะตองใกลเคยงกนมาก โดยทวไปจะใช clock ทมความถเปน integer
multiple ของ transmitter bit rate (16 เทา - ใชกนมากทสด)
IC ทใชใน serial communication เรยกวา universal asynchronous receiver transmitter (UART)
เชน เบอร 8250UART
12.4 Decoding Serial Bit Streams and Error Detection
UART มความสามารถในการ detect error ได 3 แบบคอ
1. Parity error: MSB เกบคาททาใหจานวนเลข “1” นนมจานวนค (even) หรอค (odd)
2. Overrun error: ไปเซต overrun error flag ใน statua register เมอไมโครโพรเซสเซอรไปแนคา
ขอมลทไดรบจาก data bus buffer ไมทนกอนทคาใหมจะเขามา ซงการทางานทถกตองนนไม
โครโพรเซสเซอรตองไปอานคาใน status register กอนอานคาขอมลทไดรบ
3. Framing error: ถกเซตเมอ receiver ไดรบ 0 แทนทจะเปน 1 สาหรบ stop bit(s)
ในทางปฏบตเราอาจจะไมสนใจ error เหลานกได แตใชซอฟตแวรในการตรวจ error จากขอมลท
รบมาแทน วธการทนยมคอ
• Checksum
• Longtitudinal Redundancy Check (LRC)
• Cyclic Redundancy Check (CRC)
การตอระหวาง PC (DTE) เขากบ modem (DCE) โดยมการใชสญญาณ handshaking
(ทมา: Tompkins, 1988)
124
การตอระหวาง PC (DTE) เขากบ modem (DCE) โดยไมมการใชสญญาณ handshaking
(ทมา: Tompkins, 1988)
การตอระหวาง DTE เขากบ DTE โดยตรงโดยไมมการใชสญญาณ handshaking
(ทมา: Tompkins, 1988)
125
การตอระหวาง DTE เขากบ DTE โดยตรงโดยมการใชสญญาณ handshaking
(ทมา: Tompkins, 1988)
การตรวจสอบ UART มกจะตอสาย connector เพอใหเกด loop back ดงน
TxD (2)
DTR (20)
DCD (8)
DSR (6)
CTS (5)
RTS (4)
RxD (3)
(ทมา: Tompkins, 1988)
126
เอกสารอางอง
• The Z80 Microprocessor: Architecture, Interfacing, Programming and Design,
Ramesh Gaonkar, Merrill Publishing Company, 1992.
• Interfacing Sensors to the IBM PC, Willis J. Tompkins และ John G. Webster, Prentice
Hall, 1988.
• Digital Systems, Ronald J. Tocci, 5th Edition, Prentice-Hall, 1991.
• ไมโครโพรเซสเซอร (Z80) I, มงคล ทองสงคราม, พมพครงท 6, หางหนสวนจากด ว.
เจ.พรนตง, 2545
• ไมโครโพรเซสเซอร (Z80) II, มงคล ทองสงคราม, พมพครงท 4, หางหนสวนจากด ว.
เจ.พรนตง, 2542
• บทความทางดานไมโครโพรเซสเซอร (Z80), อาชวะศกษาจงหวดนครราชสมา
http://203.172.183.132/chatree/ett_articles.htm
• NECTEC’s Web Based Learning,
http://www.nectec.or.th/courseware/computer/index.html
• Electronics Tips, มหาวทยาลยราชภฏจนทรเกษม,
http://elec.chandra.ac.th/tipntrick/z80/default.htm
• เอกสารประกอบการสอนรายวชา Microprocessor Interfacing and Control Design, รศ.ยน
ภวรวรรณ, มหาวทยาลยเกษตรศาสตร, http://www.cpe.ku.ac.th/~yuen/204471/
• เอกสารประกอบการสอนรายวชา สถาปตยกรรมไมโครโพรเซสเซอร, รศ.ยน ภวรวรรณ,
มหาวทยาลยเกษตรศาสตร, http://www.cpe.ku.ac.th/~yuen/204323/
• http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/opampvar5.html
• เอกสารประกอบการสอนรายวชา Microprocessor Interfacing Techniques, J.R.
Drummond, University of Toronto http://faraday.physics.utoronto.ca/PHY406F/ln_intro.htm
• HyperPhysics, Department of Physics and Astronomy, Geogial State University,
http://hyperphysics.phy-astr.gsu.edu/hbase/hframe.html
• Official Support-Page: Hardware - Software - Utilities - FAQ – Docs for Z80-Family
http://www.z80.info/