วันพฤหัสบดีที่ 3 กรกฎาคม พ.ศ. 2557

บทที่ 3 รหัสในระบบดิจิตอล


บทที่ 3:: 
รหัสในระบบดิจิตอล











3.1  รหัส BCD – 8421 (Binary Code Decimal) 
                   รหัส BCD - 8421 เป็นรหัสชนิดหนึ่งในระบบเลขฐานสอง ใช้หลักการแทนค่าเลขฐานสิบ 1 หลัก (Digit) ด้วยเลขฐานสอง 
              4 บิต มีผลดีคือทำให้สามารถใช้สายส่งข้อมูลเพียง 4  เส้น   (สำหรับ 4 บิต)   เพื่อส่งข้อมูลเลขฐานสองมากๆได้ เนื่องจากรหัส 
              BCD - 8421 สร้างขึ้นมาเลียนแบบเลขฐาน สิบ ดังนั้นรหัส BCD - 8421 จึงมีจำนวนเท่ากับจำนวนของเลขฐานสิบ     
              คือ 10 รหัส ดังตารางที่ 3.1
Decimal
BCD - 8421
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
9
1001
                                  ตารางที่ 3.1  รหัส BCD – 8421 เปรียบเทียบกับเลขฐานสิบ
                     จากตารางที่ 3.1 จะเห็นว่า เลขฐานสิบ 1 หลัก เขียนแทนด้วยเลขฐานสอง  4  บิต   โดยที่แต่ละบิตของรหัส   BCD - 8421 
         ได้กำหนดน้ำหนัก ไว้ต่างกัน คือ บิตทางขวามือสุดมีน้ำหนักเป็น  1   ถัดมาเป็น 2, 4 และซ้ายมือสุดเป็น 8 ตามลำดับ   เราจึงเรียกรหัส 
        BCD แบบนี้ว่าเป็น  BCD แบบ 8421 หรือ BCD - 8421 รหัส BCD - 8421 นี้นับว่าสะดวกในการอ่านมาก   เพราะถ้าเลขฐานสิบ 
        มีหลายๆหลัก ก็จะแทนแต่ละหลักของเลขฐานสิบ ด้วยเลขฐานสองหลักละ 4 บิต ดังตารางที่ 3.2 
Decimal
BCD - 8421
39
0011 1001
234
0010 0011 0100
1425
0001 0100 0010 0101
                            ตารางที่  3.2 การแทนเลขฐานสิบหลายๆ หลัก ด้วยรหัส BCD - 8421
       รหัส BCD – 8421  นั้น แม้ว่าจะเขียนอยู่ในรูปเลขฐานสอง แต่ก็ไม่เหมือนกับเลขฐานสองเช่น    เขียนเป็นเลขฐานสองได้เท่ากับ 
    1111 แต่เขียนอยู่ในรูปของรหัส BCD – 8421 ได้เป็น  0001 0101 เป็นต้น การเปรียบเทียบเลขฐานสิบ เลขฐานสอง และ
    รหัส BCD – 8421   แสดงในตารางที่ 3.3 
Decimal
Binary number
BCD – 8421 code
6
110
0110
18
10010
0001 1000
249
11111001
0010 0100 1001
837
1101000101
1000 0011 0111
1205
10010110101
0001 0010 0000 0101
5014
1001110010110
0101 0000 0001 0100
                          ตารางที่ 3.3  แสดงการเปรียบเทียบเลขฐานสิบ เลขฐานสอง และรหัส BCD – 8421        
                                                                              << Go To Top

3.2 รหัส ฐานแปด(Octal) และ ฐานสิบหก (Hexadecimal)
                       การนำรหัส BCD – 8421 มาใช้ไม่ได้เหมาะสมในทุกโอกาส สิ่งที่เราเห็นได้ชัด คือ  รหัส BCD – 8421
              นั้น ไม่สามารถที่จะบวกกัน ได้      เพราะถ้าบวกกันแล้วได้ผลลัพธ์ตั้งแต่   10  ขึ้นไป  ก็จะไม่มีรหัสที่ใช้แทนได้ เช่น
             7 + 8 = 15 เมื่อเขียนอยู่ในรูปของ     รหัส BCD – 8421 จะได้  0111 + 1000 = 1111 ซึ่ง 1111 ไม่มีในรหัส 
             BCD – 8421   หรือในกรณีของเลขหลายๆ บิต   เช่นเลข  8  บิต ที่ คอมพิวเตอร์ใช้ หากจะต้องมาเปลี่ยนเป็นรหัส        
             BCD – 8421 ทุกครั้ง ระหว่างอุปกรณ์ภายนอกกับเครื่องคอมพิวเตอร์ ก็จะทำให้เกิดความยุ่งยาก  และไม่เหมาะสม 
             เท่ากับเลขฐานสอง แต่เลขฐานสองก็ลำบากในการคิด ดังนั้นจึงมีวิธีการแบ่งเลขฐานสองออกเป็นกลุ่มๆ ละ 3 บิต แล้วแทน
             ด้วยเลขฐานแปด (Octal) คือ 0 ถึง 7 หรือแบ่งเป็นกลุ่มละ 4  บิต แล้วแทนด้วยเลขฐานสิบหก (Hexadecimal) คือ
            0 ถึง F ก็จะทำให้สะดวกในการเรียกเลขจำนวนดังกล่าว
3.2.1 รหัสฐานแปด (Octal Code)
                   การกำหนดรหัสฐานแปด ของเลขฐานสอง กระทำได้โดยการแบ่งกลุ่มๆ ละ 3 บิต ลองพิจารณาเลขฐานสอง 24 บิต ที่เก็บไว้ใน
            คอมพิวเตอร์ เช่น  101011010100001111000110
                                           สามารถแบ่งกลุ่มได้ดังนี้
                                         101    011     010     100     001      111     000     110 
                                             5         3          2         4         1            7          0         6
                    จะเห็นได้ว่า เมื่อแบ่งกลุ่มของฐานสองแล้ว จะแทนเลขฐานสองของแต่ละกลุ่มด้วยเลขฐานแปด คือ 0 ถึง 7 ทำให้ง่ายในการอ่าน 
           หรือมีเลขฐานแปดจะเปลี่ยนเป็นเลขฐานสองก็ง่ายเช่นเดียวกัน คือ แค่เพียงแปลงเลขกลับเท่านั้น
 3.2.2 รหัสฐานสิบหก (Hexadecimal Code)
                 การกำหนดรหัสฐานสิบหกของเลขฐานสอง  กระทำได้โดยการแบ่งเป็นกลุ่มๆ ละ 4 บิต ตามเลขฐานสิบหก เช่น 
                                                   11110010
                                         สามารถแบ่งเป็นกลุ่มได้ดังนี้
                                                                           1111     0010
                                                                                 F            2
                          
             ในทำนองเดียวกัน เลขฐานสิบหก ก็สามารถเปลี่ยนกลับมาเป็นเลขฐานสองได้เช่นเดียวกันโดยการแปลงกลับเท่านั้น รหัสฐานสิบหก 
          นิยมใช้มากในภาษาเครื่องของคอมพิวเตอร์
 
                                                                                                                                                           << Go To Top
3.3  การใช้ Parity ในรหัส
              ในการส่งข้อมูลโดยใช้ดิจิตอลนั้น เราสามารถตรวจสอบความถูกต้องของข้อมูลที่ส่งออกไปได้โดยวิธีที่นิยมกัน คือ ใช้ Parity bit
        Parity bit คือ บิต (เลข 0 หรือ 1) ที่เติมเข้าไปใน code word ใดๆ ก็ตามแล้วทำให้ code word นั้นๆ มีจำนวนของเลข 1 
        เป็นคู่ (even) หรือ คี่ (odd) ก็ได้ตามต้องการ การใช้ parity ในรหัสจึงแบ่งออกเป็นสองแบบ คือ Even parity และ Odd parity
        Even parity คือ parity ที่เติมเข้าไปใน code word แล้วทำให้จำนวนเลข 1 ของ code word นั้นเป็นจำนวนคู่
        Odd parity คือ parity ที่เติมเข้าไปใน code word แล้วทำให้จำนวนเลข 1 ของ code word นั้นเป็นจำนวนคี่
Decimal BCD – 8421 code BCD with Odd parity BCD with Even parity
0
0000
00001 หรือ 00001
00000 หรือ 00000
1
0001
00010 หรือ 00010
00011 หรือ 00011
2
0010
00100 หรือ 00100
00101 หรือ 00101
3
0011
00111 หรือ 00111
00110 หรือ 00110
4
0100
01000 หรือ 01000
01001 หรือ 01001
5
0101
01011 หรือ 01011
01010 หรือ 01010
6
0110
01101 หรือ 01101
01100 หรือ 01100
7
0111
01110 หรือ 01110
01111 หรือ 01111
8
1000
10000 หรือ 10000
10001 หรือ 10001
9
1001
10011 หรือ 10011
10010 หรือ 10010
                                       ตารางที่  3.4 รหัส BCD – 8421 กับ parity
        ตามตารางที่ 3.4 เป็นการแสดงการเติม parity bit แบบ odd และ even ของรหัส BCD – 8421 ซึ่งนอกเหนือจาก BCD code 
แล้ว เรายังใช้ parity bit ในรูปของรหัสอื่นๆ อีกด้วย และมีวิธีการเช่นเดียวกันกับที่กล่าวมาแล้ว
                                                                                                                                                                    << Go To Top
3.4 รหัสเกิน 3 (Excess - 3 Code)
      รหัสเกิน 3 คล้ายกับรหัส BCD – 8421 และรหัสเกิน 3 นี้เป็นรหัสชนิดหนึ่งในระบบเลขฐาน สองเช่นกัน ใช้สำหรับการคำนวณทาง
คณิตศาสตร์ (Arithmetic circuit) เนื่องจากรหัสเกิน 3 นี้ มีค่าคอมพลีเมนต์ในตัวเอง (Self - complementing) ลักษณะของรหัสเกิน 3
 คือการเพิ่มค่าตัวเลขฐานสิบในหลักใดๆ โดยบวกอีก 3 เช่น เลข 4 ฐานสิบจะมีค่าเท่ากับ (0111)EX-3 นั่นคือนำเลข 4 มาบวก 3 เป็น 7 และ
 แปลงเลข 7 เป็นเลขฐานสอง จะได้ 0111  ดังตารางที่ 3.5 จะเห็นว่ารหัสเกิน 3 จะมีค่ามากกว่ารหัส BCD – 8421 อยู่ 3
Decimal
BCD – 8421 code
Excess – 3 code
0
0000
0011
1
0001
0100
2
0010
0101
3
0011
0110
4
0100
0111
5
0101
1000
6
0110
1001
7
0111
1010
8
1000
1011
9
1001
1100
                     ตารางที่  3.5 แสดงการเปรียบเทียบระหว่างรหัส BCD – 8421 กับ Excess – 3 code
        การเข้ารหัสเลขฐานสิบ เป็น รหัสเกิน 3 หรือการถอดรหัสจากรหัสเกิน 3 เป็นเลขฐานสิบ ก็มีวิธีเช่นเดียวกันกับ การเข้ารหัสเลขฐานสิบ
 เป็น รหัส BCD – 8421 หรือ การถอดรหัสจาก BCD – 8421 เป็น เลขฐานสิบ
ตัวอย่างที่ 3.1 จงเข้ารหัสเลขฐานสิบ ต่อไปนี้ เป็นรหัสเกิน 3
                                   ก. 24
                                  ข. 618
                                  ค. 3570
                      วิธีทำ   
Decimal
Excess – 3 code
24
0101 0111
618
1001 0100 1011
3570
0110 1000 1010 0011

ตัวอย่างที่ 3.2   จงถอดรหัสเกิน 3 ต่อไปนี้ให้เป็นเลขฐานสิบ
                                     ก. 0110     1100
                                  ข. 1000     1001     1011
                                   ค. 1010     0111     0101     0100
                          วิธีทำ
Excess – 3 code
Decimal
0110 1100
39
1000 1001 101
568
10 0111 0101 0100
7421
                                                                                                                                                                          << Go To Top
3.5 รหัส เกรย์ (Gray Code)
          รหัส เกรย์ (Gray Code) เป็นรหัสอย่างหนึ่งในระบบเลขฐานสองเช่นกัน ใช้ในการแปลง อนาลอก เป็น ดิจิต(Analog to Digital) 
      และในงานด้านการควบคุมตำแหน่งการเคลื่อนที่ของดรัมในเครื่องพิมพ์ (Drum priter) จะใช้ล้อรหัส (Code wheels) เป็นรหัสเกรย์ หรือ 
     รหัสไบนารี โดยล้อรหัสนี้จะถอดรหัสจาการหมุนของมอเตอร์ขับ โดยใช้การตรวจจับทางแสง (Photo detector) ดังรูปที่ 3.1 และลักษณะ
     ของล้อรหัสเกรย์ ดังรูปที่ 3.2 จะเห็นว่ารหัสเกรย์มีขนาด 4 บิต บรรจุอยู่ในล้อรหัส 16 รหัส (0 - 15) ดังนั้นค่าความละเอียดในการควบคุม
     ตำแหน่ง จะมีค่า  = 22.5 
             
           องศา  ต่อการเปลี่ยนรหัส 1 ครั้ง สำหรับการเปรียบเทียบระหว่างรหัสเกรย์และรหัส BCD – 8421 และเลขฐานสองแสดงในตารางที่ 3.6        
                              
                                                                                รูปที่ 3.1 แสดงการติดตั้งรหัสบนเพลาของดรัม       

                         
                                      (ก) ล้อรหัสไบนารี                                                   (ข) ล้อรหัสเกรย์   
                                    รูปที่ 3.2 แสดงการเปรียบเทียบระหว่างล้อรหัสไบนารี (ก) และล้อรหัสเกรย์ (ข)
Decimal
Binary
Gray code
0
0000
0000
1
0001
0001
2
0010
0011
3
0011
0010
4
0100
0110
5
0101
0111
6
0110
0101
7
0111
0100
8
1000
1100
9
1001
1101
10
1010
1111
11
1011
1110
12
1100
1010
13
1101
1011
14
1110
1001
15
1111
1000
                                                      ตารางที่ 3.6 รหัสเกรย์เทียบกับเลขฐานสองและเลขฐานสิบ
      3.5.1 การแปลงเลขฐานสองเป็นรหัสเกรย์
              การแปลงเลขฐานสองเป็นรหัสเกรย์ จะเริ่มต้นจากบิตที่มีความสำคัญมากที่สุด (MSB) ซึ่งบิตนี้ รหัสเกรย์จะมีค่าเหมือน
          กับเลขฐานสอง ในขั้นต่อไป นำ MSB ของเลขฐานสองบวกกับบิตถัดไป (บิตที่สองนับจาก MSB) โดยถือหลักเกณฑ์ว่า
          0+0 = 0, 0+1 = 1, 1+0 = 1 และ 1+1 = 0 (ตัวทด = 1 ให้ตัดทิ้งไป) ต่อไปให้นำบิตที่สองบวกกับบิตที่สามและบิตที่สามบวก
          กับบิตที่สี่ เรื่อยไป ผลบวกที่ได้แต่ละครั้งคือรหัสเกรย์ที่ต้องการ
             ตัวอย่างที่ 3.3    จงแปลงเลขฐานสองต่อไปนี้ให้เป็นรหัสเกรย์
                                                (ก) 1011000111101
           
                                             
 

                                                
                                                (ข)  0110011100011
             
                                                 
 
       3.5.2 การแปลงรหัสเกรย์เป็นเลขฐานสอง
               การแปลงรหัสเกรย์ให้เป็นเลขฐานสอง มีหลักการคล้ายๆ กับการแปลงเลขฐานสองให้เป็นรหัสเกรย์ โดยเริ่มต้นจาก MSB 
           เช่นเดียวกัน นั่นคือ MSB ของเลขฐานสองจะมีค่าเหมือนกับ MSB ของรหัสเกรย์ ในขั้นต่อไปให้นำ MSB ของเลขฐานสอง
           บวกกับ บิตที่สอง (นับจาก MSB) ของรหัสเกรย์ (หลักเกณฑ์การบวกก็เช่นเดียวกับการแปลงเลขฐานสองให้เป็นรหัสเกรย์)
           ผลบวกที่ได้คือบิตที่สองของเลขฐานสอง ต่อไปให้นำบิตที่สองของเลขฐานสองบวกกับบิตที่สามของรหัสเกรย์ผลบวก 
          ที่ได้คือบิตที่สามของเลขฐานสอง และบวกเช่นนี้ไปเรื่อยๆ
                ตัวอย่างที่ 3.4    จงแปลงรหัสเกรย์ต่อไปนี้ให้เป็นเลขฐานสอง
                                                     (ก) 1110100100011
             
                                                     
 

                                                    
                                                     (ข) 0101010010010
       
                                                      
 

3.6 รหัส แอสกี (ASCII Code)
         รหัสแอสกี (ASCII Code) ใช้งานกันอย่างกว้างขวางในการส่งข้อมูลในระบบไมโครคอมพิว-เตอร์ เป็นรหัสข้อมูลขนาด 7 บิต ซึ่ง
   ใช้กับคีย์บอร์ดในการป้อนข้อมูลและใช้กับเครื่องพิมพ์ แอสกี (ASCII) ย่อมาจากคำว่า American Standard Code for Information -
     -  Interchange อ่านออกเสียงว่า แอส – กี รหัสแอสกีมีอักขระทั้งหมด 128 ตัว ใช้แทนด้วยตัวเลขฐานสองขนาด 7 บิต แต่ในทางปฏิบัตินั้น
   ใช้เลขฐานสองขนาด 8 บิต โดยกำหนดให้บิตที่ 8 (MSB) มีค่าเป็น 0 ตารางแสดงรหัสแอสกีเปรียบเทียบกันระหว่างตัวอักขระ
   สัญลักษณ์แป้นพิมพ์ ชื่อคำสั่งนั้นๆ ในรหัสแอสกี แสดงในตารางที่ 3.7 เพื่อให้เข้าใจเรื่องรหัสแอสกีขอให้พิจารณาจากตัวอย่างที่ 3.5
           ตัวอย่างที่ 3.5 จงหาค่าเลขฐานสอง เลขฐานสิบหก ที่เกิดจากรหัสแอสกีของแป้นพิมพ์คอมพิวเตอร์ เมื่อทำการพิมพ์คำสั่งในภาษาเบสิกดัง
                                    นี้ 20 PRINT “A=”;X
               
                          วิธีทำ      เมื่อแยกข้อมูลการกดแป้นพิมพ์แต่ละตัวตามลำดับ และดูจากตารางที่3.7 จะได้ค่าเลขฐานสองและฐานสิบหกของ
                                        รหัสแอสกีแต่ละตัวดังนี้
                                             
                                                                                                                                                              

ไม่มีความคิดเห็น:

แสดงความคิดเห็น