C-06. การอินเตอร์รัพท์ INT1

อินเตอร์รัพท์ภายนอก INT1 ใช้วงจรเดียวกับ C-05 การอินเตอร์รัพท์ INT0 แต่ขาอินเตอร์รัพท์จะเปลี่ยนจากขา PD2 เป็น PD3

1. เปิดโปรเจคใหม ดูตัวอย่างจาก C-01 การเขียนโปรแกรมภาษา C

เพิ่มจำลองการทำงานของสวิทช์ และ LED

D1 VDD D1_NODE

D2 VDD D2_NODE

D3 VDD D3_NODE

D4 VDD D4_NODE

D5 VDD D5_NODE

D6 VDD D6_NODE

D7 VDD D7_NODE

D8 VDD D8_NODE

R1 D1_NODE PB0 0.62K

R2 D2_NODE PB1 0.62K

R3 D3_NODE PB2 0.62K

R4 D4_NODE PB3 0.62K

R5 D5_NODE PB4 0.62K

R6 D6_NODE PB5 0.62K

R7 D7_NODE PB6 0.62K

R8 D8_NODE PB7 0.62K

R9 VDD PD3 10K

K0 PD3 VSS MONOSTABLE(0.1m)

2. เขียนโปรแกรมใหม่

#include <avr\io.h> // Most basic include files

#include <avr\interrupt.h> // Add the necessary ones

#include <avr\signal.h> // here

#include <util/delay.h>

#define DataPort PORTB // Using PortC as our Dataport

#define DataDDR DDRB

unsigned char temp;

// Interrupt handler example for INT0

//

SIGNAL(SIG_INTERRUPT1) {

for(unsigned char i=0;i<10;i++)

{

DataPort = 0xAA;

_delay_ms(50);

DataPort = 0x55;

_delay_ms(50);

}

}

// ***********************************************************

// Main program

//

int main(void) {

EIMSK |= _BV(INT1); //Enable INT1

EICRA |= _BV(ISC11); //Trigger on falling edge of INT1

sei();

DataDDR = 0xFF;

temp = 0x01;

while(1) { // Infinite loop; define here the

DataPort = ~temp;

if(temp==0x80) temp = 0x01;

else temp<<=1;

_delay_ms(100); // Software debouncing control

}

}