ภาษาแอสเซมบลี ปุ่มขัดจังหวะ interrupt
อินเตอร์รัพท์ (Interrupt) คือการขัดจังหวะการทำงานของโปรแกรมปกติ เมื่อเกิดเหตุการณ์บางอย่างขึ้น ทำให้ซีพียูไปทำงานที่กำหนดไว้เมื่อเกิดอินเตอร์รัพท์ คำสั่ง Interrupt ใน ATtiny13 คือ การขัดจังหวะ คำสั่งนี้มีประโยชน์มาก โดยเมื่อ ATtiny13 ได้รับสัญญาณ Interrupt แจ้งเข้ามา จะหยุดพักงานที่ทำอยู่ แล้วกระโดดมาทำในคำสั่ง Interrupt ทำให้เราไม่ต้องใช้ if เช็คเงื่อนไขต่าง ๆ ซึ่งจะทำให้เสียเวลา และบางครั้งอาจติดทำคำสั่งอื่นอยู่ ทำให้ไม่ทำงานทันที
ปุ่มขัดจังหวะ interrupt
รายการอุปกรณ์
- 1. ATtiny13 ATTINY13A-PU 8-bit AVR
- 2. Jumper (M2M) cable 20cm Male to Male
- 3. USBasp USBisp AVR Programmer
- 4. VAR 10Pin to 6Pin Adapter Converter
- 5. Breadboard 700 Points SYB-120
- 6. หลอดไฟ LED 5mm สีแดง
- 7. รีซิสเตอร์ 220 OHM 1/4W 5%
- 8. Jumper (M2M) cable 10cm Male to Male
- 9. Push Button Switch สวิตช์กดติดปล่อยดับ 2 ขา
- 10. รีซิสเตอร์ 10K Ohm 1/4W 5%
ขั้นตอนการทํางาน
1 : โปรแกรมแรก เปิดไฟ LED
โปรแกรมแรกของ การใช้งานไมโครคอนโทรลเลอร์ ซึ่งเป็นหนึ่งในโปรแกรมที่ง่ายที่สุดเท่าที่จะเป็นไปได้ในการเขียนภาษาโปรแกรมต่างๆ เพราะฉะนั้นโดยธรรมเนียมปฏิบัติแล้ว มักจะใช้ในการตรวจสอบว่าเขียนภาษาโปรแกรมได้ถูกต้องหรือระบบมีการประมวลผลที่ถูกต้อง และมักถูกใช้เป็นตัวอย่างที่ง่ายที่สุดในการแสดงผลลัพธ์ของการเขียนโปรแกรม โดยทำตามตามขั้นตอนลิงค์ด้านล่าง
2 : การใช้งานอินเตอร์รัพท์ใน ATtiny13
ใน ATtiny13 การใช้งานอินเตอร์รัพท์จากภายนอกใช้เพียงแค่การสร้างฟังก์ชั่นรอรับ แล้วจึงใช้คำสั่งที่กำหนดว่าจะให้เกิดอินเตอร์รัพท์เมื่อไร แต่หากเป็นการอินเตอร์รัพท์จากภายในจะค่อนข้างยุ่งยากมากๆ ดังนั้นในบทความนี้จึงจะกล่าวถึงการใช้อินเตอร์รัพท์จากภายนอกเท่านั้น
ใน ATtiny13 มีแหล่งอินเทอร์รัปต์ภายนอกคือ INT0 ที่ขา PB1
Push Button กดติดปล่อยดับ
การใช้งานสวิตช์ ต่อกับ ATtiny13 เพื่อใช้การกดปุ่ม ให้เป็น Input ให้กับ ATmega328P ในการประมวลผลต่อไป เช่น การเขียนโปรแกรมให้กดสวิตช์แล้วให้ไฟติด แล้วเมื่อปล่อยสวิตช์ให้ไฟดับ โดยเราจะกำหนดสัญญาณ 0 หรือ 1 ให้กับขาของ ATtiny13ที่ต่อกับสวิตช์ไว้ตลอด
การที่เราต้องกำหนดสัญญาณ 0 หรือ 1 ให้กับสวิตช์ไว้ตลอดก็เพราะปกติแล้วจะสัญญาณรบกวนที่อาจทำให้ขาของ ATtiny13 มีค่าเปลี่ยนแปลงระหว่าง 0 หรือ 1 อยู่บ่อย ๆ จึงต้องจ่ายสัญญาณให้เพื่อป้องกันสัญญาณรบกวน
ปุ่มกด (Push Button) หรือสวิตซ์ (Switch) เป็นอุปกรณ์พื้นฐานที่ใช้กันทั่วไปในหลายๆ โปรเจค เพื่อเชื่อมจุด 2 จุดในวงจรให้ถึงกัน มักใช้เพื่อรับข้อมูลจากผู้ใช้ เช่น เมื่อผู้ใช้กดปุ่มให้อุปกรณ์ที่ต่อพ่วงเริ่มทำงาน หรืออาจจะรับสัญญาณจากกลไกต่างๆ เช่น เมื่อวัตถุเคลื่อนที่มาถึงลิมิตสวิตซ์ (Limit Switch) ให้เครื่องจักรหยุดทำงาน เป็นต้น นอกจากนี้ยังสามารถใช้ความรู้นี้ไปประยุกต์ต่อกับเซ็นเซอร์ (Sensor) บางประเภทได้อีกด้วย แต่อย่างไรก็ตามในบทความนี้จะเน้นไปที่การใช้สวิตซ์กดแบบธรรมดา
3 : เชื่อมต่อวงจร ATtiny13 สำหรับ ทดสอบการทำงาน
4: เขียนโค้ดแบบ External Pull Up
เขียนโค้ดและอัพโหลดโค้ดตามขั้นตอนปรกติ โดยโค้ดนี้เขียนไว้สำหรับ ATtiny13 ที่การต่อตัวต้านทานค่าหนึ่ง เรียกว่า Pull-UP Resistor ไว้ภายนอกไมโครคอนโทรลเลอร์ ATtiny13
sbi DDRB,PB0 ; enable LED output driver PB0
Loop:
sbic PINB,PINB1 ; jump over next instruction if input pin is high
cbi PORTB,PORTB0 ; switch LED off
sbis PINB,PINB1 ; jump over next instruction if input pin is low
sbi PORTB,PORTB0 ; switch LED on
rjmp Loop
ผลลัพธ์ : กดปุ่ม ไฟ LED จะติด และเมื่อปล่อยปุ่มกด ไฟ LED จะดับ
http://www.avr-asm-tutorial.net/avr_en/micro_beginner/7_Key_Int/7_Key_Int.html
<<< #5 ควบคุมความสว่าง LED ด้วย PWM บทความก่อนหน้า | บทความต่อไป #7 >>>