33
-สารบัญ 1- สารบัญ เรื่อง หนา บทนํการเตรียมตัวกอนการทดลอง การเตรียมตัวกอนการทดลอง…………………………………………………………………...1 อุปกรณการทดลอง……………………………………………………………………………...2 สิ่งที่ควรรูเกี่ยวกับบอรดทดลอง………………………………………………………………… 3 คํ าแนะนําการใชอุปกรณทดลอง……………………………………………………………….. 8 คํ าแนะนําเกี่ยวกับใบงานการทดลอง……………………………………………………………10 ตัวอยางการพัฒนาโปรแกรมดวย BASCOM-8051กับบอรด MCS51 รุCP-JR51AC2……..15 บทที1 การใชงานพอรต Input / Output ของไมโครคอนโทรลเลอร MCS51 คุณสมบัติการทํางานของพอรต Input / Output………………………………………………. 26 การเขาถึงพอรตของ MCS51 ดวย BASCOM-8051…………………………………………...30 การใชงานพอรตเปน Output แบบ Byte………………………………………………………..31 การใชงานพอรตเปน Output แบบ Bit…………………………………………………………. 32 การใชงานพอรตเปน Input แบบ Byte…………………………………………………………. 33 การใชงานพอรตเปน Input แบบ Bit…………………………………………………………… 34 การประยุกตใชงานพอรต Output ………………………………………………………………36 การประยุกตใชงานพอรต Input………………………………………………………………... 37 การทดลองใชงานพอรต Input / Output……………………………………………………….. 38 ตัวอยางการทดลองที1.1 โปรแกรมไฟกระพริบดวย LED 1 ดวง แบบที1…………………….. 38 ตัวอยางการทดลองที1.2 โปรแกรมไฟกระพริบดวย LED 1 ดวง แบบที2…………………….. 40 ตัวอยางการทดลองที1.3 โปรแกรมไฟกระพริบดวย LED หลายดวง…………………………. 41 ตัวอยางการทดลองที1.4 โปรแกรมแสดงผลเลข HEX ดวย 7 SEGMENT…………………… 44 ตัวอยางการทดลองที1.5 โปรแกรม Switch ON/OFF ควบคุม LED…………………………..48 ตัวอยางการทดลองที1.6 โปรแกรม Switch ON/OFF แบบหลายเงื่อนไข……………………..50

สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

Page 1: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

-สารบัญ 1-

สารบัญ

เรื่อง หนา

บทนํ า การเตรียมตัวกอนการทดลองการเตรียมตัวกอนการทดลอง…………………………………………………………………...1อุปกรณการทดลอง……………………………………………………………………………...2ส่ิงที่ควรรูเกี่ยวกับบอรดทดลอง………………………………………………………………… 3คํ าแนะนํ าการใชอุปกรณทดลอง……………………………………………………………….. 8คํ าแนะนํ าเกี่ยวกับใบงานการทดลอง……………………………………………………………10ตัวอยางการพัฒนาโปรแกรมดวย BASCOM-8051กับบอรด MCS51 รุน CP-JR51AC2……..15

บทที่1 การใชงานพอรต Input / Output ของไมโครคอนโทรลเลอร MCS51คุณสมบัติการทํ างานของพอรต Input / Output………………………………………………. 26การเขาถึงพอรตของ MCS51 ดวย BASCOM-8051…………………………………………...30การใชงานพอรตเปน Output แบบ Byte………………………………………………………..31การใชงานพอรตเปน Output แบบ Bit…………………………………………………………. 32การใชงานพอรตเปน Input แบบ Byte………………………………………………………….33การใชงานพอรตเปน Input แบบ Bit…………………………………………………………… 34การประยุกตใชงานพอรต Output ………………………………………………………………36การประยุกตใชงานพอรต Input………………………………………………………………... 37การทดลองใชงานพอรต Input / Output………………………………………………………..38ตัวอยางการทดลองที่ 1.1 โปรแกรมไฟกระพริบดวย LED 1 ดวง แบบที่1……………………..38ตัวอยางการทดลองที่ 1.2 โปรแกรมไฟกระพริบดวย LED 1 ดวง แบบที่2……………………..40ตัวอยางการทดลองที่ 1.3 โปรแกรมไฟกระพริบดวย LED หลายดวง…………………………. 41ตัวอยางการทดลองที่ 1.4 โปรแกรมแสดงผลเลข HEX ดวย 7 SEGMENT…………………… 44ตัวอยางการทดลองที่ 1.5 โปรแกรม Switch ON/OFF ควบคุม LED…………………………..48ตัวอยางการทดลองที่ 1.6 โปรแกรม Switch ON/OFF แบบหลายเงื่อนไข……………………..50

Page 2: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

-สารบัญ 2-

บทที่2 การเชื่อมตอกับ Character Dot Matrix LCDการเชื่อมตอกับ Character Dot Matrix LCD…………………………………………………..53LCD แบบตัวอักษร (Character LCD)………………………………………………………… 54การเชื่อมตอวงจรกับโมดูล Character LCD…………………………………………………… 55คํ าสัง่ในการควบคุมการทํ างานของ LCD ของ BASCOM-8051……………………………… 57ตัวอยางการทดลองที่ 2.1 โปรแกรมแสดงผล Character LCD Display (แบบที่ 1)…………...59ตัวอยางการทดลองที่ 2.2 โปรแกรมแสดงผล Character LCD Display (แบบที่ 2)…………...61ตัวอยางการทดลองที่ 2.3 โปรแกรมแสดงผล Character LCD ดวยอักขระพิเศษ……………..63

บทที่3 การเชื่อมตอกับ Dip-Switch และ Keyboard Matrix 4x3การตอวงจร Switch แบบขารวม………………………………………………………………..67การตอวงจร Switch แบบ Matrix………………………………………………………………. 68ปญหาของหนาสัมผัส…………………………………………………………………………...69ตัวอยางการทดลองที่ 3.1 การเชื่อมตอกับ Dip-Switch ขนาด 8 จุด………………………….. 71ตัวอยางการทดลองที่ 3.2 การเชื่อมตอกับ Keyboard Matrix ขนาด 4x3……………………..74

บทที่4 การเชื่อมตอกับ Stepping Motorการเชื่อมตอกับ Stepping Motor……………………………………………………………….81รูปแบบการขับ Stepping Motor………………………………………………………………..82ตัวอยางการทดลองที่ 4.1 การควบคุม Stepping Motor แบบ 1 เฟส (Full Step)……………. 85ตัวอยางการทดลองที่ 4.2 การควบคุม Stepping Motor แบบ 2 เฟส (Full Step)……………. 86ตัวอยางการทดลองที่ 4.3 การควบคุม Stepping Motor แบบ Half Step……………………..87

บทที่5 การเชื่อมตอกับ Mini Speaker และ Buzzerการเชื่อมตอกับ Mini Speaker และ Buzzer…………………………………………………...89คํ าสั่งของ BASCOM-8051 ในการกํ าเนิดเสียง…………………………………………………89ตัวอยางการทดลองที่ 5.1 การเชื่อมตอกับ Buzzer ขนาดเล็กเพื่อกํ าเนิดเสียง………………...90ตัวอยางการทดลองที่ 5.2 การเชื่อมตอกับลํ าโพงขนาดเล็กเพื่อกํ าเนิดเสียง…………………...91

Page 3: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

-สารบัญ 3-

บทที่6 การเชื่อมตอกับอุปกรณแบบ I2C Busการเชื่อมตอบัสแบบ I2C Bus………………………………………………………………….. 92การรับสงขอมูลของ I2C Bus…………………………………………………………………... 93ขอกํ าหนดในการเริ่มตนและสิ้นสุด……………………………………………………………...95การแจงสภาวะรับทราบในบัส…………………………………………………………………...96คํ าสั่งของ BASCOM-8051 ทีใ่ชกับ I2C BUS………………………………………………….97ตัวอยางการทดลองที่ 6.1 การเชื่อมตอกับ I2C EEPROM เบอร 24XX256……………………100ตัวอยางการทดลองที่ 6.2 การเชื่อมตอกับ I2C RTC เบอร DS1307…………………………...105ตัวอยางการทดลองที่ 6.3 การเชื่อมตอกับ I2C RTC เบอร PCF8583………………………….109ตัวอยางการทดลองที่ 6.4 การเชื่อมตอกับ I2C ขยาย I/O เบอร PCF8574 แบบ Output………114ตัวอยางการทดลองที่ 6.5 การเชื่อมตอกับ I2C ขยาย I/O เบอร PCF8574 แบบ Input………..117

บทที่7 การใชงาน Timer/Counter และ InterruptTimer/Counter…………………………………………………………………………………. 120การทํ างานของ Timer/Counter ชอง 0 และ 1…………………………………………………. 121การกํ าหนดโหมดของ Timer/Counter ชอง 0 และ 1 ดวย BASCOM-8051………………….. 126การควบคุมการทํ างานของ Timer/Counter ชอง 0 และ 1 ดวย BASCOM-8051……………. 126การกํ าหนดคาใหกับ Timer/Counter ชอง 0 และ 1…………………………………………….127ตัวอยางการทดลองที่ 7.1 การใชงาน Timer0 ในโหมด Timer 16 บิต………………………….128ตัวอยางการทดลองที่ 7.2 การใชงาน Timer0 ในโหมด Timer 16 บิต แบบ Interrupt………...131ตัวอยางการทดลองที่ 7.3 การใชงาน Timer0 ในโหมด Counter 16 บิต………………………133การทํ างานของ Timer/Counter ชอง 2………………………………………………………….137การก ําหนดโหมดการทํ างานของ Timer/Counter ชอง 2 ดวย BASCOM-8051………………145ตัวอยางการทดลองที่ 7.4 การใชงาน Timer2 ในโหมด 16 Bit Capture……………………… 150ตัวอยางการทดลองที่ 7.5 การใชงาน Timer2 ในโหมด 16 Bit Auto-Reload………………… 153ตัวอยางการทดลองที่ 7.6 การใชงาน Timer2 ในโหมด Baudrate Generator……………….. 158ตัวอยางการทดลองที่ 7.7 การใชงาน Timer2 ในโหมด Programmable Clock Out………….159การเขียนโปรแกรมบริการ Interrupt ดวย BASCOM-8051…………………………………… 161ตัวอยางการทดลองที่ 7.8 การ Interrupt จากสัญญาณ INT0 ภายนอก……………………….162

Page 4: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

-สารบัญ 4-

บทที่8 การเชื่อมตอกับ Servo Motorการเชื่อมตอกับ Servo Motor…………………………………………………………………...164หลกัการทํ างานของ Servo Motor………………………………………………………………165การสรางสัญญาณ Pulse เพือ่ควบคุมการหมุนของ Servo Motor……………………………. 168การท ํางานของวงจร Programmable Counter Array (PCA)………………………………….169การทํ างานของ PCA Timer……………………………………………………………………..172การทํ างานของ PCA ในโหมด Pulse Width Modulaion……………………………………… 180การเขียนโปรแกรมควบคุมการเคลื่อนที่ของ Servo Motor ดวย BASCOM-8051……………. 185ตัวอยางการทดลองที่ 8.1 โปรแกรมควบคุม Servo Motor มาตรฐานดวยคํ าสั่ง Servos……...189ตัวอยางการทดลองที่ 8.2 โปรแกรมควบคุม Servo Motor ดวย PWM ของ PCA Timer……...192

บทที่9 การใชงานพอรตสื่อสารอนุกรมความรูทั่วไปเกี่ยวกับการสื่อสารอนุกรม Asynchronous……………………………………… 194การ รับ-สง ขอมูล ดวย RS232………………………………………………………………….196การ รับ-สง ขอมูล ดวย RS422………………………………………………………………….198การ รับ-สง ขอมูล ดวย RS485………………………………………………………………… 201คํ าสั่งของ BASCOM-8051 ทีใ่ชในการสื่อสารอนุกรม………………………………………… 206ตัวอยางการทดลองที่ 9.1 การรับสงขอมูลดวย RS232…………………………………………208ตัวอยางการทดลองที่ 9.2 โปรแกรมคํ านวณเลขทศนิยม……………………………………….214ตัวอยางการทดลองที่ 9.3 โปรแกรมสื่อสารอนุกรมโดยใชพอรตสื่อสารจํ าลอง(Pin Port)……...217ตัวอยางการทดลองที่ 9.4 โปรแกรมสื่อสารอนุกรมดวย RS485………………………………. 220

บทที่10 การเชื่อมตอกับอุปกรณ 1-Wireการสื่อสารแบบ 1-Wire………………………………………………………………………… 225การใชงานไอซีวัดอุณหภูมิแบบ 1-Wire เบอร DS18S20……………………………………… 229คํ าสั่งของ BASCOM-8051 กับอุปกรณ 1-Wire……………………………………………….. 238ตัวอยางการทดลองที่ 10.1 การเชื่อมตอกับ DS18S20 ไอซีวัดอุณหภูมิ……………………….239ตัวอยางการทดลองที่ 10.2 การคนหา DS18S20 แบบ Multi Drop ในบสัเดียวกัน……………245ตัวอยางการทดลองที่ 10.3 การอานคาจาก DS18S20 แบบ Multi Drop ในบสัเดียวกัน……...248การใชงานไอซีรหัสกุญแจอเิล็กทรอนิกนแบบ 1-Wire เบอร DS1990A……………………….. 253ตัวอยางการทดลองที่ 10.4 การเชื่อมตอกับ DS1990A ไอซีรหัสกุญแจอิเล็กทรอนิกส……….. 255

Page 5: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

-สารบัญ 5-

บทที ่11 การเชื่อมตอกับเครื่องอานบัตรแถบแมเหล็กการเชื่อมตอกับเครื่องอานบัตรแถบแมเหล็ก…………………………………………………… 257เครื่องอานบัตรแถบแมเหล็กรุน MCR-B02TTL…………………………………………………258การอานขอมูลจากบัตรแถบแมเหล็ก……………………………………………………………259คํ าสั่งของ BASCOM-8051 กับเครื่องอานบัตรแถบแมเหล็ก…………………………...………261ตัวอยางการทดลองที่ 11.1 การเชื่อมตอกับเครื่องอานบัตรแถบแมเหล็กรุน MCR-B02TTL… 262ตัวอยางการทดลองที่ 11.2 การเชื่อมตอกับเครื่องอานบัตรแถบแมเหล็กแบบ Interrupt………265

บทที ่12 การใชงานกับอุปกรณที่ BASCOM-8051 ไมมีคํ าสั่งรองรับการใชงานกับอุปกรณที่ BASCOM-8051 ไมมีคํ าสั่งรองรับ…………………………………… 269การอานคาจาก A/D ภายในตัวของ T89C51AC2…………………………………………….. 270ตัวอยางการทดลองที่ 12.1 การอานคา A/D ภายในจาก T89C51AC2 แบบ 8 บิต…………...276การแกไขโปรแกรมใหอานคา A/D ภายในของ T89C51AC2 ใหเปนแบบ 10 บิต…………….. 279การสราง Library คํ าสั่งดวยภาษาแอสแซมบลี้…………………………………………………280การสราง Library คํ าสั่งเพื่อใชกับ LTC1298…………………………………………………...285ตัวอยางการทดลองที่ 12.2 การอานคา A/D จาก LTC1298 โดยใช Library ทีส่รางขึ้น……… 287การสราง Library คํ าสั่งเพื่อใชกับ EEPROM ภายในของ T89C51AC2……………………….290Source Code ใน Library คํ าสั่งของ EEPROM ภายในของ T89C51AC2……………………291ตัวอยางการทดลองที่ 12.3 การติดตอกับ EEPROM ภายในของ T89C51AC2……………….292การสราง Library คํ าสั่งเพื่อใชกับ Graphic LCD ขนาด 240x64……..……………………….295ตัวอยางการทดลองที่ 12.4 การใชงาน Graphic LCD ขนาด 240x64 แบบ Character……... 298ตัวอยางการทดลองที่ 12.5 การใชงาน Graphic LCD ขนาด 240x64 แบบ Graphic………...301Source Code ใน Library คํ าสัง่สํ าหรับใชงานกับ Graphic LCD ขนาด 240x64…………… 306การสราง Library คํ าสั่งเพื่อใชกับ Graphic LCD ขนาด 128x64…………….………………..312ตัวอยางการทดลองที่ 12.6 การใชงาน Graphic LCD ขนาด 128x64 แบบ Graphic………...316Source Code ใน Library คํ าสั่งของ Graphic LCD ขนาด 128x64 ………………………….323

Page 6: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

-สารบัญ 6-

ภาคผนวกความรูเบื้องตนเกี่ยวกับอุปกรณอิเล็กทรอนิกส…………………………………………………………. 331

• ตัวตานทาน………………………………………………………………………………… 331• ไดโอด………………………………………………………………………………… ……335• LED………………………………………………………………………………………… 337• 7 SEGMENT………………………………………………………………………………. 340• Matrix Keyboard 4x3…………………………………………………………………….. 342• Stepping Motor…………………………………………………………………………… 343• Transistor…………………………………………………………………………………..347

วงจรบอรด CP-JR51AC2 V1.0………………………………………………………………………….349วงจรบอรด CP-JR51AC2 V2.0………………………………………………………………………….350

Page 7: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -26- WWW.ETT.CO.TH

การใชงานพอรต Input / Output ของไมโครคอนโทรลเลอร MCS51

สํ าหรบัในบทนี้เราจะมาศึกษาถึงคุณสมบัติและการใชงานพอรต I/O ของ MCS51 กนั ซึง่ในบทนี้เราจะทํ าการศึกษาถงึรายละเอียดการใชงานของพอรต I/O สํ าหรับใชงานแบบ Input / Output ธรรมดาเทานั้น สวนฟงกชั่นการท ํางานพิเศษตางๆของพอรต (Alternate Port Pin Functions) นัน้จะกลาวถงึอีกครั้งหนึ่งในภายหลัง ตามหัวขอที่เกีย่วของ เชน Timer/Counter PWM และ Serial Port เปนตน

คุณสมบัติการทํ างานของพอรต Input / Outputตามปรกติแลว MCS51 มาตรฐาน จะมีพอรต I/O อยูดวยกนัจํ านวน 4 พอรต โดยใชชื่อเรียกพอรตเปน

หมายเลขลํ าดับ ซึ่งจะมีคาเริ่มจากศูนย เชน P0,P1,P2 และ P3 เปนตน ซึ่งในการเขาถึงขอมูลของพอรตตางๆนั้น จะกระท ําผานรจีสิเตอรของพอรต ซึ่งรีจิสเตอรเหลานี้จะถูกจัดสรรไวในตํ าแหนงของหนวยความจํ าภายใน ซึ่งอยูในกลุมของรีจิสเตอรพิเศษ (Special Function Register หรือ SFR) โดยมีชื่อเรียกรีจิสเตอรเปน P0,P1,P2 และ P3ตามลํ าดับ ซึ่งถา CPU ของ MCS51 เบอรใดมีจํ านวนพอรต I/O มากกวา 4 พอรต ก็จะมีการเพิ่มเติมเติมจํ านวนพอรตและรีจิสเตอรของพอรตเพิ่มเติมเขาไปโดยใชเลขลํ าดับตอเนื่องกันไปเชน CPU เบอร T89C51RD2-CM ของ Atmel จะมีพอรต I/O จ ํานวน 6 พอรต ดังนั้นพอรต I/O ของ T89C51RD2-CM กจ็ะประกอบดวย P0,P1,P2,P3,P4และ P5 ตามลํ าดับอยางนี้เปนตน

โดยในการใชงานพอรตของ MCS51 นัน้จะแบงออกเปน 2 ระดับคือ การใชงานพอรตสํ าหรับทํ าหนาที่เปน Input และ Output พืน้ฐาน และการใชงานพอรตรวมกับฟงกชั่นพิเศษบางอยาง(Alternate Pin Port Function) ซึ่งคุณสมบติัพเิศษตางๆนี้จะมีอยูเฉพาะในบางพอรตเทานั้น เชน P3.0 นอกจากจะใชงานเปน Input / Output ตามการสั่งงานของโปรแกรมตามปรกติแลว ยังสามารถโปรแกรมหนาที่เปนขารับสัญญาณขอมูลจากพอรตอนุกรมของ Serial Port ไดอีกดวย ซึง่ในบทนี้จะขอกลาวถึงเพียงการใชงานพอรตสํ าหรับทํ าหนาที่เปน Input และ Output ตามการสั่งงานของโปรแกรมเทานั้น

สํ าหรบัคุณสมบัติการทํ างานงานของพอรต I/O ของ MCS51 นัน้ จะมลัีกษณะเหมือนๆกัน กลาวคือ พอรต I/O แตละพอรตจะมีคุณสมบัติเปนแบบ 2 ทิศทาง หรือ Bi Directional Port โดยพอรตแตละพอรต จะมีขนาด 8 บิตโดยสามารถใชงานเปนไดทั้ง Input และ Output ไดตามตองการโดยไมตองโปรแกรมหนาที่การทํ างานใหกับพอรต ซึง่ในสภาวะเริ่มตนหรือหลังการรีเซ็ตนั้น พอรตทุกพอรตจะมีสถานะเปนโลจิก “1” ทัง้หมด ซึ่งพอรตทุกพอรตของ MCS51 ยกเวนพอรต P0 จะมกีารตอตัวตานทาน Pull-Up ไวใหอยูแลว สวนพอรต P0 นัน้จะยงัไมมีการตอตัวตานทาน Pull-Up ไวใหดวย ดังนัน้ในการออกแบบวงจรใชงานนั้นจะตองทํ าการเพิ่มเติมตัวตานทาน Pull-Up ใหกับขาสัญญาณของพอรต P0 ดวยเสมอไมเชนนั้นแลวก็จะไมสามารถสั่งงานใหพอรต P0 ขับสัญญาณโลจิก Output ตามการก ําหนดของโปรแกรมไดอยางถูกตอง

Page 8: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -27- WWW.ETT.CO.TH

คุณสมบัติของพอรต P0พอรต P0 เปนพอรตขนาด 8 บิต ซึ่งสามารถกํ าหนดหนาที่การทํ างานได 2 หนาที่ คือ กํ าหนดใหทํ าหนาที่

เปน Address/Data ของระบบบัส ในกรณีที่ออกแบบวงจรให CPU มกีารขยายหนวยความจํ าภายนอกไวดวย สวนในกรณีที่ออกแบบวงจรของ CPU ใหเปนแบบ Single Chips นัน้ พอรต P0 สามารถใชทํ าหนาที่เปน Input หรือ Output ทัว่ๆไปได โดยโครงสรางของพอรต P0 สามารถแสดงใหเห็นไดดังนี้

รปูแสดง โครงสรางขนาด 1 บิต ของพอรต P0

จากรูปจะเห็นไดวาพอรต P0 จะใช D Flip Flop ในการควบคุมการทํ างานของขาสัญญาณพอรต ซึ่งคุณสมบัติทางโลจิกของ Output ที่ Pin ของพอรตจะถูก Latch คางดวยสถานะสุดทายที่เขียนไปยัง D Flip Flop โดยลักษณะวงจรภาค Output ของพอรตจะเปนแบบ FET ซึง่ในกรณีที่ออกแบบวงจรให CPU ท ํางานแบบขยายบัส จะมีสัญญาณ Control จากภายในตัว CPU สํ าหรบัเปดการทํ างานของ FET(2) เพือ่ท ําหนาที่ขับโลจิก “1” ออกไปยังขาสญัญาณของพอรต แตถากํ าหนดให CPU ท ํางานแบบ Single Chips แลวจะไมมีสัญญาณ Control จากภายในมาเปดการทงานของ FET(2) ดังนั้น FET ตัวทีท่ ําหนาที่ขับโลจิกใหกับ Pin Port จะอยูในสภาวะถูกปลอยลอย(Open Drain) ซึง่ท ําใหไมสามารถขับโลจิก “1” ใหกับ Pin ของพอรตได ดังนั้นจึงจํ าเปนตองตอตัวตานทานแบบ Pull-Up ใหกับขาสัญญาณของ P0 นีจ้ากภายนอกดวยเสมอไมเชนนั้นแลวก็จะไมสามารถใชงานพอรต P0 สํ าหรับท ําหนาที่เปน Input / Output ทัว่ๆไปได

ซึง่จะเห็นไดวาในการใชงานพอรต P0 เพือ่ท ําหนาที่เปน Input หรือ Output นั้น จะสามารถใชงานพอรต P0 ใหท ําหนาที่เปน Input หรือ Output กไ็ดตามตองการโดยไมตองโปรแกรมหนาที่การทํ างานใหกับพอรตแตอยางใด โดยเมื่อตองการเขียนคา Output ไปยงัพอรต ก็สามารถเขียนคา Output ทีต่องการไปยังรีจิสเตอรของพอรต P0

Page 9: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -28- WWW.ETT.CO.TH

ไดทันที โดยคาสถานะจากรีจิสเตอรของพอรต P0 จะถกูสงตอมายังวงจร Flip Flop แตละชุด เพื่อทํ าการ Latch และสรางสัญญาณ Output ตามคาขอมูลที่ไดทันที

สํ าหรับในกรณีของการใชงานพอรต P0 เปน Input นัน้ กส็ามารถสั่งอานคาสถานะของพอรตผานทางรีจิสเตอรของพอรตไดทันทีเชนกัน โดยเมื่อมีการสั่งอานคาสถานะของพอรตแตละครั้งนั้น CPU จะสรางสัญญาณ Read Pin เพือ่เปดการทํ างานของ Buffer สํ าหรบัอานสถานะจาก Pin ของพอรต ดังนั้นคาสถานะทาง Input ของ Pin จากพอรตนั้น จะถูก Latch ไวในรีจสิเตอรของพอรตเฉพาะเมื่อมีการสั่งอานคาขอมูลเทานั้น และเพื่อปองกันความผิดพลาดในการอานคา Input จาก Pin ของพอรต ควรทํ าการเขียนคา “1” ไปยงัพอรตกอนแลวจึงสั่งอานคาจากพอรต เนือ่งจากถามีการสั่งเขียนคาขอมูลที่เปน “0” ออกไปยัง Pin ของพอรตไวกอน เมื่อส่ังอานคาสภานะ Input จาก Pin ของพอรตอาจทํ าใหไดสถาะโลจิก “0” จากวงจร Latch ของ Flip Flop แทน

คุณสมบัติของพอรต P2สํ าหรับคุณสมบัติและโครงสรางของพอรต P2 นัน้จะคลายกับพอรต P0 ดังไดกลาวมาแลว จะมีความแตก

ตางกันตรงที่ วงจรภาค Output ของพอรต P2 จะมกีารตอตัวตานทานแบบ Pull Up ไวดวย โดยการทํ างานของวงจร Pull Up จะถกูควบคุมการทํ างานจากสัญญาณ Control ภายในตัว CPU เชนเดียวกันกับพอรต P0

โดยพอรต P2 นัน้จะถกูใชงานเปนขา Address ไบทสูง (A8..A15) ในกรณีที่กํ าหนดให CPU ทํ างานในโหมดขยายบสั สวนในกรณีที่กํ าหนดโหมดการทํ างานของ CPU ใหท ํางานแบบ Single Chips นัน้ ขาสัญญาณของพอรต P2 จะสามารถนํ าไปใชงานเปน Input / Output ไดตามปรกติ

รปูแสดง โครงสรางขนาด 1 บิต ของพอรต P2

Page 10: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -29- WWW.ETT.CO.TH

คุณสมบัติของพอรต P1,P3,P4สํ าหรับโครงสรางของพอรตอื่นๆของ MCS51 นอกเหนือจาก P0 และ P2 ดังไดกลาวมาแลวในขางตนนั้น

โดยรวมแลวจะมีลักษณะโครงสรางที่เหมือนกัน ซึ่งถาเปน CPU ในตระกูล MCS51 มาตรฐานก็จะมีพอรตวางไวใหใชงานเปน Input และ Output ทัว่ๆไป โดยไมนับรวม P0 และ P2 จ ํานวน 2 พอรต คือ P1 และ P3 แตถา CPUเบอรใดมีการขยายจํ านวนพอรตเพิ่มเติมข้ึนมาอีกก็จะใหชื่อพอรตเปนลํ าดับตอเนื่องจาก P3 เชน P4 หรือ P5 เปนตน โดยคุณสมบัติและโครงสรางของพอรตเหลานี้จะมีความแตกตางจากโครงสรางของพอรต P0 และ P2 เล็กนอยดังแสดงใหเห็นดังรูปตอไปนี้คือ

รปูแสดง โครงสรางขนาด 1 บิต ของพอรต P1,P3 และ P4

จากรปูจะเห็นไดวา โครงสรางของพอรตโดยรวมแลวจะยังคงเหมือนกับพอรต P0 และ P2 อยู ซึ่งจะมีความแตกตางกันตรงที่มีการบรรจุตัวตานทาน Pull Up ไวใหกับ Pin ของพอรตทุกพอรตอยูแลว และการทํ างานของวงจร Output ของ Pin กจ็ะมาจากการ Latch ของวงจร Flip Flop เชนเดยีวกัน เพียงแตมีการเพิ่มเติมคุณสมบัติใหวงจรภายในอืน่ๆสามารถสงสัญญาณมาควบคุมการทํ างานของ Pin ไดโดยตรงดวย (Alternate Output Function) โดยฟงกชัน่พเิศษดังกลาวนี้จะมีอยูเพียงบาง Pin ของบางพอรตเทานั้น ซึ่งถา Pin ใดไมมกีารออกแบบใหทํ างานรวมกับฟงกชัน่พเิศษอยางอื่นแลว การทํ างานของ Pin กจ็ะถกูควบคุมจาก Flip Flop ซึง่ควบคุมโดยรีจิสเตอรของพอรตเพยีงอยางเดียวเทานั้น

สํ าหรบัในดานของการใชงานพอรตเปน Input กเ็ชนเดียวกัน จะเห็นไดวาถา Pin ใดของพอรตถูกกํ าหนดใหท ํางานรวมกับฟงกพิเศษบางอยางภายในตัว CPU กจ็ะมีการตอสัญญาณจาก Pin ของพอรต ไปยงัฟงกชั่นพิเศษเหลานั้นดวย (Alternate Input Function) โดยในการอานคาสถานะของ Pin พอรตกจ็ะยังคงใชวิธีการอานคาผานทางรีจิสเตอรของพอรตอยูเชนเดิม

Page 11: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -30- WWW.ETT.CO.TH

การเขาถึงพอรตของ MCS51 ดวย BASCOM-8051ในการพัฒนาโปรแกรมของ MCS51 ดวยภาษาเบสิกของ BASCOM-8051 นัน้จะสามารถเขาถึงพอรต I/O

ของ MCS51 ไดทั้งแบบ Input และ Output โดยในการเขาถึงพอรต I/O นัน้จะสามารถทํ าไดทั้งแบบ Bit และ Byte ซึง่ในการเขาถึงแบบ Byte นัน้ จะกระทํ าผานทางรีจิสเตอรของพอรต เชน P0,P1,P2 และ P3 เปนตน โดยในการเขาถงึขอมูลของพอรตแบบ Byte นัน้จะสามารถกระทํ ากับทุกๆบิตในพอรตพรอมๆกัน สวนในกรณีที่ใชการเขาถึงขอมูลในพอรตแบบ Bit นัน้จะเปนการเลอืกกระทํ ากับบิตใดบิตหนึ่งในพอรตที่ถูกอางถึงเทานั้น สวนบิตอื่นๆที่ไมถูกอางถึงกจ็ะยงัคงมีคาเชนเดิมไมเปลี่ยนแปลง

โดย BASCOM-8051 ไดสรางชุดคํ าสั่งสํ าหรับใชงานรวมกับ Input / Output ของพอรต ทั้งแบบ Bit และ Byte ไวหลายคํ าสั่งไดแก

Px = var ‘ เขียนคา Output ไปยังพอรต Px ดวยคาของตัวแปร Varvar = Px ‘อานคาสถานะของพอรต Px มาเก็บไวยังตัวแปร VarSET Px.y ‘เซ็ตบิต y ของพอรต Px ใหมีคาเปน “1”RESET Px.y ‘รีเซ็ตบิต y ของพอรต Px ใหมีคาเปน “0”BITWAIT Px.y,Set ‘รอจนกระทั่งสถานะบิต y ของพอรต Px ถกูเซ็ตเปน “1”BITWAIT Px.y,Reset ‘รอจนกระทั่งสถานะบิต y ของพอรต Px ถกูรีเซ็ตเปน “0”Debounce Px.y , 1 , Sub1 ‘ถาตรวจพบสถานะบิต y ของพอรต Px เปน “1” (หลัง Debounce แลว) ‘จงึกระโดดไปโปรแกรมยอย Sub1Debounce Px.y , 0 , Sub1 ‘ถาตรวจพบสถานะบิต y ของพอรต Px เปน “0” (หลัง Debounce แลว) ‘จงึกระโดดไปโปรแกรมยอย Sub1

ซึง่กลุมของคํ าสั่งสํ าหรับใชจัดการกับพอรต Input / Output เหลานี ้ นบัวามีความสํ าคัญเปนอยางมาก เพราะวาเมือ่เราสามารถทํ าความเขาใจกับการทํ างานของคํ าสั่งตางๆเหลานี้ไดเปนอยางดีแลว ก็สามารถที่จะเขียนโปรแกรมเพื่อตรวจสอบสถานะของ Input จากภายนอกที่เชื่อมตอมายังพอรตของไมโครคอนโทรลเลอรเพื่อทํ าการประมวลผลและตัดสินใจได นอกจากนี้แลวยังจะสามารถสั่งงานใหพอรตของไมโครคอนโทรลเลอรสงสัญญาณออกไปควบคุมการทํ างานของอุปกรณอ่ืนๆ ทั้งในรูปแบบของการ ON / OFF หรือ การสงสัญญาณในลักษณะของขบวนพลัซแบบตางๆ ไดอีกดวย

ซึ่งในอันดับแรกนั้นคงตองขอกลาวอธิบายถึงคุณสมบัติการทํ างานของคํ าสั่งตางๆที่จะใชตรวจสอบและสั่งงานพอรตกนักอน โดยสามารถจะจัดจํ าแนกออกเปน 2 กลุม คือ กลุมคํ าสั่งเกี่ยวกับการ Output Port ซึง่มีทั้งแบบ Byte และแบบ Bit และกลุมคํ าสั่งเกี่ยวกับการ Input Port ซึง่กม็ทีั้งแบบ Byte และแบบ Bit เชนเดียวกัน โดยรายละเอยีดการทํ างานของคํ าสั่งตางๆที่เกี่ยวกับพอรตมีดังนี้

Page 12: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -31- WWW.ETT.CO.TH

การใชงานพอรตเปน Output แบบ Byteในการเขาถึงขอมูลของพอรต Output แบบ Byte นีจ้ะเปนการเขียนขอมูลออกไปยังขาสัญญาณของพอรต

หรือ Pin Port โดยตรง โดย BASCOM-8051 จะใชรูปแบบคํ าสั่งในการเขียนคาใหกับพอรตดังนี้คือ

Px = var ‘ เขียนคา Output ไปยังพอรต Px ดวยคาของตัวแปร Var

- Px หมายถึง ชื่อของพอรตใดๆ เชน P0,P1,P2 และ P3 เปนตน- Var หมายถงึ คาคงที่หรือตัวแปรที่เก็บคาของขอมูลที่จะเขียนไปยังพอรต ซึ่งมีขนาด 1 ไบต

ตัวอยางการเขียนคา Output ใหพอรตDim A As Byte ‘ประกาศสรางตัวแปร A เปนแบบ ByteA = &B11110000 ‘ก ําหนดคาใหกับตัวแปร AP1 = A 'เขียนคา Output ใหกับพอรต P1 ดวยคาในตัวแปร A (11110000)P1 = &B10010101 ‘เขียนคา Output ใหกับพอรต P1 ดวยคาคงที่ 10010101

จากตวัอยางขางตนจะเห็นไดวาในการเขียนคา Output ใหกบัพอรตนั้น จะกระทํ าครั้งละ 1 ไบทเสมอ โดยคาของขอมูลที่เขียนออกไปยังพอรตนั้นจะเรียงลํ าดับบิตของขอมูล และขาสัญญาณของพอรต (Pin Port) ตามลํ าดับของบิตขอมูลและบิตของ Pin Port ซึง่ในการเขยีนคาขอมูลใหกับพอรตเพื่อกํ าหนดสถานะการทํ างานของ Pin Port นัน้จะสามารถก ําหนดคาใหกับพอรตดวยคาคงที่ หรือนํ าคาที่ตองการไปเก็บไวยังตัวแปรแบบ Byte แลวจึงเขยีนคาทีเ่ก็บไวในตัวแปรนั้นไปยังพอรตอีกทีหนึ่งก็ได เชนเดียวกัน ซึง่ในการก ําหนดคาขอมูลที่จะเขียนไปยังพอรตนัน้ขอแนะนํ าใหกํ าหนดดวยรูปแบบของตัวเลขฐานสอง (ใชเครื่องหมาย &B น ําหนาขอมูล) ซึง่จะทํ าใหสามารถสื่อความหมายของบติขอมูลทั้ง 8 บิต ไดโดยงายโดยขอมูลบิต 7 จะอยูทางซายสุดสวนบิต 0 จะอยูในตํ าแหนงขวาสุด ตัวอยางเชน เมื่อใชคํ าสั่ง P1 = &B10010101 จะไดวา

บิตขอมูล 7 6 5 4 3 2 1 0ขอมูล (&B10010101) 1 0 0 1 0 1 0 1

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓สัญญาณ Pin Port P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0สถานะ ของ Pin Port 1 0 0 1 0 1 0 1

แสดง การทํ างานของ Pin Port หลงัจากถกูเขียนขอมูลไปยังรีจิสเตอรของพอรต

Page 13: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -32- WWW.ETT.CO.TH

การใชงานพอรตเปน Output แบบ Bitในการใชงาน Pin Port ของ MCS51 ใหท ําหนาที่เปน Output นัน้ ในบางครั้ง อาจมีความจํ าเปนตองนํ า

สัญญาณของ Pin Port จากพอรตเดียวกันเพื่อแยกไปควบคุมการทํ างานของ Output แบบตางๆ โดยที่ Output แตละบิตนั้นอาจมีเงื่อนไขการทํ างานที่ไมพรอมกัน ซึ่งถาหากวาเรายังใชวิธีการเขียนคาขอมูลใหกับพอรตดวยวิธีการแบบ Byte นัน้เมือ่ตองการเปลี่ยนแปลงการทํ างานของ Output บิตใดบติหนึ่งก็ยอมจะตองสงผลกระทบตอ Outputบิตอื่นๆของพอรตที่เหลืออยูอยางหลีกเลี่ยงไมได ซึ่งถาไมตองการใหบิตอื่นๆในพอรตไดรับผลกระทบก็จะตองใชกระบวนการทางโลจกิเขามาชวย ซึ่งจะตองมีการเก็บสถานะครั้งสุดทายที่เขียนไปยังพอรตไวดวย เพื่อจะไดนํ ามาท ําการแกไขและเขียนคาไปยังพอรตใหม ตัวอยางเชน

Dim A As Byte ‘ประกาศสรางตัวแปร A เปนแบบ ByteA = &B00000000 ‘ก ําหนดคาใหกับตัวแปร A = 00000000A = A OR &B00000001 ‘เซ็ตบิต P1.0P1 = A ‘เขยีนคาไปยังพอรต P1 เพื่อ Update คา P1.0A = A AND &B11111110 ‘รีเซ็ตบิต P1.0P1 = A ‘เขยีนคาไปยังพอรต P1 เพื่อ Update คา P1.0

แสดงตัวอยางโปรแกรมการกํ าหนด Output แบบบิต โดยใชคํ าสั่งแบบ Byte

ซึง่จะเหน็ไดวาการเขียนโปรแกรมโดยการใชคํ าสั่งแบบ Byte เพือ่ส่ังงาน Output แบบ Bit นัน้ จะเกิดความยุงยากและท ําใหโปรแกรมมีความยาวมากขึ้น เพราะจะตองทํ าการคํ านวณดวยวิธีการทางโลจิก หรือการ Mask Bit กอนทีจ่ะเขียนคาไปยังพอรตในแตละครั้ง เชนเมื่อตองการจะเซ็ตบิตใดก็จะตองใชวิธีการ OR บิตขอมูลตํ าแหนงนั้นดวยคา “1” แตถาตองการรีเซ็ตบิตใดก็จะตองใชวิธีการ AND ขอมูลของบิตนั้นดวยคา “0” แทน

แตสํ าหรับในกรณีของการเขียนโปรแกรมดวย BASCOM-8051 นัน้ สามารถใชคํ าสั่งสํ าหรับควบคุมการท ํางานของ Output แบบ Bit ไดโดยไมสงผลกระทบตอสถานะของบิตอื่นๆที่ไมเกี่ยวของไดทันที โดยใชคํ าสั่งดังนี้

SET Px.y ‘เซ็ตบิต y ของพอรต Px ใหมีคาเปน “1”RESET Px.y ‘รีเซ็ตบิต y ของพอรต Px ใหมีคาเปน “0”

ตัวอยางเชนSET P1.0 ‘เซ็ตพอรต P1.0 ใหมีคาเปน “1”RESET P3.2 ‘รีเซ็ตพอรต P3.2 ใหมีคาเปน “0”

Page 14: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -33- WWW.ETT.CO.TH

การใชงานพอรตเปน Input แบบ Byteในการอานคาขอมูลจากพอรตแบบ Byte นัน้จะมลัีกษณะการทํ างานตรงกันขามกับการเขียนคา Output

ไปยงัพอรต ซึ่งจะตองมีการกํ าหนดตัวแปรแบบ Byte สํ าหรบัใชเก็บสถานะของสัญญาณหรือขอมูลที่อานไดจากพอรต โดย BASCOM-8051 จะสรางคํ าสั่งสํ าหรับอานคาสถานะ Input จากพอรตไวใหใชงานดังนี้คือ

var = Px ‘อานคาสถานะของพอรต Px มาเก็บไวยังตัวแปร Var

- Var หมายถึง คาคงที่หรือตัวแปรแบบ Byte ทีจ่ะใชเก็บคาของขอมูลที่จะอานไดจากพอรต- Px หมายถึง ชื่อของพอรตใดๆ เชน P0,P1,P2 และ P3 เปนตน

ตัวอยางการอานคา Input จากพอรตDim A As Byte ‘ประกาศสรางตัวแปร A เปนแบบ ByteP1 = &B11111111 ‘เขียนคา “1” ไปยัง Pin Port ทกุบติกอนที่จะอานสถานะ Input กลับมาA = P1 'อานคา Input จากพอรต P1 มาเก็บไวยังตัวแปร A

จากตวัอยางโปรแกรมขางตนจะเห็นไดวา กอนที่จะทํ าการอานคาสถานะของพอรตนั้น จะตองทํ าการเขียนคาของขอมูลที่เปน “1” ออกไปยงัพอรตกอนแลวจึงอานสถานะของ Pin จากพอรตกลับเขามาในภายหลัง ทั้งนี้ก็เนือ่งมาจากวาการทํ างานของพอรตตางๆใน MCS51 นัน้จะเปนแบบ 2 ทิศทาง (Bi Directional Port) ซึง่สามารถจะใชงานเปน Input และ Output ไดตลอดเวลาตามตองการโดยไมตองมีการโปรแกรมหนาที่การทํ างานของพอรตกอนแตอยางใด ดังนั้นถามีการสั่งอานคาสถานะ Input จาก Pin ของพอรต ซึ่งถูกเขียนคา “0” ไปยังพอรตไวกอนแลวก็จะทํ าใหวงจรขับ Output แบบ FET ของพอรตนํ ากระแสทํ าใหสถานะของ Pin Port มคีาเปน “0” ซึ่งจะทํ าใหเราอานคาได “0” ตลอดเวลาโดยไมสนใจสภาวะของ Input ทีต่อมายัง Pin Port เลย ดังนัน้เพื่อปองกันปญหาดังกลาวจึงจํ าเปนตองเขียนคา “1” ไปยงัพอรตกอนแลวจึงอานคาสถานะ Input ของพอรตกลับมาในภายหลัง ซึ่งเมื่อเขียนคา “1” ไปยงัพอรตแลวจะทํ าใหวงจร FET ไมท ํางานดังนั้นสถานะที่ Pin Port จงึมสีภาวะเปน “1” ตามสถานะการท ํางานของตัวตานทาน Pull Up ทีต่อไวที่ Pin ของพอรต ซึ่งถาหากวา Input ไมท ํางานก็จะทํ าใหเราอานคาสถานะของพอรตไดเปน “1” แตถา Input ท ํางานกจ็ะท ําใหเราอานคาสถานะของพอรตไดเปน “0” แทน

Page 15: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -34- WWW.ETT.CO.TH

การใชงานพอรตเปน Input แบบ Bitในกรณีที่มีการกํ าหนดหนาที่ของพอรตใหทํ างานเปน Input สํ าหรบัตรวจจับการทํ างานของอุปกรณแบบ

ตางๆ ซึ่งในบางครั้งอาจตองมีการเชื่อมตอกับ Input หลายๆชนิด โดยใชพอรตเดียวกัน แตแยก Pin กนั ซึง่ถาการท ํางานของ Input ตางๆนัน้ไมมคีวามเกี่ยวของกัน ถาหากวาใชวิธีการอานสถานะ Input ของพอรตแบบ Byte เขามายงัตวัแปร เมื่อตองการจะตรวจสอบการทํ างานของ Input เพยีงบติใดบติหนึ่งก็จะตองใชวิธีการทางโลจิกเขามาชวยดวย ดังตัวอยางโปรแกรมตอไปนี้

Dim A1 As Byte,A2 As Byte ‘ประกาศสรางตัวแปร A1 และ A2 เปนแบบ ByteA1 = &B00000000 ‘ก ําหนดคาใหกับตัวแปร A1 = 00000000A1 = A1 OR &B00000001 ‘เซ็ตบิต P1.0P1 = A1 ‘เขยีนคาไปยังพอรต P1 เพื่อ Update คา P1.0A2 = P1 ‘อานคาสถานะของพอรต P1 มาเก็บไวยังตัวแปร A2A2 = A2 AND &B00000001 ‘เคลยีรคาขอมูลบิตอื่นๆทิ้งเพื่อใหเหลือเฉพาะคาของบิต 0 เกบ็ไวในตัวแปร A2

ซึง่ในกรณีที่ตองการตรวจสอบสถานะของ Input จากพอรตเพียงบิตใดบิตหนึ่งนั้น ในกรณีที่ใชโปรแกรมภาษาเบสิก ของ BASCOM-8051 สามารถใชคํ าสั่งเฉพาะในการตรวจสอบสถานะของ Input บิตทีต่องการได โดยใชคํ าสั่งตางๆดังนี้

BITWAIT Px.y,Set ‘รอจนกระทั่งสถานะบิต y ของพอรต Px ถกูเซ็ตเปน “1”BITWAIT Px.y,Reset ‘รอจนกระทั่งสถานะบิต y ของพอรต Px ถกูรีเซ็ตเปน “0”Debounce Px.y , 1 , Sub1 ‘ถาพบวาสถานะบิต y ของพอรต Px เปน “1” (หลัง Debounce แลว) ‘จงึจะกระโดดไปโปรแกรมยอย Sub1Debounce Px.y , 0 , Sub1 ‘ถาพบวาสถานะบิต y ของพอรต Px เปน “0” (หลัง Debounce แลว) ‘จงึจะกระโดดไปโปรแกรมยอย Sub1

การใชคํ าสั่ง BITWAIT ในการตรวจสอบการทํ างานของ Input Pin สามารถก ําหนดสถานะการทํ างานของคํ าสั่งได 2 รูปแบบคือ ถาใชเงื่อนไข Set จะเปนการสั่งใหโปรแกรมวนรอบตรวจสอบสถานะของ Input บิตที่กํ าหนดไวจนกวาจะพบวาสถานะของ Input บิตนัน้มีคาเปน “1” โปรแกรมจงึจะขามไปทํ างานยังคํ าสั่งถัดไป ซึ่งถาหากพบวาสถานะของ Input ยงัคงเปน “0” อยูโปรแกรมก็จะยังคงวนรอบตรวจสอบสถานะของ Input อยูเชนเดิม แตถาใชเงื่อนไขเปน Reset กจ็ะเปนการสั่งใหโปรแกรมวนรอบตรวจสอบสถานะของ Input จนกวาจะพบวา Input บิตที่ก ําหนดไวนั้นมีสถานะเปน “0” จงึจะจบการท ํางานจากคํ าสั่งนี้ เพื่อขามไปทํ างานยังคํ าสั่งที่อยูถัดไป

Page 16: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -35- WWW.ETT.CO.TH

ตัวอยางเชนReset P3.2 ‘รีเซ็ตบิต P3.2 ใหมีคาเปน “0”Bitwait P1.7 , Reset 'ใหรอจนกวาบิต P1.7 จะมคีาเปน “0”Set P3.2 ‘เซ็ตบิต P3.2 ใหมีคาเปน “1”

จากตวัอยางโปรแกรมขางตนจะไดวา ในครั้งแรกจะทํ าการสั่งรีเซ็ตพอรต P3.2 ใหมีคาเปน “0” ไวกอน จากนัน้จงึสั่งใหโปรแกรมตรวจสอบสถานะ Input ของ P1.7 วามีคาเปน “0” หรือไม ถาพบวาเปน “0” กจ็ะท ําการเซ็ตใหพอรต P3.2 มคีาเปน “1” แตถายังพบวา P1.7 ยงัมคีาเปน “1” อยูโปรแกรมก็จะวนตรวจสอบสถานะทาง Input ของพอรต P1.7 อยูอยางนั้นไปตลอด

การใชคํ าสั่ง Debounce นัน้จะใชกับการตรวจสอบสถานะทาง Input ของพอรตที่ตอใชงานรวมกับอุปกรณจ ําพวกทีเ่ปนหนาสมัผัสตางๆ เชน สวิตช หรือ รีเลย เปนตน เนื่องจากเมื่อหนาสัมผัสเร่ิมตนทํ างานนั้น ในชวงเวลาเร่ิมตนที่หนาสัมผัสจะปด (Short) หรือเปด (Open) นัน้จะเกิดการ กระชาก ของสัญญาณ Input ซึง่เรยีกวาอาการ Bounce โดยจะมลัีกษณะเหมอืนกับการเปดและปดของหนาสัมผัสจํ านวนหลายสิบหลายรอยครั้งในชวงระยะเวลาส้ันๆ แตเนื่องจากการทํ างานของ CPU นัน้สามารถกระทํ าไดอยางรวดเร็วมาก (หลายลานคํ าสั่งภายใน 1วินาที) ดังนัน้จงึอาจท ําใหโปรแกรมตรวจพบวามีการทํ างานของหนาสัมผัสสวิตช(มกีารกดและปลอยสวิตช) หลายๆครั้ง ทั้งๆทีใ่นความเปนจริงแลวเกิดจากการทํ างานของสวิตชหรือหนาสัมผัสเพียงครั้งเดียว ซึ่งการแกปญหาการ Bounce นี้ วธิกีารหนึง่ซึง่นิยมใชกันมากที่สุดก็คือเมื่อตรวจพบวา Input ท ํางานในครัง้แรกนันจะมีการเพิ่มเทคนิคของการหนวงเวลาทิง้ไวชัว่ขณะหนึ่งกอนแลวจึงทํ าการอานคาสถานะของ Input เขามาตรวจสอบใหมอีกครั้งหนึ่งเพื่อตรวจสอบใหแนใจ ซึง่ลักษณะของการหนวงเวลาเพื่อรอตรวจสอบการทํ างานของ Input ซํ ้านีเ้รียกวาการ Debounce ซึ่งเปนเทคนคิหนึ่งของการแกปญหาการ Bounce ของหนาสัมผัส ซึ่งโปรแกรม BASCOM-8051 เองก็ไดสรางชุดคํ าสั่งสํ าหรับทํ าการตรวจสอบ Input พรอมกับการ Debounce ไวใหใชงานดวย ดังตัวอยาง

Config Debounce = 30 'ก ําหนดคาเวลาการ Debounce = 30mSDebounce P1.0 , 1 , Sub1 'ถาตรวจสอบ P1.0 แลวพบวาเปน “1” ใหกระโดดไปโปรแกรมยอย Sub1End

Sub1: ‘จดุเริ่มตนโปรแกรมยอย Sub1 Print "P1.0 was/is low" ‘แสดงการทํ างานของ P1.0Return ‘จดุสิ้นสุดโปรแกรมยอย Sub1

Page 17: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -36- WWW.ETT.CO.TH

การประยุกตใชงานพอรต Output

สํ าหรับการใชจะนํ าพอรตของ MCS51 ไปใชเปน Output Port นัน้ ตามปรกติแลวสัญญาณที่ไดจากพอรตจะอยูในระดับโลจิก TTL เทานัน้ ซึ่งถานํ าสัญญาณ Output Port ไปเชื่อมตอกับสัญญาณแบบ TTL เหมือนกันก็สามารถทีจ่ะเชื่อมตอกันไดโดยตรงเลย แตสํ าหรับในกรณีที่ตองการนํ าสัญญาณจากพอรตของ MCS51 ไปขับอุปกรณ Output อ่ืนๆที่ไมใชสัญญาณระดับโลจิก TTL แลว ก็จะตองออกแบบวงจรขับกระแสมาเชื่อมตอกับสัญญาณจากพอรตของ MCS51 เสยีกอนดังตัวอยาง

1KPORT

VCC

12

RELAY

แสดงตัวอยางการตอ Output Port กบัรีเลย

OPTO TRANSISTOR

560

Port

VCC VEXT

OUTPUT

REXT

แสดงตัวอยางการตอ Output Port แบบ ISOLATE

Page 18: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -37- WWW.ETT.CO.TH

การประยุกตใชงานพอรต Input

สํ าหรับการใชจะนํ าพอรตของ MCS51 ไปใชเปน Input Port นัน้ กจ็ะมลัีกษณะเชนเดียวกันกับ Outputกลาวคือถาสัญญาณที่จะตอมายัง Input อยูในระดับโลจิก TTL กส็ามารถเชื่อมตอกันไดโดยตรงทันที แตถาสัญญาณมีระดับที่สูงหรือตํ ากวาระดับโลจิกของ TTL กจ็ะตองทํ าการแปลงระดับสัญญาณนั้นใหอยูในระดับโลจิกเสยีกอนดังตัวอยาง

10K

Port

SW-PB

VCC

แสดงตัวอยางการตอ Input Port กบั Switch

R-IN

OPTO TRANSISTORINPUT

10K

VCC

Port

แสดงตัวอยางการตอ Input Port แบบ ISOLATE

Page 19: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -38- WWW.ETT.CO.TH

การทดลองใชงานพอรต Input / Output

สํ าหรบัในที่นี้จะขอยกตัวอยางโปรแกรมการทดลองแบบตางๆ ทั้งการ Input Port และ Output Port เพื่อเปนแนวทางใหผูอานไดใชทดลองและเริ่มตนเขาสูข้ันตอนของการเรียนรูที่รวดเร็วยิ่งขึ้น ซึ่งในอันดับแรกนั้นขอแนะนํ าใหผูอานทดลองและทํ าความเขาใจกับตัวอยางโปรแกรมตางๆเหลานี้ตามแนวทางที่ผูเขียนจัดทํ าไวใหเสียกอน แตเมื่อคิดวาสามารถทํ าความเขาใจถึงการทํ างานของโปรแกรมไดเปนอยางดีแลวจึงคอยทํ าการทดลองปรับเปลี่ยนหรือดัดแปลงการทํ างานของโปรแกรมในภายหลังอีกครั้งหนึ่งก็นาจะสามารถทํ าใหเขาใจและเพิ่มทักษะในการเขียนโปรแกรมเพื่อควบคุมและตรวจสอบ Input / Output ตางๆไดดียิ่งขึ้น

ซึง่ในการทดลองนั้นจํ าเปนตองบอรดไมโครคอนโทรลเลอรตระกูล MCS51 และอุปกรณ Input / Output แบบตางๆ เปนเครื่องมือในการทดลองประกอบกันดวย และเนื่องจากเหตุผลที่วา บอรดไมโครคอนโทรลเลอรตระกูล MCS51 นัน้ จะมอียูมากมายหลายแบบมาก ซึ่งการเขียนโปรแกรมก็จะตองอางอิงกับระบบฮารดแวรของบอรดที่จะใชดวย ไมเชนนั้นแลวโปรแกรมหรือคํ าสั่งบางอยางอาจไมสามารถใชงานได ที่ทํ างานแลวไดผลไมถูกตอง ดังนั้นเพื่อไมใหเกิดความสับสนในการทดลองและเพื่อใหผูอานสามารถทํ าการทดลองตามตัวอยางโปรแกรมในหนังสือนี้โดยไมตองทํ าการแกไขดัดแปลงโปรแกรมเลย ผูเขียนจะขอเลือกใชบอรดไมโครคอนโทรลเลอรตระกูล MCS51 ของบริษัท อีทีที จํ ากัด รุน “CP-JR51AC2 V1.0 EXP” เปนอปุกรณการทดลอง โดยตัวอยางโปรแกรมตางๆจะอางอิงกบัระบบฮารดแวรของบอรดรุนนี้เปนหลัก ไมวาจะเปนระบบหนวยความจํ า และ คาความถี่ X-TAL ของ CPU ซึ่งถาตองการน ําตัวอยางโปรแกรมไปดัดแปลงเพื่อทดลองกับระบบฮารดแวรรุนอื่นๆ ก็จะตองทํ าการแกไขคํ าสั่งหรือคาตัวเลอืกในโปรแกรมใหสอดคลองกับวงจรของบอรดที่จะนํ าไปใชดวย

ตัวอยางการทดลองที่1.1 โปรแกรมไฟกระพริบดวยLED 1 ดวงแบบที่1 (Out Port แบบ Bit)สํ าหรบัตัวอยางนี้จะเปนการสั่ง ON/OFF การท ํางานของหลอดแสดงผล LED ซึง่ถอืวาเปนอุปกรณสํ าหรับ

ใชจ ําลองการทํ างานแทนอุปกรณ Output อ่ืนๆไดเปนอยางดี ซึ่งการที่เราสามารถเขียนโปรแกรมเพื่อควบคุมการท ํางานของหลอดแสดงผล LED ใหสามารถ ON และ OFF ตามเงือ่นไขตางๆไดนั้น ก็ยอยสามารถที่จะดัดแปลงเพื่อน ําไปใชงานจริงๆสํ าหรับส่ังงานกับอุปกรณ Output แบบอื่นๆได ไมวาจะเปน Relay,Solid State Relay หรืออุปกรณ Output อ่ืนๆทีม่กีารทํ างานในลักษณะของการ ON/OFF ไดโดยงาย โดยการทดลองนี้ใหตอวงจรสํ าหรับทดสอบการทํ างานของโปรแกรมดังนี้

560 LED

P2.6

VCC

รปูแสดง วงจรที่จะใชประกอบการทดลองที่1.1

Page 20: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -39- WWW.ETT.CO.TH

$regfile = "T8951AC2.DAT" 'ก ําหนดใหใชกับ CPU เบอร T89C51AC2(Atmel)$ramstart = 0 ‘ก ําหนดตํ าแหนงแอดเดรสเริ่มตนของ RAM ภายใน$ramsize = 256 ‘ก ําหนดขนาดของ RAM ภายใน$crystal = 36864000 'ก ําหนดความถี่เปน 18.432MHz (X2 Mode)ckcon = &B00000001 'ก ําหนดให CPU ท ํางานในโหมด X2 (6-Clock)

Dim Led As Bit ‘ประกาศตัวแปรแบบ BitLed = 0 ‘ก ําหนดคาเริ่มตนใหตัวแปรDo ‘จุดเริ่มตน DO..LOOP P2.6 = Led ‘ใหพอรต P2.6 มคีาเหมือนกับตัวแปร LED Wait 1 ‘หนวงเวลาไว 1 วนิาที Led = Not Led ‘กลบัสถานะของตัวแปร LED ใหมีคาเปนตรงขามLoop ‘วนรอบไมรูจบ

แสดง โปรแกรมการทดลองที่ 1.1

การท ํางานของตัวอยางโปรแกรมที่ 1.1 จะเปนโปรแกรมควบคุมการ ติด-ดับ ของ LED (TEST) ของบอรดซึ่ง LED ดังกลาวจะตออยูกับพอรต P2.6 โดยการท ํางานของโปรแกรมจะเปนลักษณะของโปรแกรมไฟกระพริบ คือ LED จะตดิสวาง 1 วินาที และ ดับ 1 วินาที สลับกันไปตลอดเวลา

สํ าหรับหลักการทํ างานของโปรแกรมนี้จะอาศัยเทคนิคของการสรางตัวแปร โดยกํ าหนดใหมีการสรางตัวแปรชื่อ LED โดยประกาศเปนตัวแปรชนิด Bit ไว ซึ่งคุณสมบัติของตัวแปรแบบ Bit นีจ้ะสามารถเก็บคาของขอมูลไดขนาด 1 บิต โดยคาขอมูลจะสามารถเก็บได 2 คา คือ “0” และ “1” เทานัน้ ซึ่งตามปรกติแลวตัวแปรแบบนี้มักนิยมใชสํ าหรบัเก็บคาสถานะการทํ างานหรือเก็บเงื่อนไขแบบ Boolean ซึง่จะใหคาเปนจริงหรือเท็จอยางใดอยางหนึ่งเทานัน้ แตในทีน่ีเ้ราจะนํ ามาเก็บคาสถานะการทํ างานของ LED คือ ติด และ ดับ ซึ่งการสั่งให LED ติด และ ดับนั้น จะใชคํ าสั่งทางโลจิก คือ Led = Not Led ซึง่เปนการสั่งใหโปรแกรมกลับคาสถานะของขอมูลที่เก็บไวในตัวแปร Led เปนตรงกันขาม โดยถากอนหนานั้นตัวแปร Led มคีาเปน “1” กจ็ะท ําใหคาของตัวแปร LED มคีาเปน “0” แตถาคาของตัวแปร Led มคีาเปน “0” อยูก็จะทํ าใหคาของตัวแปร Led กลบัเปน “1” แทน สวนการสั่งใหพอรต P2.6 ควบคุมการติดและดับของ Led นัน้ จะใชวิธีการใหคา คือ P2.6 = LED ซึง่ค ําสั่งนี้จะทํ าใหคาของพอรต P2.6 มีคาเหมอืนกับคาที่เก็บไวในตัวแปร Led ทกุอยาง สวนระยะเวลาในการติดและดับของ LED นัน้จะกํ าหนดจากคํ าสั่ง Wait โดยการท ํางานของโปรแกรมนี้จะเปนแบบวนรอบไมรูจบ เนื่องจากไมมีการกํ าหนดเงื่อนไขการออกจากวงรอบใหกับคาสั่ง Do..Loop ดังนัน้การท ํางานของโปรแกรมจึงวนรอบทํ างานอยูภายในวงรอบระหวาง Do และ Loop อยูตลอดเวลาไมรูจบ ซึ่งเราก็จะเห็นเปนการติดและดับของ LED สลับกันไป

Page 21: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -40- WWW.ETT.CO.TH

ตัวอยางโปรแกรมที่ 1.2 โปรแกรมไฟกระพริบดวยLED 1 ดวงแบบที่2 (Out Port แบบ Bit)โดยตวัอยางการทดลองนี้จะใชวงจรประกอบการทดลองเหมือนกันกับที่ใชใน ตัวอยางการทดลองที่ 1.1 ทุก

อยาง โดยผลการทดลองก็จะมีลักษณะเหมือนกันดวย เพียงแตจะใชเทคนิคของการเขียนโปรแกรมที่แตกตางกัน โดยตวัอยางโปรแกรมนี้จะใหคํ าสั่ง Set และ Reset สํ าหรับส่ังงานพอรต P2.6 แทน โดยยังคงใชคํ าสั่งหนวงเวลาแทรกระหวางการ Set และ Reset อยูเชนเดิม

$regfile = "T8951AC2.DAT" 'ก ําหนดใหใชกับ CPU เบอร T89C51AC2(Atmel)$ramstart = 0 ‘ก ําหนดตํ าแหนงแอดเดรสเริ่มตนของ RAM ภายใน$ramsize = 256 ‘ก ําหนดขนาดของ RAM ภายใน$crystal = 36864000 'ก ําหนดความถี่เปน 18.432MHz (X2 Mode)ckcon = &B00000001 'ก ําหนดให CPU ท ํางานในโหมด X2 (6-Clock)

Led Alias P2.6 ‘ก ําหนดใชชื่อ LED มคีาเหมือนกับ P2.6Do ‘จุดเริ่มตน DO..LOOP Set Led ‘ใหพอรตควบคุม LED(P2.6) เปน “1” Wait 1 ‘หนวงเวลาไว 1 วนิาที Reset Led ‘ใหพอรตควบคุม LED(P2.6) เปน “0” Wait 1 ‘หนวงเวลาไว 1 วนิาทีLoop ‘วนรอบไมรูจบ

แสดง โปรแกรมการทดลองที่ 1.2

จดุทีน่าสนใจในโปรแกรมนี้จะอยูตรงที่มีการประกาศใหใชชื่อ LED มคีาเปรียบเสมือนกับชื่อพอรต P2.6 ซึ่งจะท ําใหเราสามารถอางชื่อ LED แทนชื่อ P2.6 ในโปรแกรมไดทันที ซึ่งคํ าสั่งนี้จะมีประโยชนมาก เนื่องจากสามารถก ําหนดชื่อของพอรตใหมีชื่อที่ส่ือความหมายกับ Input หรือ Output ทีจ่ะน ําไปใชงานจริงๆได ไมเชนนั้นแลวก็จะตองมาคอยจดจํ ากันวาพอรตใดใชควบคุมอุปกรณอะไร หรือเมื่อตองการปรับปรุงแกไขโปรแกรมในภายหลัง เชน เมือ่ตองการเปลี่ยนใหพอรต P1.0 ท ําหนาที่ควบคุมการติดและดับของ LED แทนพอรต P2.6 กส็ามารถแกไข คาของ P2.6 ทีอ่ยูหลังคํ าสั่ง Alias ใหเปน P1.0 เพยีงจดุเดียว แลวสั่งแปลโปรแกรมใหมไดทันที แตถาไมมีการใชคํ าสั่ง Alias สํ าหรับประกาศชื่อ LED ใหมคีาเหมือนกับ P2.6 ไวแลว ก็จะตองเขาไปคนหาและแกไขประโยค P2.6 ทุกตํ าแหนงที่อยูในโปรแกรมใหเปน P1.0 ทัง้หมด ซึง่ถามีการอางถึง P2.6 ไวหลายๆแหงในโปรแกรมก็จะทํ าใหเสียเวลาในการคนหาและแกไขเปนอยางมาก

Page 22: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -41- WWW.ETT.CO.TH

ตัวอยางโปรแกรมที่ 1.3 โปรแกรมไฟกระพริบดวย LED หลาย ดวง (Out Port แบบ Byte)สํ าหรบัตัวอยางนี้จะเปนการแสดงใหเห็นตัวอยางโปรแกรมสํ าหรับส่ังงานพอรต Output โดยใชการสั่งงาน

แบบ Byte ซึ่งจะทํ าใหเกิดการเปลี่ยนแปลงการทํ างานของทุกบิตในพอรตพรอมๆกัน ซึ่งการใชงานลักษณะนี้จะเหมาะกบัการควบคุมการทํ างานของอุปกรณ Output ซึง่ตองการสัญญาณควบคุมมากกวา 1 เสนสัญญาณ โดยในตัวอยางนี้เราจะใช LED จ ํานวน 8 ตัว เปนอปุกรณสํ าหรับแสดงสถานะการทํ างานของพอรต ซึ่งก็คือการใชพอรตสั่งให LED ติด และ ดับ ดวยรูปแบบตางๆนั่นเอง

ซึ่งในการทดลองตามตัวอยางการทดลองนี้จะตองตอวงจร LED สํ าหรับแสดงผลการทํ างานของพอรตจ ํานวน 8 บิต ดวย โดยในการตอวงจร LED นัน้ จะใชวงจรแบบรับกระแส (Current Sink) กลาวคือ จะตอแหลงจายไฟเขากับขา Anode (+) ของ LED สวนขา Cathode (-) จะตอผานตัวตานทานคา 560โอหมสํ าหรับจํ ากัดกระแสใหเหมาะสมกับ LED โดยจะใชขาสัญญาณจาก Pin Port ของ CPU สํ าหรบัท ําหนาที่ควบคุมการติดดับของ LED โดยถากํ าหนดให Pin Port เปนโลจิก “1” จะท ําใหไมมีกระแสไหลผาน LED ทํ าให LED ดับ แตเมื่อกํ าหนดให Pin Port เปนโลจิก “0” จะท ําใหมีกระแสไหลจากแหลงจายผาน LED และตวัตานทานมายัง Pin Port ลง Ground จึงจะทํ าให LED ติดสวาง ดังรูป

560

560

560

560

560

560

560

560

D0

D1

D2

D3

D4

D5

D6

D7

P0.0

P0.1

P0.2

P0.3

P0.4

P0.5

P0.6

P0.7

VCC

รปูแสดง วงจรที่จะใชประกอบการทดลองที่1.3

Page 23: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -42- WWW.ETT.CO.TH

$regfile = "T8951AC2.DAT" 'ก ําหนดใหใชกับ CPU เบอร T89C51AC2(Atmel)$ramstart = 0 ‘ก ําหนดตํ าแหนงแอดเดรสเริ่มตนของ RAM ภายใน$ramsize = 256 ‘ก ําหนดขนาดของ RAM ภายใน$crystal = 36864000 'ก ําหนดความถี่เปน 18.432MHz (X2 Mode)ckcon = &B00000001 'ก ําหนดให CPU ท ํางานในโหมด X2 (6-Clock)

Dim Count As Byte , Outled As Byte ‘ประกาศตัวแปรPortled Alias P0 ‘ประกาศพอรตสํ าหรับควบคุม LEDDo ‘จดุเริ่มตนของการวนรอบ DO..LOOP Restore Tab_led ‘ชีไ้ปทีตํ่ าแหนงเริ่มตนของตาราง Tab_led For Count = 1 To 16 ‘ก ําหนดคาการวนรอบสํ าหรับเปดตาราง Read Outled ‘อานขอมูลในตาราง Tab_led ตามการชี้ของ Count Portled = Outled ‘น ําขอมูลที่อานไดจากตารางออกไปยังพอรต Wait 1 ‘หนวงเวลา 1 วินาที Next ‘เพิ่มคา Count และวนไปอานขอมูลซํ้ าจนครบ 16 คร้ังLoop ‘กลับไปเร่ิมตนเปดตารางใหม(วนรอบไมรูจบ)

Tab_led: ‘ตํ าแหนงเริ่มตนของตารางขอมูลData &B11111110 ‘ขอมูลลํ าดับแรกในตารางData &B11111101Data &B11111011Data &B11110111Data &B11101111Data &B11011111Data &B10111111Data &B01111111Data &B11111111Data &B01111110Data &B10111101Data &B11011011Data &B11100111Data &B11011011Data &B10111101

Data &B01111110 ‘ขอมูลลํ าดับสุดทายในตาราง

แสดง โปรแกรมการทดลองที่ 1.3

Page 24: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -43- WWW.ETT.CO.TH

การท ํางานของโปรแกรมในตัวอยางการทดลองที่ 1.3 จะเปนการสั่งแสดงคาโลจิกของพอรตดวย LED โดยจะเปนลกัษณะของไฟวิ่งในรูปแบบตางๆ จํ านวน 16 รูปแบบ ซึ่งหลักการทํ างานของโปรแกรมนี้จะใชเทคนิคของการสรางตารางขอมูลสํ าหรับควบคุมการติดและดับของ LED โดยแทนคาสวนที่ติดดวย “0” และแทนคาสวนที่ดับดวยคา “1” จากนัน้กจ็ะน ําคาขอมูลทั้งหมดมาจัดเรียงกันไวในรูปแบบของตารางขอมูล

โดยในการอานขอมูลจากตารางนั้น ในครั้งแรกจะใชคํ าสั่ง Restore Tab_led สํ าหรับส่ังใหโปรแกรมเริ่มชี้คาลํ าดับของขอมูลในตาราง Tab_led โดยใหเร่ิมตนชี้ไปที่ตํ าแหนงเริ่มตนของขอมูลในตารางกอนเปนลํ าดับแรก จากนั้นจะใชคํ าสั่ง For..Next สํ าหรบัก ําหนดจ ํานวนการวนรอบอานขอมูลจากตารางจํ านวน 16 คร้ัง โดยการอานคาขอมูลจากตารางจะใชคํ าสั่ง Read สํ าหรบัอานขอมูล โดยทุกๆครั้งที่ส่ังอานขอมูลดวยคํ าสั่ง Read นัน้ คาตัวชี้ขอมลูในตารางจะเพิ่มคาขึ้นครั้งละ 1 คา โดยอัตโนมัติ ซึ่งจากตัวอยางโปรแกรมนั้น จะก ําหนดจํ านวนครั้งในการวนรอบอานขอมูลไวทั้งหมด 16 คร้ัง และทุกๆครั้งก็จะอานขอมูลมาเก็บไปในตัวแปรชื่อ Outled จากนัน้จงึนํ าคาที่อานไดเขียนไปยังพอรตเพื่อแสดงผลเปนคา ตัวเลข ตางๆ ที่ LED โดยจะมกีารสั่งหนวงเวลาสํ าหรับแสดงผลแตละครั้งเปนเวลา 1 วนิาทดีวย ซึ่งเมื่อทํ าการวนรอบอานขอมูลจากตารางจนครบ 16 คร้ังแลวก็จะยอนกลับไปเร่ิมตนการเปดตารางโดยเริ่มตนจากลํ าดับแรกอีก โดยโปรแกรมจะวนรอบทํ างานซํ้ าอยูอยางนี้ไมรูจบ ซึ่งการทํ างานของโปรแกรมก็จะเปนการวนรอบแสดงไฟวิ่งที่ LED ในรูปแบบตางๆตามที่กํ าหนดไวในตาราง

ซึ่งโปรแกรมนี้สามารถดัดแปลงหรือเพิ่มเติมรูปแบบการติดดับของ LED ไดตามตองการ เพียงแตตองก ําหนดคาจ ํานวนครั้งในการวนรอบใหสอดคลองกับจํ านวนของขอมูลในตารางที่กํ าหนดไวดวย

สํ าหรบัเทคนคิในการสรางตารางขอมูลนั้น จะเห็นไดวาในตัวอยางโปรแกรมนั้นจะใชวิธีการกํ าหนดรูปแบบขอมลูดวยคาตัวเลขแบบฐานสอง เนื่องจากสามารถสื่อความหมายของการติดดับของ LED ไดงายกวาตัวเลขแบบอ่ืนๆ โดยจะสงัเกตุเห็นวาขอมูล แตละชุดจะมีขนาด 8 บิต หรือ 1 ไบท โดยมีเครื่องหมาย “&B” น ําหนาขอมูล เพื่อเปนการบอกใหโปรแกรม BASCOM-8051 ทราบวาขอมูลที่กํ าหนดไวนั้นเปนคาของตัวเลขแบบฐานสอง โดยคาของตัวเลขฐานสองนั้น จะแทนคาแตละบิตของขอมูลดวยคา “0” หรือ “1” อยางใดอยางหนึ่งเทานั้น ซึ่งบิตที่มีนัยสํ าคัญต่ํ าสดุจะมีลํ าดับที่ของบิตขอมูลเปนศูนย ดังนั้นตัวเลขฐานสองของขอมูลขนาด 8 บิต หรือ 1 ไบท จึงมีลํ าดับการนับของบติเริม่จากศูนยถึงเจ็ด โดยเรียงลํ าดับจากบิตเจ็ด ซึ่งเปนบิตที่มีนัยสํ าคัญสูงที่สุด (MSB) ไวทางดานซายสุดสวนบติขอมลูลํ าดับถัดไปก็จะเรียงลํ าดับตอเนื่องกันไป โดยที่บิตศูนยซึ่งเปนบิตที่มีนัยสํ าคัญตํ่ าสุด (LSB) จะถูกวางไวทางขวาสุดดังนี้

บิตขอมูล 7 6 5 4 3 2 1 0ขอมูล (&B10010101) 1 0 0 1 0 1 0 1

แสดง การจดัวางลํ าดับขอมูลของเลขฐานสองขนาด 1 ไบท

Page 25: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -44- WWW.ETT.CO.TH

ตัวอยางการทดลองที่ 1.4 โปรแกรมแสดงผลเลข HEX ดวย 7 Segment (Out Port แบบ Byte)สํ าหรบัตัวอยางนีจ้ะเปนการดัดแปลงมาจากตัวอยางการทดลองที่ 1.3 โดยจะเปลี่ยนการแสดงผลจากการ

ใช LED จ ํานวน 8 ดวง มาเปนชุดแสดงผลแบบตัวเลข 7 สวน หรือ 7 Segment โดยการทํ างานของโปรแกรมจะเปนการใชพอรตสั่งให 7 Segment แสดงผลเปนคาตัวเลขตางๆนั่นเอง

สํ าหรับตัวเลข 7 สวน หรือ 7 Segment นัน้จะมีโครงสรางเปนแบบ LED เหมอืนกัน เพียงแตมีการจัดเรียงตํ าแหนงของตัว LED ใหอยูในตํ าแหนงตางๆกัน โดย LED แตละสวนจะถูกเรียกวา Segment โดยแตละ Segment กจ็ะมชีือ่เรียกที่แตกตางกันออกไป แตโดยมากมักนิยมเรียกชื่อเปนสัญลักษณตัวอักษรคือ a,b,c,d,e,f,g และ Dpตามลํ าดับ ซึง่ในปจจบัุนจะมีอยูดวยกัน 8 สวน แตจะยังคงเรียกชื่อเปน 7 Segment อยูเชนเดิม โดยสวนที่เพิ่มข้ึนมาไดแกสวนที่ใชแสดงจุด (Segment Dp) โดยการติดและดับของ LED สามารถที่จะกํ าหนดรูปแบบใหแสดงคาออกมาเปนตัวเลขหรือสัญลักษณตางๆไดหลายแบบ

a

b

c

d

e

f

g

dp

แสดง การจัดเรียงตํ าแหนง Segment ของ 7 Segment

สํ าหรับในปจจุบันนี้จะมีการผลิตตัว 7 Segment ออกมาวางจ ําหนายกันมากมายหลายขนาด แตสามารถแบงออกไดเปน 2 แบบ คือ Common Anode หรือ Common บวก โดยจะมีการนํ าขา Anode (+) ของ LED ตอรวมเขาดวยกันแลวตอออกมาไวที่ขา Common สวนขา Cathode (-) กจ็ะตอออกมาโดยกํ าหนดเปนชื่อของแตละ Segment ตามปรกติ สวนอีกแบบหนึ่งก็คือแบบ Common Cathode หรือ Common ลบ ซึง่แบบนี้จะนํ าขา Cathode (+) ของ LED ทัง้หมดตอรวมกันไวเปนขา Common สวนขา Anode ของแตละ Segment กจ็ะตอออกมาตามชื่อของแตละ Segment เหมือนกัน

Page 26: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -45- WWW.ETT.CO.TH

โดยในการตอวงจรใชงานนั้น ถาเปนแบบ Common Cathode จะนิยมตอ Common ลง Ground หรือ ตอผานอุปกรณอ่ืนๆลง Ground แทน แตในสวนของแตละ Segment นัน้กจ็ะตอเขากับสัญญาณจากภายนอก โดยใชตัวตานทานสํ าหรับทํ าหนาที่จํ ากัดกระแสใหกับแตละ Segment อนกุรมคั่นกลางระหวางสัญญาณและขา Anode ของแตละ Segment ไวดวย โดยวงจรแบบนี้จะใชกับสัญญาณที่สามารถขับกระแสไดสูงๆ ประมาณ 20mA เปนอยางนอย ซึ่งในกรณีของไมโครคอนโทรลเลอรตระกูล MCS51 นัน้ คุณสมบัติของพอรตมักจะไมสามารถขับกระแสใหกับ LED ไดโดยตรง ถาตองการตอพอรตของ MCS51 เขากับ 7 Segment แบบ Common Cathode นีจ้ะตองตอวงจรขับกระแสเพิ่มเติมดวย หรือเปลี่ยนไปใชกับ 7 Segment แบบ Common Anode แทน

P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7

a

bf

c

g

de

DPY1234567

abcdefg

8 dp

dp

Common Cathode560 x 8

แสดงการตอวงจร 7 Segment แบบ Common Cathode(-)

สํ าหรับการตอวงจรของ 7 Segment แบบ Common นัน้ จะใชวิธีการตรงกันขามกับแบบ CommonCathode กลาว คือ จะตอแหลงจายไฟเขากับขา Common สวนขาของแตละ Segment กจ็ะอนกุรมกับตัวตานทานมาเขากับพอรต หรือสัญญาณดังรูป

P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7

a

bf

c

g

de

DPY1234567

abcdefg

8 dp

dp

Common Anode

560 x 8

VCC

แสดงการตอวงจร 7 Segment แบบ Common Anode(+)

Page 27: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -46- WWW.ETT.CO.TH

$regfile = "T8951AC2.DAT" 'ก ําหนดใหใชกับ CPU เบอร T89C51AC2(Atmel)$ramstart = 0 ‘ก ําหนดตํ าแหนงแอดเดรสเริ่มตนของ RAM ภายใน$ramsize = 256 ‘ก ําหนดขนาดของ RAM ภายใน$crystal = 36864000 'ก ําหนดความถี่เปน 18.432MHz (X2 Mode)ckcon = &B00000001 'ก ําหนดให CPU ท ํางานในโหมด X2 (6-Clock)

Dim Count As Byte ‘ประกาศตัวแปรDim Outdata As Byte

Port7seg Alias P0 ‘ก ําหนดใหใชพอรต P0 สํ าหรับแสดงผล 7 Segment

Do ‘จดุเริ่มตนของการวนรอบ DO..LOOP Restore Tab_7seg ‘ชีไ้ปทีตํ่ าแหนงเริ่มตนของตาราง Tab-7Seg For Count = 1 To 16 ‘กํ าหนดคาการวนรอบสํ าหรับเปดตาราง Read Outdata ‘อานขอมูลในตาราง Tab_7Seg ตามการชี้ของ Count OutData = Not OutData ‘กลับคาโลจกิของขอมูล เพื่อใชกับ Common Anode Port7seg = Outdata ‘น ําขอมูลที่อานไดจากตารางออกไปยังพอรต Wait 1 ‘หนวงเวลา 1 วินาที Next ‘เพิ่มคา Count และวนไปอานขอมูลซํ้ าจนครบ 16 คร้ังLoop ‘กลบัไปเร่ิมตนเปดตารางใหม(วนรอบไมรูจบ)

Tab_7seg: ‘ตํ าแหนงเริ่มตนของตารางขอมูลData &H3F , &H06 , &H5B , &H4F 'ขอมูลการแสดงผลของ 0 1 2 3Data &H66 , &H6D , &H7D , &H27 'ขอมูลการแสดงผลของ 4 5 6 7Data &H7F , &H6F , &H77 , &H7C 'ขอมูลการแสดงผลของ 8 9 A BData &H39 , &H5E , &H79 , &H71 'ขอมูลการแสดงผลของ C D E F

แสดง โปรแกรมการทดลองที่ 1.4

การท ํางานของโปรแกรมในตัวอยางการทดลองที่ 1.4 จะเปนการสั่งแสดงผลคาตัวเลขแบบฐานสิบหกขนาด1หลกั ซึง่จะมีทั้งหมด 16 คาคือ ตัวเลข 0-9 และ A-F โดยหลกัการทํ างานของโปรแกรมนี้จะใชเทคนิคของการสรางตารางขอมูลสํ าหรับควบคุมการติดและดับของ 7 Segment โดยแทนคาสวนที่ติดดวย “1” และแทนคาสวนที่ดับดวยคา “0” จากนัน้กจ็ะน ําคาขอมูลทั้งหมดมาจัดเรียงกันไวในรูปแบบของตารางขอมูล โดยจัดเรียงตามลํ าดับของ

Page 28: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -47- WWW.ETT.CO.TH

ตัวเลขที่ตองการจะนํ ามาแสดงผลจาก 0-9 และ A-F ตามลํ าดับ โดยใชคํ าสั่ง Data แลวตามดวยขอมูลของแตละไบท โดยจะใชเครื่องหมาย คอมมา(,) เปนตัวแบงแยกขอมูลในตาราง

โดยในการอานขอมูลจากตารางนั้น ในครั้งแรกจะใชคํ าสั่ง Restore Tab_7Seg สํ าหรับส่ังใหโปรแกรมเริ่มชี้คาลํ าดับของขอมูลในตาราง Tab-7Seg โดยใหเร่ิมตนชี้ไปที่ตํ าแหนงเริ่มตนของขอมูลในตารางกอนเปนลํ าดับแรก จากนั้นจะใชคํ าสั่ง For..Next สํ าหรบัก ําหนดจ ํานวนการวนรอบอานขอมูลจากตารางจํ านวน 16 คร้ัง โดยการอานคาขอมูลจากตารางจะใชคํ าสั่ง Read สํ าหรบัอานขอมูล โดยทุกๆครั้งที่ส่ังอานขอมูลดวยคํ าสั่ง Read นัน้ คาตัวชี้ขอมลูในตารางจะเพิ่มคาขึ้นครั้งละ 1 คา โดยอัตโนมัติ ซึ่งจากตัวอยางโปรแกรมนั้น จะก ําหนดจํ านวนครั้งในการวนรอบอานขอมูลไวทั้งหมด 16 คร้ัง และทุกๆครั้งก็จะอานขอมูลมาเก็บไปในตัวแปรชื่อ OutData จากนัน้จึงนํ าคาที่อานไดเขียนไปยังพอรตเพื่อแสดงผลเปนคา ตัวเลข ตางๆ ที่ 7 Segment ซึง่ถาตอกับวงจรของ 7 Segment แบบ Common Anode(+) จะตองทํ าการกลับคาสถานะทางโลจิกของขอมูล โดยใชคํ าสั่ง Outdata = Not Outdata ดวย เพือ่กลับสถานะทางโลจกิของขอมูลใหเปนตรงกันขาม เนื่องจากตารางขอมูลที่ใชควบคุมการติดและดับของ LED นัน้จะแทนคาการติดดวย “1” และแทนคาการดับดวย “0” ซึง่ถาใชกับวงจรแบบ Common Cathode จะสามารถใชงานไดทันที แตถาใชกับวงจรแบบ Common Anode กจ็ะตองกลับคาของขอมูลใหเปนตรงขามเสียกอน เนื่องจากวงจรแบบ Common Anode นัน้ LED จะติดเมื่อพอรตเปนโลจิก “0” โดยจากโปรแกรมจะมีการสั่งหนวงเวลาสํ าหรบัแสดงผลแตละครั้งเปนเวลา 1 วินาทีดวย ซึ่งเมื่อทํ าการวนรอบอานขอมูลจากตารางจนครบ 16 คร้ังแลวก็จะยอนกลับไปเร่ิมตนการเปดตารางโดยเริ่มตนจากลํ าดับแรกอีก โดยโปรแกรมจะวนรอบทํ างานซํ้ าอยูอยางนี้ไมรูจบ ซึง่การท ํางานของโปรแกรมก็จะเปนการวนรอบแสดงคา 0-9 และ A-F ที่ 7 Segment

Page 29: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -48- WWW.ETT.CO.TH

ตัวอยางการทดลองที่ 1.5 โปรแกรม Switch ON/OFF ควบคุม LED (Input แบบ Bit)สํ าหรบัตัวอยางการทดลองนี้จํ าเปนตองใชอุปกรณ Output สํ าหรบัแสดงผลการทํ างานของโปรแกรมดวย

เนือ่งจากอุปกรณที่เปน Input เพยีงอยางเดยีวไมสามารถแสดงใหเห็นการทํ างานของโปรแกรมได โดยในตัวอยางนี้จะใช LED สํ าหรับเปน Output แสดงการทํ างานของโปรแกรม สวนอุปกรณ Input จะใช Switch แบบ Push Button หรือ กด-ติด ปลอย-ดับ จ ํานวนอยางละ 1 ตัวเปนอุปกรณการทดลอง โดยใหตอวงจรดังนี้

560 LED

P2.6

VCC

10K

P0.0

SW ON/OFF

VCC

รปูแสดง วงจรที่จะใชประกอบการทดลองที่1.5

สํ าหรบัการทํ างานของโปรแกรมนี้จะเปนการตรวจสอบการกดสวิตชแบบ Push Button ซึง่ตอไวกับพอรต Input ของ P0.0 โดยเมือ่มกีารตรวจพบการกดสวิตชแตละครั้งโปรแกรมก็จะทํ าการกลับสถานะของ LED ใหเปนตรงกันขาม ดังนั้นการทํ างานของโปรแกรมจึงเปนการสั่ง ON/OFF การทํ างานของ LED โดยการควบคุมของ Switch โดยในครั้งแรกโปรแกรมจะกํ าหนดให LED อยูในสภาวะ ON แตเมือ่มีการกดสวิตชคร้ังแรกก็จะเปนการสั่งใหทํ าการ OFF LED แตถากดสวิตชซํ้ าใหมอีกก็จะเปนการสั่ง ON LED และถามีการกดสวิตชซํ้ าใหมอีกก็จะเปนการสั่ง ให OFF LED สลับกันไปอยางนี้เร่ือยๆไมรูจบ

Page 30: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -49- WWW.ETT.CO.TH

$regfile = "T8951AC2.DAT" 'ก ําหนดใหใชกับ CPU เบอร T89C51AC2(Atmel)$ramstart = 0 ‘ก ําหนดตํ าแหนงแอดเดรสเริ่มตนของ RAM ภายใน$ramsize = 256 ‘ก ําหนดขนาดของ RAM ภายใน$crystal = 36864000 'ก ําหนดความถี่เปน 18.432MHz (X2 Mode)ckcon = &B00000001 'ก ําหนดให CPU ท ํางานในโหมด X2 (6-Clock)

Dim LedStatus As Bit ‘ประกาศตัวแปร Ledstatus เปนแบบ BitSwitch Alias P0.0 ‘ประกาศให Switch หมายถึง P0.0LedOutput Alias P2.6 ‘ประกาศให LedOutput หมายถึง P2.6Ledstatus = 0 ‘ก ําหนดคาเริ่มตนใหตัวแปรLedOutput = LedStatus ‘ก ําหนดสถานะเริ่มตนให LED = ONDo ‘เร่ิมตนการวนรอบ Debounce Switch , 0 , Prog1 , Sub ‘รอจน Switch ถกูกดจึงกระโดดไปที่โปรแกรม Prog1Loop ‘กลับไปวนรอบ DO..LOOP ไมรูจบProg1: ‘ตํ าแหนงเริ่มตนโปรแกรมยอย Prog1 LedStatus = Not Ledstatus ‘กลับสถาะของตัวแปร Ledstatus เปนตรงขาม LedOutput = LedStatus ‘เปลีย่นคาสถานะของพอรตตามคาของ LedstatusReturn ‘จบการทํ างานจากโปรแกรมยอย

แสดง โปรแกรมการทดลองที่ 1.5

โดยจุดสํ าคัญของโปรแกรมนี้คือการใชคํ าสั่ง Debounce สํ าหรบัตรวจสอบการกดสวิตช ซึ่งสาเหตุที่เลือกใชคํ าสัง่นีก้็เนื่องมาจากวา คํ าสั่งนี้จะทํ าการ Debounce เพือ่แกปญหาสัญญาณรบกวนที่เกิดจากการทํ างานของหนาสัมผัสสวิตชใหดวย โดยหลังจากโปรแกรมตรวจพบการกดสวิตชในแตละครั้งนั้นจะมีการหนวงเวลาไวชั่วขณะหนึง่กอน(25mS) แลวจงึท ําการตรวจสอบการทํ างานของสวิตชซํ้ าใหมถายังพบวาสวิตชยังถูกกดอยูเชนเดิมอีกจึงจะเขาทํ างานตามเงื่อนไขของคํ าสั่งแตถาการตรวจสอบซํ้ าหลังการหนวงเวลาไปแลวไมพบวาสวิตชถูกกดอยูเหมือนกับตอนกอนการหนวงเวลาก็จะไมสนใจเงื่อนไขนั้นทํ าใหสามารถมั่นใจไดวาคํ าสั่งนี้จะทํ างานไดก็ตอเมื่อสวิตชถูกกดจริงๆแลวเทานั้น ซึ่งถาใชคํ าสั่ง Bitwait จะไมมีการ Debounce ใหดวย ซึ่งจะทํ าใหเกิดความผิดพลาดขึ้นไดงาย เนือ่งจากโปรแกรมจะเขาใจผิดเมื่อเกิดการ Bounce ของหนาสัมผัสสวิตช โดยคิดวาเปนการกดสวิตชหลายๆครั้งทํ าใหผลการทํ างานของโปรแกรมไดผลไมแนนอน ซึ่งคํ าสั่ง Bitwait เหมาะส ําหรับนํ าไปใชกับการตรวจจับสัญญาณ Input ทีเ่ปนสญัญาณทางไฟฟาจํ าพวกสัญญาณ Pulse ตางๆมากกวา

Page 31: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -50- WWW.ETT.CO.TH

ตัวอยางการทดลองที่ 1.6 โปรแกรม Switch ON/OFF แบบหลายเงื่อนไข (Input แบบ Bit)สํ าหรบัตัวอยางโปรแกรมนี้จะมีการเพิ่มเงื่อนไขการตรวจสอบ Input ใหมคีวามซับซอนขึ้นกวาเดิมอีก โดย

ก ําหนดใหมี LED Output จ ํานวน 2 ชุด และมีสวิตชแบบ Push Button จ ํานวน 4 ชุด สํ าหรับทํ าหนาที่ส่ัง ON และOFF การทํ างานของ LED Output แตละชุด โดยใหตอวงจรประกอบการทดลองดังตอไปนี้

10K

P0.0

SW ON1

VCC

560LED1

P0.4

VCC

10K

P0.1

SW OFF1

VCC

10K

P0.2

SW ON2

VCC

560LED2

P0.5

VCC

10K

P0.3

SW OFF2

VCC

รปูแสดง วงจรที่จะใชประกอบการทดลองที่1.6

สํ าหรบัการทํ างานของโปรแกรมจะเปนการสั่ง ON และ OFF การท ํางานของ LED แตละชุด โดย LED1 ก็จะถูกควบคุมโดย SW ON1 และ SW OFF1 สวน LED2 กจ็ะถูกควบคุมโดย SW ON2 และ SW OFF2 เชนเดียวกัน เพยีงแตมีการกํ าหนดเงื่อนไขเพิ่มเติมวา LED1 และ LED2 จะตองไมทํ างานพรอมๆกัน กลาวคือ ถา LED1 ถูก ON อยูแลว LED2 กจ็ะไมสามารถ ON ไดอีก ซึ่งถาหากตองการจะ ON LED2 กจ็ะตองสั่ง OFF LED1 เสียกอน

โดยการท ํางานของโปรแกรมจะเริ่มตนจากการกํ าหนดให LED1 และ LED2 อยูในสภาวะ OFF (“1”) ทั้งคู จากนัน้จงึรอตรวจสอบการกดสวิตช โดยถาตรวจพบวาเปน SW OFF กจ็ะสั่ง OFF การท ํางานของ LED ตัวนั้นๆทันที โดยไมสนใจเงื่อนไขใดๆ เชน ถาพบวาเปน SW OFF1 กจ็ะสั่ง OFF LED1 แตถาเปน SW OFF2 ก็จะสั่ง OFF LED2 เปนตน แตถาตรวจพบวาเปน SW ON กจ็ะท ําการตรวจสอบสถานะการทํ างานของ LED ฝายตรงขามกอนเสยีกอนวา ON อยูหรือไม ถาพบวา ON กจ็ะไมสนใจการกดสวิตชนั้น เชน ถาตรวจพบ SW ON1 กจ็ะตรวจสอบสถานะการทํ างานของ LED2 วา ON อยูหรือไม ซึ่งถาพบวา LED2 ยงัไมอยูในสถานะ ON กจ็ะท ํางานสั่ง ON LED1 พรอมกับเซต็สถานะการทํ างานของ LED1 ไวดวย แตถาพบวา LED2 อยูในสถานะ ON แลว ก็จะไมสนใจการกดสวิตชของการ ON ในคร้ังนั้นเลย

Page 32: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -51- WWW.ETT.CO.TH

$regfile = "T8951AC2.DAT" 'ก ําหนดใหใชกับ CPU เบอร T89C51AC2(Atmel)$ramstart = 0 ‘ก ําหนดตํ าแหนงแอดเดรสเริ่มตนของ RAM ภายใน$ramsize = 256 ‘ก ําหนดขนาดของ RAM ภายใน$crystal = 36864000 'ก ําหนดความถี่เปน 18.432MHz (X2 Mode)ckcon = &B00000001 'ก ําหนดให CPU ท ํางานในโหมด X2 (6-Clock)

Dim Led1 As Bit , Led2 As Bit ‘ประกาศตัวแปรแบบ Bit เพือ่ใชเปน Status ของ LEDSw1_on Alias P0.0 ‘ประกาศให SW1_ON หมายถึง P0.0Sw1_off Alias P0.1 ‘ประกาศให SW2_ON หมายถึง P0.1Sw2_on Alias P0.2 ‘ประกาศให SW1_OFF หมายถึง P0.2Sw2_off Alias P0.3 ‘ประกาศให SW2_OFF หมายถึง P0.3Led1_out Alias P0.4 ‘ประกาศให LED1_OUT หมายถึง P0.4Led2_out Alias P0.5 ‘ประกาศให LED2_OUT หมายถึง P0.5Led1 = 0 : Led2 = 0 ‘ก ําหนดคาเริ่มตนใหกับ LED Status เปน OFF ทั้งคูLed1_out = Not Led1 : Led2_out = Not Led1

Do ‘เร่ิมตนการวนรอบ DO..LOOP Debounce Sw1_off , 0 , Led1_off , Sub ‘ตรวจสอบการกด SW1 OFF Debounce Sw2_off , 0 , Led2_off , Sub ‘ตรวจสอบการกด SW2 OFF Debounce Sw1_on , 0 , Led1_on , Sub ‘ตรวจสอบการกด SW1 ON Debounce Sw2_on , 0 , Led2_on , Sub ‘ตรวจสอบการกด SW2 ONLoop ‘กลับไปวนรอบ DO..LOOP แบบไมรูจบ

Led1_off: ‘จดุเริ่มตนโปรแกรมยอย เมื่อกด SW1 OFFReset Led1 ‘ก ําหนดใหสถานะการทํ างานของ LED1 = OFFLed1_out = Not Led1 ‘Active LED1 OutputReturn ‘จบโปรแกรมยอย

Led2_off: ‘จดุเริ่มตนโปรแกรมยอย เมื่อกด SW2 OFFReset Led2 ‘ก ําหนดใหสถานะการทํ างานของ LED2 = OFFLed2_out = Not Led2 ‘Active LED2 OutputReturn ‘จบโปรแกรมยอย

Page 33: สารบัญ - ETT · -สารบัญ 1-สารบัญ เรื่อง หน า บทนํา การเตรียมตัวก อนการทดลอง

ปฏิบัติการทดลองและใชงาน ไมโครคอนโทรลเลอร MCS51 ดวยภาษาเบสิก BASCOM-8051

บทที่1 การใชงานพอรต Input / Output -52- WWW.ETT.CO.TH

Led1_on: ‘จดุเริ่มตนโปรแกรมยอย เมื่อกด SW1 ONIf Led2 <> 1 Then ‘ถา LED2 ยังไม ON ใหเขาทํ างานในเงื่อนไข IF THEN Set Led1 ‘ก ําหนดใหสถานะการทํ างานของ LED1 = ON Led1_out = Not Led1 ‘Active LED1 OutputEnd If ‘จบเงื่อนไข IF THENReturn ‘จบโปรแกรมยอย

Led2_on: ‘จดุเริ่มตนโปรแกรมยอย เมื่อกด SW2 ONIf Led1 <> 1 Then ‘ถา LED1 ยังไม ON ใหเขาทํ างานในเงื่อนไข IF THEN Set Led2 ‘ก ําหนดใหสถานะการทํ างานของ LED2 = ON Led2_out = Not Led2 ‘Active LED2 OutputEnd If ‘จบเงื่อนไข IF THENReturn ‘จบโปรแกรมยอย

แสดง โปรแกรมการทดลองที่ 1.6

สํ าหรบัหลกัการทํ างานของโปรแกรมนี้จะอยูที่ เทคนิคของการใชตัวแปรชนิด Bit สํ าหรบัท ําหนาที่เปนเงื่อนไขการทํ างาน (Status) เนือ่งจากตัวแปรชนิด Bit นี ้จะสามารถเก็บคาขอมูลไดเพียง 2 สถานะคือ “0” และ “1” โดยในโปรแกรมจะกํ าหนดให “0” แทนสถานะการทํ างานแบบ OFF และให “1” แทนสถานะการทํ างานแบบ ON สวนการทํ างานของ LED Output นัน้จะตองก ําหนดใหมีคาเปนตรงกันขามกับคาของสถานะ เนื่องจากเราตอวงจรของ LED แบบรับกระแส (Sink Current) ไว ดังนั้นจึงตองใหคาโลจิก “0” เพือ่ส่ัง ON การท ํางานของ LED และใหคาโลจิก “1” เพื่อส่ัง OFF การท ํางานของ LED โดยจะเหน็วาในโปรแกรมนั้นจะใชวิธีการใหคาโลจิกของพอรตสํ าหรับควบคุมการทํ างานของ LED ดวยคํ าสั่ง Not เชน LED1_OUT = NOT LED1 ซึง่เปนการนํ าคาสถานะของ LED1 มากลับใหเปนตรงขามแลวจึงเขียนคาไปยังพอรต (LED1_OUT) อีกครั้งหนึ่ง

โดยจดุทีน่าสนใจของโปรแกรมนี้อีกจุดหนึ่งก็คือ ในโปรแกรมยอย LED1_ON และ LED2_ON นั้น จะใชเงื่อนไข IF สํ าหรบัตรวจสอบสถานะการทํ างานของ LED ดานตรงขามวามีคาเปน “1” หรือ ON อยูหรือไม ซึ่งถาพบวาไมใช “1” กแ็สดงวายังไมมี LED ตัวใดถูกสั่งให ON อยูกอนเลย ก็จะเขาทํ างานในเงื่อนไขของ IF THEN คือการส่ังเซต็สถานะการทํ างานของ LED ใหมีคาเปน “1” พรอมกับส่ัง ON การท ํางานของ LED พรอมๆกันไปดวย