ภาษาแอสเซมบลี ปุ่มขัดจังหวะ interrupt

ภาษาแอสเซมบลี ปุ่มขัดจังหวะ interrupt

อินเตอร์รัพท์ (Interrupt) คือการขัดจังหวะการทำงานของโปรแกรมปกติ เมื่อเกิดเหตุการณ์บางอย่างขึ้น ทำให้ซีพียูไปทำงานที่กำหนดไว้เมื่อเกิดอินเตอร์รัพท์ คำสั่ง Interrupt ใน ATtiny13 คือ การขัดจังหวะ คำสั่งนี้มีประโยชน์มาก โดยเมื่อ ATtiny13 ได้รับสัญญาณ Interrupt แจ้งเข้ามา จะหยุดพักงานที่ทำอยู่ แล้วกระโดดมาทำในคำสั่ง Interrupt ทำให้เราไม่ต้องใช้ if เช็คเงื่อนไขต่าง ๆ ซึ่งจะทำให้เสียเวลา และบางครั้งอาจติดทำคำสั่งอื่นอยู่ ทำให้ไม่ทำงานทันที


ปุ่มขัดจังหวะ interrupt

รายการอุปกรณ์


ขั้นตอนการทํางาน

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 สำหรับ ทดสอบการทำงาน

ภาษาแอสเซมบลี ปุ่มขัดจังหวะ interrupt

ภาษาแอสเซมบลี ปุ่มขัดจังหวะ interrupt



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 >>>